Учебники

Logstash — Внутренняя архитектура

В этой главе мы обсудим внутреннюю архитектуру и различные компоненты Logstash.

Логсташ Сервис Архитектура

Logstash обрабатывает журналы с разных серверов и источников данных и ведет себя как грузоотправитель. Грузоотправители используются для сбора журналов, и они устанавливаются в каждом источнике входных данных. Брокеры, такие как Redis, Kafka или RabbitMQ, являются буферами для хранения данных для индексаторов, может быть более одного брокера в случае сбоя в случаях.

Индексаторы, такие как Lucene , используются для индексации журналов для повышения производительности поиска, а затем выходные данные сохраняются в Elasticsearch или другом выходном месте назначения. Данные в выходном хранилище доступны для Kibana и другого программного обеспечения для визуализации.

Logstash Сервис Архитектура

Внутренняя архитектура Logstash

Конвейер Logstash состоит из трех компонентов: Вход, Фильтры и Выход . Часть ввода отвечает за указание и доступ к источнику входных данных, например, к папке журнала на сервере Apache Tomcat .

Внутренняя архитектура Logstash

Пример объяснения конвейера Logstash

Файл конфигурации Logstash содержит подробную информацию о трех компонентах Logstash. В этом случае мы создаем имя файла с именем Logstash.conf .

Следующая конфигурация собирает данные из входного журнала «inlog.log» и записывает их в выходной журнал «outlog.log» без каких-либо фильтров.

Logstash.conf

Файл конфигурации Logstash просто копирует данные из файла inlog.log с помощью входного плагина и сбрасывает данные журнала в файл outlog.log с помощью выходного плагина.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Запустите Logstash

Logstash использует параметр -f для указания файла конфигурации.

C:\logstash\bin> logstash –f logstash.conf

inlog.log

Следующий блок кода показывает входные данные журнала.

Hello tutorialspoint.com

outlog.log

Выход Logstash содержит входные данные в поле сообщения. Logstash также добавляет другие поля вывода, такие как метка времени, путь к источнику ввода, версия, хост и теги.

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

Как вы можете, вывод Logstash содержит больше, чем данные, предоставленные через входной журнал. Выходные данные содержат исходный путь, метку времени, версию, имя хоста и тег, которые используются для представления дополнительных сообщений, таких как ошибки.

Мы можем использовать фильтры для обработки данных и сделать их полезными для наших нужд. В следующем примере мы используем фильтр для получения данных, который ограничивает вывод только данными с глаголом типа GET или POST, за которым следует уникальный идентификатор ресурса .

Logstash.conf

В этой конфигурации Logstash мы добавляем фильтр с именем grok для фильтрации входных данных. Событие входного журнала, которое совпадает с входным журналом последовательности шаблонов, только с ошибкой попадает в место назначения вывода. Logstash добавляет тег «_grokparsefailure» в выходные события, который не соответствует последовательности шаблонов фильтра grok.

Logstash предлагает множество встроенных шаблонов регулярных выражений для анализа популярных журналов сервера, таких как Apache. Используемый здесь шаблон ожидает глагол типа get, post и т. Д., За которым следует унифицированный идентификатор ресурса.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Запустите Logstash

Мы можем запустить Logstash с помощью следующей команды.

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

Наш входной файл содержит два события, разделенных разделителем по умолчанию, то есть разделитель новой строки. Первое событие соответствует шаблону, указанному в GROk, а второе — нет.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Мы можем видеть, что второе выходное событие содержит тег «_grokparsefailure», поскольку он не соответствует шаблону фильтра grok. Пользователь также может удалить эти несогласованные события в выводе, используя условие «if» в выходном плагине.