Logstash - это мощный инструмент для сбора, обработки и отправки логов и событий из различных источников. В этом руководстве мы подробно рассмотрим все настройки, свойства и параметры Logstash, а также приведем примеры его использования.
Что такое Logstash?
Logstash - это инструмент с открытым исходным кодом для обработки событий и логов. Он является частью стека ELK (Elasticsearch, Logstash, Kibana) и позволяет собирать логи из различных источников, преобразовывать их и отправлять в различные хранилища, такие как Elasticsearch.
Установка Logstash
Чтобы установить Logstash, выполните следующие шаги:
- Скачайте Logstash с официального сайта.
- Разархивируйте скачанный файл.
- Перейдите в папку с Logstash и запустите его командой
bin/logstash -f config/logstash.conf.
Основные компоненты конфигурации Logstash
Конфигурационный файл Logstash состоит из трех основных частей: input, filter и output. Рассмотрим их подробнее.
Input (Входные данные)
Блок input определяет, откуда Logstash будет получать данные. Пример настройки для получения логов из файла:
input {
file {
path => "/var/log/syslog"
start_position => "beginning"
}
}
Filter (Фильтрация данных)
Блок filter позволяет преобразовывать и фильтровать данные перед их отправкой. Пример использования фильтра grok для парсинга логов:
filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{WORD:loglevel} %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
Output (Выходные данные)
Блок output определяет, куда Logstash будет отправлять обработанные данные. Пример отправки данных в Elasticsearch:
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
Подробное описание настроек и параметров Logstash
Настройки input
Для блока input доступны различные плагины, каждый из которых имеет свои настройки. Рассмотрим некоторые из них:
- file: Позволяет читать данные из файла.
- path: Путь к файлу или файлам. Можно использовать шаблоны, например,
"/var/log/*.log". - start_position: Определяет, с какой позиции начинать чтение файла. Возможные значения:
beginning,end. - sincedb_path: Путь к файлу sincedb, который хранит информацию о прочитанных позициях файла.
- path: Путь к файлу или файлам. Можно использовать шаблоны, например,
- tcp: Позволяет получать данные через TCP.
- port: Порт для прослушивания входящих данных.
- host: IP-адрес для прослушивания. По умолчанию
0.0.0.0.
- stdin: Позволяет получать данные из стандартного ввода.
Настройки filter
Фильтры позволяют обрабатывать и преобразовывать данные. Наиболее популярные фильтры:
- grok: Позволяет парсить неструктурированные данные.
- match: Определяет шаблоны для сопоставления с полями.
- patterns_dir: Путь к пользовательским шаблонам grok.
- date: Преобразует строки с датами в стандартный формат.
- match: Определяет шаблоны для сопоставления с полями.
- timezone: Устанавливает часовой пояс.
- mutate: Позволяет изменять поля (удаление, добавление, переименование).
- rename: Переименовывает поля.
- remove_field: Удаляет указанные поля.
- add_field: Добавляет новые поля.
Настройки output
Output плагины определяют, куда Logstash будет отправлять данные. Рассмотрим несколько популярных плагинов:
- elasticsearch: Отправляет данные в Elasticsearch.
- hosts: Список хостов Elasticsearch.
- index: Имя индекса. Можно использовать шаблоны.
- document_type: Тип документа (устарело в последних версиях Elasticsearch).
- stdout: Выводит данные в консоль.
- codec: Определяет формат вывода данных. Пример:
rubydebug,json.
- codec: Определяет формат вывода данных. Пример:
- file: Записывает данные в файл.
- path: Путь к файлу для записи данных.
- codec: Определяет формат записи данных.
Примеры использования Logstash
Пример 1: Чтение логов Apache и отправка в Elasticsearch
input {
file {
path => "/var/log/apache2/access.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "apache-logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
Пример 2: Получение данных из TCP и запись в файл
input {
tcp {
port => 5000
}
}
filter {
json {
source => "message"
}
}
output {
file {
path => "/var/log/logstash/tcp_output.log"
codec => json
}
stdout { codec => rubydebug }
}
Заключение
Logstash - это мощный и гибкий инструмент для обработки логов и событий. Благодаря разнообразным настройкам и плагинам, его можно использовать в различных сценариях, начиная от простого чтения логов из файла и заканчивая сложной обработкой данных перед их отправкой в хранилища. Настройка Logstash требует внимательного подхода, но предоставленные примеры помогут вам быстрее освоить основные принципы его работы.
Надеемся, что данное руководство поможет вам эффективно использовать Logstash в ваших проектах.
