Ответ
Logstash — это серверный компонент с открытым исходным кодом для обработки данных в конвейерном режиме (pipeline). В контексте DevOps и стека ELK/Elastic Stack (Elasticsearch, Logstash, Kibana, Beats) он выступает в роли мощного инструмента для приема, преобразования и обогащения данных (прежде всего логов) перед их отправкой в хранилище.
Архитектура конвейера Logstash состоит из трех этапов:
- Input (Ввод): Получение данных из различных источников. Например:
- Файлы (
file) - Журналы системных событий (
syslog) - Очереди сообщений, такие как Apache Kafka (
kafka) - Метрики от Beats (
beats) - Базы данных (
jdbc)
- Файлы (
- Filter (Фильтрация): Обработка и трансформация данных. Это ключевой этап, где "сырые" логи превращаются в структурированные данные.
- Grok: Парсинг неструктурированного текста (например, логов Nginx/Apache) в поля с помощью регулярных выражений.
- Mutate: Изменение полей (переименование, удаление, замена).
- Date: Парсинг и обработка временных меток.
- GeoIP: Добавление географической информации по IP-адресу.
- 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.