Конфигурационные файлы «Ретранслятора»

Конфигурационный файл fluent-bit.conf

Для настройки «Ретранслятора» используется основной конфигурационный файл /etc/opt/termidesk-repeater/fluent-bit.conf.

Конфигурационный файл структурирован по секциям, каждая из которых описывает определенный компонент конвейера данных:

  • [SERVICE] - описываются глобальные настройки termidesk-repeater;

  • [INPUT] - описываются настройки для получения входящих событий;

  • [OUTPUT] - описываются настройки для сохранения обработанных событий.

Описание секций и параметров приведено в таблице (см. таблицу [Параметрыфайлаfluent-bit.conf]).

При изменении файла fluent-bit.conf потребуется перезапуск службы termidesk-repeater:

sudo systemctl restart termidesk-repeater

Пример конфигурационного файла:

[SERVICE]
    flush        1
    daemon       Off
    log_level    info
    parsers_file parsers.conf
    plugins_file plugins.conf
    http_server  Off
    http_listen  0.0.0.0
    http_port    2020
    storage.metrics on

[INPUT]
    Name              forward
    Listen            0.0.0.0
    Port              24224
    Buffer_Chunk_Size 1M
    Buffer_Max_Size   6M

[OUTPUT]
    Name                pgsql
    Match               *
    Host                127.0.0.1
    Port                5432
    User                fluentbit
    Password            Password!
    Database            fluentbit
    Table               logs
    Time_Key            timestamp
    Time_Format         %Y-%m-%d %H:%M:%S.%LZ
    min_pool_size       1
    max_pool_size       20
Таблица 1. Параметры файла fluent-bit.conf
Параметр Значение по умолчанию Описание

Секция [SERVICE]

flush

1

Частота отправки данных (в секундах) из внутреннего буфера в выходные плагины

daemon

Off

Управление режимом работы в фоновом режиме

log_level

info

Уровень детализации журнала событий.

Может быть:

  • error;

  • warning;

  • info;

  • debug

parsers_file

parsers.conf

Путь к конфигурационному файлу настройки обработчиков данных (парсеров). Можно задать несколько путей

plugins_file

plugins.conf

Путь к конфигурационному файлу настройки внешних расширений (плагинов)

http_server

Off

Управление режимом работы встроенного HTTP-сервера, предоставляющего API для мониторинга и управления.

Возможные значения:

  • on - встроенный HTTP-сервер включен;

  • off - встроенный HTTP-сервер выключен

http_listen

0.0.0.0

IP-адрес прослушивания встроенного HTTP-сервера

http_port

2020

Порт встроенного HTTP-сервера

storage.metrics

on

Управление режимом сохранения в постоянное хранилище.

Возможные значения:

  • on - «Ретранслятор» сохраняет внутренние метрики производительности в то же постоянное хранилище, что и обычные данные событий. Метрики будут экспортироваться только при включенном параметре http_server;

  • off - «Ретранслятор» не сохраняет внутренние метрики в постоянное хранилище

storage.path

/tmp/storage

По умолчанию параметр закомментирован.

Абсолютный путь для хранения буферов данных файловой системы (chunk)

storage.sync

normal

По умолчанию параметр закомментирован.

Управление режимом синхронизации, используемого для хранения данных в файловой системе.

Возможные значения:

  • normal;

  • full

storage.checksum

off

По умолчанию параметр закомментирован.

Управление режимом проверки целостности данных при записи и чтении данных из файловой системы, используется алгоритм CRC32

storage.backlog.mem_limit

5M

По умолчанию параметр закомментирован.

Максимальное значение памяти, используемое при обработке резервных данных.

Резервные данные - это данные, которые не были отправлены и находятся на уровне хранилища. Такие данные проверяются, если задан и используется параметр storage.path

Секция [INPUT]

Name

forward

Тип входного плагина. Значение forward используется для получения событий от других узлов «Ретранслятора»

Listen

0.0.0.0

IP-адрес прослушивания входящих событий. Значение 0.0.0.0 позволяет принимать соединения на всех интерфейсах

Port

24224

Порт прослушивания входящих событий

Buffer_Chunk_Size

1M

Размер буфера для хранения временных меток (chunk). Значение 1M зарезервировало 1 МБ для хранения данных

Buffer_Max_Size

6M

Максимальный размер буфера в случае очереди данных

Секция [OUTPUT]

Name

pgsql

Определение типа выходного плагина. Значение pgsql указывает на отправку данных в СУБД PostgreSQL

Match

*

Указывает на тег и суффикс записи, обрабатываемой выходным плагином. Параметр используется для вывода событий с определенным тегом и суффиксом в другие системы.

Формат: <тег>.<суффикс>.

Значение * соответствует всем записям

Host

127.0.0.1

Адрес сервера СУБД PostgreSQL

Port

5432

Порт, на котором работает СУБД PostgreSQL

User

fluentbit

Имя пользователя для подключения к БД

Password

Password!

Пароль пользователя для подключения к БД

Database

fluentbit

Имя БД, в которую будут отправлены события

Table

logs

Название таблицы БД, в которую будут записываться события

Time_Key

timestamp

Ключ, под которым будет храниться временная метка

Time_Format

%Y-%m-%d %H:%M:%S.%LZ

Формат временной метки

min_pool_size

1

Минимальный размер пула соединений

max_pool_size

20

Максимальный размер пула соединений

Конфигурационный файл parsers.conf

Конфигурационный файл /etc/opt/termidesk-repeater/parsers.conf предназначен для определения и управления обработчиками (парсерами) журналов. Обработчики необходимы для преобразования неструктурированных записей журнала в структурированный формат, что упрощает их обработку, фильтрацию и анализ.

Пример файла:

[PARSER]
    Name   apache
    Format regex
    Regex  ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    Name   apache2
    Format regex
    Regex  ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>.*)")?$
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    Name   apache_error
    Format regex
    Regex  ^\[[^ ]* (?<time>[^\]]*)\] \[(?<level>[^\]]*)\](?: \[pid (?<pid>[^\]]*)\])?( \[client (?<client>[^\]]*)\])? (?<message>.*)$

[PARSER]
    Name   nginx
    Format regex
    Regex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    # https://rubular.com/r/IhIbCAIs7ImOkc
    Name        k8s-nginx-ingress
    Format      regex
    Regex       ^(?<host>[^ ]*) - (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*) "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" (?<request_length>[^ ]*) (?<request_time>[^ ]*) \[(?<proxy_upstream_name>[^ ]*)\] (\[(?<proxy_alternative_upstream_name>[^ ]*)\] )?(?<upstream_addr>[^ ]*) (?<upstream_response_length>[^ ]*) (?<upstream_response_time>[^ ]*) (?<upstream_status>[^ ]*) (?<reg_id>[^ ]*).*$
    Time_Key    time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    Name   json
    Format json
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    Name   logfmt
    Format logfmt

[PARSER]
    Name         docker
    Format       json
    Time_Key     time
    Time_Format  %Y-%m-%dT%H:%M:%S.%L
    Time_Keep    On
    # --
    # Since Fluent Bit v1.2, if you are parsing Docker logs and using
    # the Kubernetes filter, it's not longer required to decode the
    # 'log' key.
    #
    # Command      |  Decoder | Field | Optional Action
    # =============|==================|=================
    #Decode_Field_As    json     log

[PARSER]
    Name        docker-daemon
    Format      regex
    Regex       time="(?<time>[^ ]*)" level=(?<level>[^ ]*) msg="(?<msg>[^ ].*)"
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L
    Time_Keep   On

[PARSER]
    Name        syslog-rfc5424
    Format      regex
    Regex       ^\<(?<pri>[0-9]{1,5})\>1 (?<time>[^ ]+) (?<host>[^ ]+) (?<ident>[^ ]+) (?<pid>[-0-9]+) (?<msgid>[^ ]+) (?<extradata>(\[(.*?)\]|-)) (?<message>.+)$
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z
    Time_Keep   On

[PARSER]
    Name        syslog-rfc3164-local
    Format      regex
    Regex       ^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<ident>[a-zA-Z0-9_\/\.\-]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?<message>.*)$
    Time_Key    time
    Time_Format %b %d %H:%M:%S
    Time_Keep   On

[PARSER]
    Name        syslog-rfc3164
    Format      regex
    Regex       /^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<host>[^ ]*) (?<ident>[a-zA-Z0-9_\/\.\-]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?<message>.*)$/
    Time_Key    time
    Time_Format %b %d %H:%M:%S
    Time_Keep   On

[PARSER]
    Name    mongodb
    Format  regex
    Regex   ^(?<time>[^ ]*)\s+(?<severity>\w)\s+(?<component>[^ ]+)\s+\[(?<context>[^\]]+)]\s+(?<message>.*?) *(?<ms>(\d+))?(:?ms)?$
    Time_Format %Y-%m-%dT%H:%M:%S.%L
    Time_Keep   On
    Time_Key time

[PARSER]
    # https://rubular.com/r/0VZmcYcLWMGAp1
    Name    envoy
    Format  regex
    Regex ^\[(?<start_time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)? (?<protocol>\S+)" (?<code>[^ ]*) (?<response_flags>[^ ]*) (?<bytes_received>[^ ]*) (?<bytes_sent>[^ ]*) (?<duration>[^ ]*) (?<x_envoy_upstream_service_time>[^ ]*) "(?<x_forwarded_for>[^ ]*)" "(?<user_agent>[^\"]*)" "(?<request_id>[^\"]*)" "(?<authority>[^ ]*)" "(?<upstream_host>[^ ]*)"
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z
    Time_Keep   On
    Time_Key start_time

[PARSER]
    # https://rubular.com/r/hbsTIxFFMozLmh
    Name    istio-envoy-proxy
    Format  regex
    Regex ^\[(?<start_time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)? (?<protocol>\S+)" (?<response_code>[^ ]*) (?<response_flags>[^ ]*) (?<response_code_details>[^ ]*) (?<connection_termination_details>[^ ]*) "(?<upstream_transport_failure_reason>[^ ]*)" (?<bytes_received>[^ ]*) (?<bytes_sent>[^ ]*) (?<duration>[^ ]*) (?<x_envoy_upstream_service_time>[^ ]*) "(?<x_forwarded_for>[^ ]*)" "(?<user_agent>[^\"]*)" "(?<x_request_id>[^\"]*)" "(?<authority>[^ ]*)" "(?<upstream_host>[^ ]*)" (?<upstream_cluster>[^ ]*) (?<upstream_local_address>[^ ]*) (?<downstream_local_address>[^ ]*) (?<downstream_remote_address>[^ ]*) (?<requested_server_name>[^ ]*) (?<route_name>[^  ]*)$
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z
    Time_Keep   On
    Time_Key start_time

[PARSER]
    # http://rubular.com/r/tjUt3Awgg4
    Name cri
    Format regex
    Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z
    Time_Keep   On

[PARSER]
    Name    kube-custom
    Format  regex
    Regex   (?<tag>[^.]+)?\.?(?<pod_name>[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log$

[PARSER]
    # Examples: TCP: https://rubular.com/r/Q8YY6fHqlqwGI0  UDP: https://rubular.com/r/B0ID69H9FvN0tp
    Name    kmsg-netfilter-log
    Format  regex
    Regex   ^\<(?<pri>[0-9]{1,5})\>1 (?<time>[^ ]+) (?<host>[^ ]+) kernel - - - \[[0-9\.]*\] (?<logprefix>[^ ]*)\s?IN=(?<in>[^ ]*) OUT=(?<out>[^ ]*) MAC=(?<macsrc>[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}):(?<macdst>[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}):(?<ethtype>[0-9a-f]{2}:[0-9a-f]{2}) SRC=(?<saddr>[^ ]*) DST=(?<daddr>[^ ]*) LEN=(?<len>[^ ]*) TOS=(?<tos>[^ ]*) PREC=(?<prec>[^ ]*) TTL=(?<ttl>[^ ]*) ID=(?<id>[^ ]*) (D*F*)\s*PROTO=(?<proto>[^ ]*)\s?((SPT=)?(?<sport>[0-9]*))\s?((DPT=)?(?<dport>[0-9]*))\s?((LEN=)?(?<protolen>[0-9]*))\s?((WINDOW=)?(?<window>[0-9]*))\s?((RES=)?(?<res>0?x?[0-9]*))\s?(?<flag>[^ ]*)\s?((URGP=)?(?<urgp>[0-9]*))
    Time_Key  time
    Time_Format  %Y-%m-%dT%H:%M:%S.%L%z

Конфигурационный файл plugins.conf

Конфигурационный файл /etc/opt/termidesk-repeater/plugins.conf предназначен для определения и загрузки внешних или пользовательских плагинов. По умолчанию после установки никакие внешние плагины не подключены.