Инструменты пользователя

Инструменты сайта


linux:fluentd

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:fluentd [2023/09/21 10:29]
admin
linux:fluentd [2024/01/09 05:53] (текущий)
admin
Строка 3: Строка 3:
 <details> <details>
 <summary>:!: Модуль Parse. RegExp </summary> <summary>:!: Модуль Parse. RegExp </summary>
 +[[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|Дока]]\\
  
 В регулярном выражении должен быть хотя бы один именованный захват (?<NAME> PATTERN)\\ В регулярном выражении должен быть хотя бы один именованный захват (?<NAME> PATTERN)\\
Строка 38: Строка 39:
 {{:linux:elk-2.jpg?direct&600|}}\\ {{:linux:elk-2.jpg?direct&600|}}\\
  
 +Парсер для многострочного варианта\\ 
 +Модуль "multiline" является аналогом "regexp" только для многострочного использования\\ 
 +[[https://docs.fluentd.org/parser/multiline|Дока]]\\
  
 <code xml> <code xml>
 +<source> 
 +  @type tail 
 +  <parse> 
 +    @type multiline 
 +    format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}[ ]+.*/ 
 +    format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})[ ]+(?<thread>\[.*\]+) (?<level>[^ ]+)[ ]+(?<class>[^ ]+)[ ]+\-[ ]+(?<message>.*)/ 
 +  </parse> 
 +  path C:\myapp\logs\myapp.log 
 +  pos_file C:\td-agent\pos\myapp.pos 
 +  tag myapp_log 
 +</source>
 </code> </code>
- 
 </details> </details>
- 
- 
- 
-<details> 
-<summary>:!: </summary> 
- 
-</details> 
- 
  
 <details> <details>
Строка 121: Строка 125:
 а штатный конфиг, "td-agent.conf", содержит строку "@include config.d/*.conf"\\ а штатный конфиг, "td-agent.conf", содержит строку "@include config.d/*.conf"\\
 </details> </details>
 +
 +<code bash>
 +# Скрипт для установки 4ой версии
 +$ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh
 +</code>
 +
 +
 +===== Конфигурация =====
 +
 +<Source> -> <Match(что делать)>
 +<Source> -> <Match(что делать)>
 +
 +**Source** - информация об источнике данных\\
 +**Match** - информация о том куда передавать полученные данные\\
 +**Include** - информация о типах файлов\\
 +**System** - настройки системы\\
 +
 +
 +==== Source ====
 +Откуда брать данные. Для подключения источников есть разные плагины (например "type http" или "type forward"). Для каждого источника отдельный блок\\
 +
 +Каждое событие передается маршрутизатору сообщений, каждое событие содержит "tag, time и record"\\
 +На основании "tag" принимается решение куда перенаправлять событие, а record содержит сами данные в формате json\\
 +
 +
 +==== Match ====
 +Указывается по какому признаку отбирать события для полседующей обработки, тоже используются спец плагины\\
 +
 +Например:\\
 +<code>
 +#Берём события, помеченные тэгами "myapp.access" 
 +#и сохраняем их в файле/var/log/fluent/access.%Y-%m-%d
 +#данные можно разбивать на порции с помощью опции time_slice_format.
 +
 +<match myapp.access>
 +  type file
 +  path /var/log/fluent/access
 +</match>
 +</code>
 +
 +Есть ряд комбинаций по маске, звездочки, фигурные скобки\\
 +<code>
 +- символ * означает соответствие любой части тэга (если указать <match a.*>, то a.b будет соответствовать заданному условию, а a.b.c — нет);
 +- ** означает соответствие любому тэгу (если указать <match **>, то заданному условию будут соответствовать и a, и a.b., и a.b.c);
 +- {x, y, z} означает соответствие по крайней мере одному из тэгов, указанных в фигурных скобках (если указать <match {a, b}>, то а и b будут соответствовать заданному условию, а с — нет);
 +- фигурные скобки можно использоовать в сочетании с символами * и **, например: <match {a, b}. c.*> или <match {a.*, b}.c>*;
 +- <match a b> означает соответствие тэгам a и b одновременно;
 +- <match a.** b.*> означает соответствие тэгам a, a.b и a.b.c (первая часть) и b.d (вторая часть).
 +</code>
 +
 +События матчатся друг за другом и похоже дальше не передаются, т.к. самые общие правила должны быть внизу\\
 +
 +
 +
 +<details>
 +<summary>:!:Пример конфига </summary>
 +В таком подходе парсятся все логи в указанном расположении, а для разделения в матче задаем "service_name ${"#{tag_parts[3]}"}", это 3ий элемент в пути, тут будет имя папки\\
 +
 +"logstash_prefix" указанный в ELK это префикс по которому будем отбирать в кибане\\
 +:!:Не забываем при мерже нескольких конфигов, что матчи с одинаковым именем могут пересекаться и не будет правильно работать, используется первый подходящий, дальше не идет\\
 +
 +<code>
 +<source>
 +  @type tail
 +  format multiline
 +  format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}/
 +  format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})[ ]+\[(?<thread>[^ ]+)?\][ ]+(?<level>[^ ]+)[ ]+(?<class>[^ ]+)[ ]+\- (?<message>.*)/
 +  time_format %F %T.%L
 +  path "/opt/BIN/Service_*/log/my_service.log"
 +  tag my_tag.*
 +  read_from_head true
 +  pos_file /var/log/td-agent/pos/FileMultiplicator.pos
 +  refresh_interval 10s
 +  rotate_wait 0s
 +  emit_unmatched_lines true
 +</source>
 +
 +<filter my_tag**>
 +  @type grep
 +  <regexp>
 + key level
 +        pattern /ERROR/
 +  </regexp>
 +</filter>
 +
 +<match my_tag**>
 +@type record_modifier
 +  <record>
 +    host "#{Socket.gethostname}"
 +    service_name ${"#{tag_parts[3]}"}
 +  </record>
 +tag elkFM
 +</match>
 +
 +<match elkFM>
 +  @type elasticsearch
 +  host 10.10.10.10
 +  port 9100
 +  logstash_format true
 +  logstash_prefix my_prefix
 +  user ====
 +  password ====
 +  reconnect_on_error true
 +  reload_on_failure true
 +  reload_connections false
 +  <buffer >
 +    @type memory
 +    chunk_limit_size 12m
 +    queue_limit_length 50
 +    overflow_action block
 +    retry_max_interval 10
 +    retry_randomize true
 +    retry_max_times 3
 +    flush_interval 5
 +    flush_mode interval
 +    flush_thread_count 5
 +  </buffer>
 +</match>
 +</code>
 +</details>
 +
 +
 +
 +
 +
 +
linux/fluentd.1695292195.txt.gz · Последнее изменение: 2023/09/21 10:29 — admin