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

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

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

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

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

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

Конвейер Logstash состоит из трех компонентов Input, Filters и Output. Входная часть отвечает за определение и доступ к источнику входных данных, например к папке журналаApache Tomcat Server.

Пример объяснения конвейера 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, за которыми следуетUnique Resource Identifier.

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’ условие в плагине вывода.

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}