Перейти к содержанию

Отправка логов в 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