🪵 Logstash

Конвейер логов: input, filter, output, grok и частые настройки.

Шпаргалки · Инфраструктура · #logstash #elk #pipeline

Структура конвейера

input {
  beats { port => 5044 }
  file  { path => "/var/log/app/*.log" start_position => "beginning" }
}

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:ts} %{LOGLEVEL:level} %{GREEDYDATA:msg}" }
  }
  date  { match => ["ts", "ISO8601"] target => "@timestamp" }
  mutate {
    remove_field => ["ts"]
    add_field => { "env" => "prod" }
  }
  if [level] == "DEBUG" { drop {} }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "app-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

Запуск и проверка

logstash -f pipeline.conf
logstash -f pipeline.conf --config.test_and_exit    # проверка синтаксиса
logstash -f pipeline.conf --config.reload.automatic

Конвейеры в pipelines.yml, настройки в logstash.yml.

Частые плагины

Этап Плагины
input beats, file, kafka, http, jdbc, syslog
filter grok, dissect, json, mutate, date, geoip, useragent, csv
output elasticsearch, kafka, file, stdout

Приёмы

  • dissect быстрее grok, если формат строк фиксированный.
  • Отладка grok: Grok Debugger в Kibana (Dev Tools).
  • Для многострочных логов (stack trace) используйте codec => multiline.
  • Лёгкая альтернатива: Filebeat, Elastic Agent, Fluent Bit, Vector.