Гайды

Logstash и Filebeat для сбора логов

filebeat.yml, processors, pipeline Logstash, Ingest Node, backpressure и согласованность с logrotate.

~9 мин чтения

Logstash и Filebeat для сбора логов

Filebeat — лёгкий агент: читает файлы/контейнерные логи, добавляет метаданные, отправляет в Elasticsearch или Logstash. Logstash — тяжёлая JVM-ETL с фильтрами grok, date, mutate. Общая картина — ELK: Elasticsearch, Logstash и Kibana.


1. Filebeat: минимальный filebeat.yml

yaml
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/app/*.log
    json.keys_under_root: true
    fields:
      env: prod
      service: api

output.elasticsearch:
  hosts: ["https://es:9200"]
  username: "${ES_USER}"
  password: "${ES_PASS}"

processors — drop_fields, add_host_metadata.


2. Logstash pipeline

ruby
input { beats { port => 5044 } }
filter {
  grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
  date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] }
}
output { elasticsearch { hosts => ["https://es:9200"] index => "logs-%{+YYYY.MM.dd}" } }

3. Когда Logstash не нужен

Если достаточно Ingest Node в Elasticsearch или Fleet Integrations — меньше узлов.


4. Backpressure

При падении ES Filebeat тормозит чтение файла (списывает offset); мониторьте harvester и очередь.


5. Logstash: производительность pipeline

pipeline.workers, pipeline.batch.size и delay влияют на задержку vs CPU. Тяжёлый grok на миллионах событий — вынесите в ingest pipeline ES или упростите паттерн. Используйте dead letter queue в Elasticsearch output для poison messages.


6. Filebeat: модули и autodiscover

Modules (nginx, system, mysql) дают готовые поля и dashboards. Autodiscover для Docker/Kubernetes подставляет метаданные контейнера/pod в поля — меньше ручного конфига при динамическом окружении.


7. Контейнеры и stdout

Для Docker без файлов на диске используйте type: container (или input filestream с путём к json-log драйвера) и включайте add_docker_metadata / add_kubernetes_metadata — тогда в каждом событии есть container.id, kubernetes.pod.name, kubernetes.namespace без парсинга имени файла.


8. Дедупликация и дубликаты

При ротации логов (rename + новый файл) Filebeat может отправить хвост дважды. Снижайте дубли на приёме: fingerprint processor (хэш от выбранных полей) + соответствующий ingest pipeline в ES с fingerprint или логическая идемпотентность downstream. Для «ровно один раз» на бизнес-событие лучше писать в очередь с ключом из приложения.


9. Мультiline (stack trace)

yaml
filebeat.inputs:
  - type: log
    paths: ["/var/log/app/*.log"]
    multiline.type: pattern
    multiline.pattern: '^\d{4}-\d{2}-\d{2}'
    multiline.negate: true
    multiline.match: after

Паттерн должен совпадать с началом новой записи; иначе блоки склеятся неправильно и поиск в Kibana станет бесполезен.


10. Чек-лист

  • Ротация логов на диске (logrotate) согласована с Filebeat (copytruncate осторожно).
  • Мультiline для stack traces (pattern, negate, match).
  • TLS и сертификаты для beats → logstash.
  • Права на файлы логов (группа filebeat, ACL) без chmod 777.
  • Версия ECS (Elastic Common Schema) для унификации полей между сервисами.

Дальше: Kibana