Fluentd: один и тот же файл, разные фильтры и выходные данные

#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 в дополнение к этому.