Гайды
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
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
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)
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