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 в ваших проектах.