Fluent Bit собирает, парсит и фильтрует сообщения из контейнеров и сохраняет их в хранилище Loki. Конфигурационные файлы fluent-bit.conf и parsers.conf расположены в папке /opt/dppm/planr/logging/fluent-bit
[SERVICE] Flush 5 Daemon Off Parsers_File parsers.conf [INPUT] Name forward Listen 0.0.0.0 Port 24224 [FILTER] Name parser Parser docker Match * Key_Name log Reserve_Data true Preserve_Key false [Output] Name grafana-loki Match planr Url ${LOKI_URL} RemoveKeys container_id,log Labels {service_name="planr"} LabelKeys level,source BatchWait 1s BatchSize 1001024 LineFormat json
Блок SERVICE задает общие параметры работы Fluent Bit:
Блок INPUT описывает входные данные, то есть откуда Fluent Bit будет получать логи.
FILTER позволяет обрабатывать и изменять входящие данные перед их отправкой на выходы. Здесь используется парсер для обработки данных, поступающих от Docker-контейнеров.
OUTPUT — отправка данных в Grafana Loki.
Если, необходимо что бы логи сохранялись в файл, нужно отредактировать файл конфигурации fluent-bit.conf и добавить ещё один раздел Output, в котором:
[Output] Name file Match * Path /fluent-bit/log/output_test
Далее, нужно внести изменения в файл docker-compose.yml. Для того, что бы примонтировать локальную папку к файловой системе контейнера, необходимо в файле /opt/dppm/planr/docker-compose.yml в описании профиля fluent-bit в секции volumes сопоставить локальную папку на хосте с папкой в контейнере,например:
fluent-bit: image: grafana/fluent-bit-plugin-loki:3.1.0 container_name: fluent-bit restart: *default-restart-policy environment: - LOKI_URL=http://loki:3100/loki/api/v1/push volumes: # При использовании portainer указать абсолютный путь до файлов конфигурации. # Например: # - /opt/dppm/planr/logging/fluent-bit:/fluent-bit/etc/ # - ./logging/fluent-bit:/fluent-bit/etc/ - ./logging/output_test:/fluent-bit/log/output_test networks: planr: ipv4_address: ${DOCKER_NETWORK_PREFIX:-172.41.0}.254 profiles : ['logging', 'all']
Где, ./logging/output_test это локальная папка, а /fluent-bit/log/output_test папка для хранения логов в контейнере. Что бы, изменения вступили в силу, нужно выполнить ./start.sh.
Если, используетcя служба логирования rsyslog(или syslog-ng), то необходимо добавить в конфигурацию fluent-bit следующие разделы:
[FILTER] Name rewrite_tag Match planr Rule $log.command_name (auth.(local|kerberos|openid|saml|validateApiKey|logout))|(user.(setState|setPassword|create|register|disconnect|delete|import|changeForgottenPassword))|(admin.(create|delete|setState|setPassword))|(role.(create|update|delete)) InfoSec true
Фильтр rewrite_tag:
[FILTER] Name modify Match InfoSec Add hostname localhost Add appname Plan-R # Add vendor Digital_Practices # Add product Plan-R
Фильтр modify. Этот фильтр модифицирует логи, тег которых равен InfoSec:
[OUTPUT] name syslog match InfoSec host your_host port 514 mode tcp syslog_format rfc5424 syslog_maxsize 2048 syslog_hostname_key hostname syslog_appname_key appname syslog_message_key log
Выходной плагин syslog:
Так же, в файле конфигурации rsyslog /etc/rsyslog.conf, нужно раскомментировать, следующие разделы, которые отвечают за открытие портов 514 UDP/TCP на которых работает служба rsyslog(syslog-ng).
После, внесения изменений, необходимо перезапустить службу rsyslog, командой:
sudo systemctl restart rsyslog
Более подробную информацию о настройке конфигурационного файла fluent bit, можно получить на сайте https://docs.fluentbit.io/manual/concepts/data-pipeline