Отправка логов в logstash с Docker при помощи Filebeat¶
Пример типовой конфигурации, которая создает контейнер с Filebeat, который получает логи с docker-хоста и отправляет их в Logstash:
docker-compose.yml:
version: "3.8"
services:
filebeat:
# Может быть не доступен в РФ, тогда можно использовать elastic/filebeat:7.15.1
image: docker.elastic.co/beats/filebeat:7.15.1
# Хостнеим попадёт в логи, можно кастомизировать
hostname: "filebeat"
# Устанавливаем юзера root для доступа к логам и сокету
user: root
# Добавляем логи с хоста для просмотра логов и docker-сокет для получения инфы о контейнерах.
volumes:
- ./data:/usr/share/filebeat/data
- ${PWD}/filebeat.yml:/usr/share/filebeat/filebeat.yml
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers/:/var/lib/docker/containers/:ro
command: ["--strict.perms=false"]
Конфиг filebeat.yml:
filebeat.inputs:
- type: log
# указываем, что логи мы будем брать из контейнеров
paths:
- '/var/lib/docker/containers/*/*.log'
fields:
type: docker
fields_under_root: true
# добавляем процессор для обогащения логов лейблами
processors:
- add_docker_metadata:
host: "unix:///var/run/docker.sock"
# указываем logstash на который нужно отправлять логи
output.logstash:
hosts: ["logstash:5044"]
loadbalance: false
ssl.enabled: false