#fluentd
#fluentd
Вопрос:
Надеюсь получить некоторую помощь здесь. Моя настройка Fluentd настроена на отправку журналов на 2 выхода, каждый вывод ожидает другую структуру журналов.
До сих пор конфигурация заключалась в том, чтобы дважды сканировать журнал, каждый раз добавлять разные теги и на основе тега настраивать соответствующий синтаксический анализ и вывод.
Например:
myapp.log -> tag app_splunk -> filters of type x, y, x -> match and output to splunk
myapp.log -> tag app_s3 -> different set of filters -> output to S3
Я пытаюсь найти правильный способ обработки журнала один раз и добиться тех же результатов без двойной маркировки. Я попытался использовать @relabel и предоставить новый набор фильтров на основе метки, в результате журнал уже был обработан первой коллекцией фильтров, и теперь новые фильтры не работают должным образом.
Есть идеи, как я могу этого добиться?
Ответ №1:
<match **>
@type copy
<store>
@type relabel
@label @app_splunk
</store>
<store>
@type relabel
@label @app_s3
</store>
</match>
<label @app_splunk>
<filter **>
@type grep
<regexp>
key log_type # <- not sure what your're filtering on, replace with your own.
pattern splunk
</regexp>
</filter>
<match **>
@type splunk
...
</match>
</label @app_splunk>
<label @app_s3>
<filter **>
@type grep
<regexp>
key log_type
pattern s3
...
</label @app_splunk>
@type copy
создает независимые копии потока журналов.- Метка описывает изолированный конвейер потока журнала. При копировании потока в 2 разных ярлыка вы можете фильтровать и сопоставлять что угодно в label1, и это не повлияет на входные данные label2.
Вы можете сделать столько копий, сколько вам нужно.
Это также позволяет создавать перекрывающиеся подпотоки внутри каждой метки. Например, label1 может отфильтровывать DEBUG
и более высокие уровни журнала, а label2 может принимать только INFO
и выше. Поскольку они являются независимыми потоками, в этом случае оба получателя получат INFO
и выше, и label1 получит DEBUG
в дополнение к этому.