Для отправки логов с докера в Graylog используется драйвер GELF, который docker поддерживает из коробки.
Gelf – это драйвер логирования который понимают множество современных утилит, пример Graylog, Logstash, и Fluentd живет он на 12201 порту. Нам остается только настроить его драйвером по умолчанию для, сделать это можно добавив необходимые ключи и значения в файл daemon.json.
Файл лежит в следующих директориях:
– linux: /etc/docker/daemon.json
– macOS: ~/.docker/daemon.json
Стоить помнить, что перед тем как отправлять логи, нужно создать Input GELF UDP в настройках Graylog.
Так как Input на Graylog у меня уже настроен, перейду к тестированию отправки логов.
Что ж, открываем файл ~/.docker/daemon.json удобным Вам редактором и добавляем ключ log-griver and log-opts и их значения:
{ "log-driver": "gelf", "log-opts": { "gelf-address": "udp://GRAYLOG_SERVER_IP:12201" } }
Чтоб изменения применились нужно перезапустить docker.
После перезапуска попробуем отправить простой вывод Hello World в Graylog, для этого запустим контейнер с ключами –log-driver и –log-opt:
❯ docker run \ --log-driver gelf --log-opt gelf-address=udp://*********.example.com:12201 \ alpine echo hello world from local hello world from local
Переходим в UI Graylog, в поиске пишем Hello и смотрим результат:
отлично, все работает.
Если говорить про docker-compose, то здесь тоже все легко и элементарно. Для примера опишем простой compose файл с именем grafana-compose.yml с добавлением параметров logging:
version: "3" services: grafana: image: grafana/grafana-oss:8.2.0 ports: - 3000:3000 logging: driver: gelf options: gelf-address: "udp://*******.example.com:12201" tag: "grafana-compose log"
после чего запустим его:
❯ docker-compose -f grafana-compose.yml up [+] Running 1/0 ⠿ Container docker-compose-grafana-1 Created 0.0s Attaching to docker-compose-grafana-1 **********
Снова переходим в UI Graylog, вбиваем в поиск grafana-compose, жмем Enter:
Логи там где им и место, работает.