Рассмотрим развертывание 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-аутсорсинга!