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"]
}