Рассмотрим развертывание Graylog приемника Fluentbit. На старте имеем:
- ВМ c установленным и настроенным GrayLog.
- ВМ с Docker для тестирования передачи логов. CPU 2, Ram 2 GB, Disk 20GB.
После того, как получен доступ к GreyLog, необходимо настроить приемник, их у GrayLog большое множество, для данного проекта будем использовать GELF, это адаптированный json формат. Для того, чтобы создать входящий поток, переходим во вкладку System — > Inputs.
Добавляем новыйдополнительный приемник тип выбираем GELF UDP и нажимаем запустить. В новом окне заполняем настройки. Сохраняем изменения после редактирования параметров.
Теперь GrayLog готов к приему сообщений. Далее выполним настройку отправки логов. Пример сбора логов с Docker контейнера. У docker есть встроенный драйвер fluentd, который преобразовывает и передает логи в GrayLog. Ниже пример docker-compose.yaml с подключенным драйвером и настройками для передачи логов:
version: '3.8'
services:
nginx:
image: nginx
container_name: nginx
hostname: nginx
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 80:80
depends_on:
- fluent-bit
logging:
driver: "fluentd"
options:
fluentd-address: 10.0.0.11:24224
tag: nginx.logs
networks:
- app
networks:
app:
driver: bridge
- Контейнеру nginx добавили драйвер вывода логов в fluentd
- Добавили тег nginx.logs , который он будет подписывать в начало. Это удобно когда много сервисов.
Далее запускаем сам fluent bit, который будет принимать логи от nginx обрабатывать их и отдавать в GrayLog. Далее представлены его конфигурационные файлы.
[SERVICE]
flush 1
log_Level info
daemon off
http_server on
http_listen 127.0.0.1
http_port 2020
storage.metrics on
parsers_File parsers.conf
[INPUT]
Name forward
Listen 0.0.0.0
Port 24224
Buffer_Chunk_Size 1M
Buffer_Max_Size 6M
[OUTPUT]
Name gelf
Match nginx.logs
Host graylog
Port 12200
Mode udp
Gelf_Short_Message_Key log
[OUTPUT]
Name stdout
Match *
[FILTER]
Name record_modifier
Match nginx.logs
Allowlist_key log
[FILTER]
Name parser
Match nginx.logs
Key_Name log
Parser nginx_parser
Reserve_Data On
Preserve_Key On
[FILTER]
Name modify
Match nginx.logs
Add hostname srv.efsol.dev
Add log_type nginx_logs
Расшифровка конфигурационного файла
Есть входящий поток, который вызывается по средствам forward, что подразумевает пересылку логов от контейнера к точке назначения. Далее мы указываем, что мы хотим использовать в качестве точки назначения GrayLog, в формате gelf и обрабатывать все что приходит к нам с тегом nginx.logs. Далее пропускаем данные через фильтры, первый убирает все поля кроме поля log, это удобно чтобы не забивать elasticsearch лишней информацией, далее второй фильтр парсит лог-файл, разбивая его на необходимые блоки. И последний добавляет 2 поля, с какого хоста мы отправляем наши логи и что это за логи. Все готово, можно запускать контейнер и переходить в интерфейс GrayLog.
Переходим в интерфейс, Search и в странице поиска выбираем временной промежуток, далее на изображение линзы, и видим наш запрос.
Данные отображаются, для более дательного просмотра можно нажать на интересующее событие и оно откроется с дополнительными полями.
Мы можем помочь в настройке GrayLog, а также его поддержке в рамках DevOps-аутсорсинга!
