====== Fluentd ======
:!: Модуль Parse. RegExp [[https://adminnotes.info/%D0%B1%D0%B5%D0%B7-%D1%80%D1%83%D0%B1%D1%80%D0%B8%D0%BA%D0%B8/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-fluentd.html|Дока]]\\ В регулярном выражении должен быть хотя бы один именованный захват (? PATTERN)\\ * :!: Все выражение находится между слешами\\ * :!: Каждый блок в круглых скобках, вопрос, имя, как в прмиере выше\\ * :!: Между блоками просто пробел\\ * :!: Поле с форматом даты можно задачть специально, отдельной строкой\\ * :!: Полям можно типы данных указывать\\ Если в рег выражении есть захват с именем "time", его можно настроить с помощью "time_key" параметра, оно используется как время события. Вы можете указать формат времени в параметре "time_format"\\ @type regexp expression /.../im expression ^(? {{:linux:elk-2.jpg?direct&600|}}\\ Парсер для многострочного варианта\\ Модуль "multiline" является аналогом "regexp" только для многострочного использования\\ [[https://docs.fluentd.org/parser/multiline|Дока]]\\ @type tail @type multiline format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}[ ]+.*/ format1 /^(? path C:\myapp\logs\myapp.log pos_file C:\td-agent\pos\myapp.pos tag myapp_log
:!: td-agent. Пример конфига агента для отправки в ELK #### ## Output descriptions: ## @type tail @type regexp expression /^(? path C:\my_service\logs\my_service.log pos_file C:\td-agent\pos\my_service.pos tag my_service_log @type record_modifier host "2.2.2.0" tag my_service # # @type grep # # key level # pattern /info/i # # @type elasticsearch host 1.1.1.1 port 9200 logstash_format true logstash_prefix my_service user -- password -- reconnect_on_error true reload_on_failure true reload_connections false log_es_400_reason true request_timeout 15s @type memory chunk_limit_records 1000 chunk_limit_size 2M queue_limit_length 100 queued_chunks_limit_size 200 overflow_action block retry_max_interval 10 retry_randomize true retry_max_times 3 flush_interval 5 flush_mode interval flush_thread_count 5 Файл лежит в папке "etc/td-agent/config.d/"\\ а штатный конфиг, "td-agent.conf", содержит строку "@include config.d/*.conf"\\
# Скрипт для установки 4ой версии $ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh ===== Конфигурация ===== -> -> **Source** - информация об источнике данных\\ **Match** - информация о том куда передавать полученные данные\\ **Include** - информация о типах файлов\\ **System** - настройки системы\\ ==== Source ==== Откуда брать данные. Для подключения источников есть разные плагины (например "type http" или "type forward"). Для каждого источника отдельный блок\\ Каждое событие передается маршрутизатору сообщений, каждое событие содержит "tag, time и record"\\ На основании "tag" принимается решение куда перенаправлять событие, а record содержит сами данные в формате json\\ ==== Match ==== Указывается по какому признаку отбирать события для полседующей обработки, тоже используются спец плагины\\ Например:\\ #Берём события, помеченные тэгами "myapp.access" #и сохраняем их в файле/var/log/fluent/access.%Y-%m-%d #данные можно разбивать на порции с помощью опции time_slice_format. type file path /var/log/fluent/access Есть ряд комбинаций по маске, звездочки, фигурные скобки\\ - символ * означает соответствие любой части тэга (если указать , то a.b будет соответствовать заданному условию, а a.b.c — нет); - ** означает соответствие любому тэгу (если указать , то заданному условию будут соответствовать и a, и a.b., и a.b.c); - {x, y, z} означает соответствие по крайней мере одному из тэгов, указанных в фигурных скобках (если указать , то а и b будут соответствовать заданному условию, а с — нет); - фигурные скобки можно использоовать в сочетании с символами * и **, например: или *; - означает соответствие тэгам a и b одновременно; - означает соответствие тэгам a, a.b и a.b.c (первая часть) и b.d (вторая часть). События матчатся друг за другом и похоже дальше не передаются, т.к. самые общие правила должны быть внизу\\
:!:Пример конфига В таком подходе парсятся все логи в указанном расположении, а для разделения в матче задаем "service_name ${"#{tag_parts[3]}"}", это 3ий элемент в пути, тут будет имя папки\\ "logstash_prefix" указанный в ELK это префикс по которому будем отбирать в кибане\\ :!:Не забываем при мерже нескольких конфигов, что матчи с одинаковым именем могут пересекаться и не будет правильно работать, используется первый подходящий, дальше не идет\\ @type tail format multiline format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}/ format1 /^(?