Что такое Logstash?

«Что такое Logstash?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Logstash — это серверный компонент с открытым исходным кодом для обработки данных в конвейерном режиме (pipeline). В контексте DevOps и стека ELK/Elastic Stack (Elasticsearch, Logstash, Kibana, Beats) он выступает в роли мощного инструмента для приема, преобразования и обогащения данных (прежде всего логов) перед их отправкой в хранилище.

Архитектура конвейера Logstash состоит из трех этапов:

  1. Input (Ввод): Получение данных из различных источников. Например:
    • Файлы (file)
    • Журналы системных событий (syslog)
    • Очереди сообщений, такие как Apache Kafka (kafka)
    • Метрики от Beats (beats)
    • Базы данных (jdbc)
  2. Filter (Фильтрация): Обработка и трансформация данных. Это ключевой этап, где "сырые" логи превращаются в структурированные данные.
    • Grok: Парсинг неструктурированного текста (например, логов Nginx/Apache) в поля с помощью регулярных выражений.
    • Mutate: Изменение полей (переименование, удаление, замена).
    • Date: Парсинг и обработка временных меток.
    • GeoIP: Добавление географической информации по IP-адресу.
  3. Output (Вывод): Отправка обработанных данных в одно или несколько хранилищ или систем.
    • Elasticsearch (наиболее распространенный вариант)
    • Мониторинговые системы (Prometheus, через экспортер)
    • Объектные хранилища (Amazon S3)
    • Очереди сообщений или базы данных.

Пример конфигурационного файла Logstash для парсинга логов Nginx:

# logstash-nginx.conf
input {
  beats {
    port => 5044  # Filebeat отправляет логи на этот порт
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
  }
  geoip {
    source => "clientip"
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "nginx-logs-%{+YYYY.MM.dd}"
  }
  # Дублируем вывод в stdout для отладки
  stdout { codec => rubydebug }
}

В DevOps-практике Logstash используется для централизованного логирования, создания единого формата логов из разнородных источников и подготовки данных для эффективного поиска и визуализации в Kibana.