Как проанализировать конкретное сообщение и отправить его на другой вывод с помощью fluent bit

#regex #parsing #logging #fluent-bit

#регулярное выражение #синтаксический анализ #ведение журнала #fluent-бит

Вопрос:

Мне нужно проанализировать конкретное сообщение из файла журнала с помощью fluent-bit и отправить его в файл. Все сообщения должны быть отправлены в стандартный вывод, и каждое сообщение, содержащее определенную строку, должно быть отправлено в файл. Мне удалось сделать это с помощью фильтра со следующей конфигурацией

 [SERVICE]
    Flush     1
    Log_Level info

[INPUT]
    Name        tail
    Path        inputfile.log
    Tag         test_tag

[FILTER]
    Name          rewrite_tag
    Match         test_tag
    Rule          $log (user_temporarily_disabled)  from.$TAG.new true
    Emitter_Name  re_emitted

[OUTPUT]
    Name   stdout
    Match  test_tag

[OUTPUT]
    Name file
    Match from.*
    File myoutput.log
  

При следующей конфигурации всякий раз, когда я отправляю строку во входной файл, она в любом случае переходит в стандартный вывод, и она переходит в file, если строка содержит строку «user_temporarily_disabled». Это достигается путем перезаписи тега с фильтром rewrite_tag.

Что мне нужно больше, так это проанализировать сообщение и переписать его в новую форму. Я безуспешно пытался добавить анализатор

Ответ №1:

хорошо, я нашел его, потратив некоторое время

 [SERVICE]
    Parsers_File parserFile.conf

[INPUT]
    Name        tail
    Path        inputfile.log
    Tag         inputtag

#first filter to redirect to parser
[FILTER]
    Name parser
    Match inputtag*
    Key_Name log
    Parser myparser

#second filter to rewrite tag after parser
[FILTER]
    Name          rewrite_tag
    Match         *
    Rule          $ALARMTEXT (user_temporarily_disabled)  newtag true
    Emitter_Name  re_emitted

[OUTPUT]
    Name file
    Match newtag*
    File output.log

[OUTPUT]
    Name stdout
    Match *
  

и анализатор должен быть примерно таким

 [PARSER]
    Name myparser
    Format regex
    Regex ^(?<INT>[^ ] ) (?<FLOAT>[^ ] ) (?<BOOL>[^ ] ) (?<ALARMTEXT>. )$
  

теперь, если я отправлю что-то подобное во входной файл :

 echo "111 0.1 true user_temporarily_disabled" >> inputfile.log
  

оно отправляется в файл И на вывод.
Все, что не проанализировано, отправляется только на вывод