#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
оно отправляется в файл И на вывод.
Все, что не проанализировано, отправляется только на вывод