Logstash - Краткое руководство

Logstash - это инструмент, основанный на шаблонах фильтров / каналов для сбора, обработки и генерации журналов или событий. Это помогает централизовать и анализировать журналы и события из разных источников в реальном времени.

Logstash написан на языке программирования JRuby, который работает на JVM, поэтому вы можете запускать Logstash на разных платформах. Он собирает различные типы данных, такие как журналы, пакеты, события, транзакции, данные временных меток и т. Д., Практически из любого типа источника. Источником данных могут быть социальные данные, электронная коммерция, новостные статьи, CRM, игровые данные, веб-тренды, финансовые данные, Интернет вещей, мобильные устройства и т. Д.

Общие функции Logstash

Общие особенности Logstash следующие:

  • Logstash может собирать данные из разных источников и отправлять их нескольким адресатам.

  • Logstash может обрабатывать все типы данных журналов, такие как журналы Apache, журналы событий Windows, данные по сетевым протоколам, данные из стандартного ввода и многие другие.

  • Logstash также может обрабатывать HTTP-запросы и данные ответов.

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

  • Logstash также можно использовать для обработки данных датчиков в Интернете вещей.

  • Logstash имеет открытый исходный код и доступен по лицензии Apache версии 2.0.

Ключевые концепции Logstash

Ключевые концепции Logstash следующие:

Объект события

Это главный объект в Logstash, который инкапсулирует поток данных в конвейере Logstash. Logstash использует этот объект для хранения входных данных и добавления дополнительных полей, созданных на этапе фильтрации.

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

Трубопровод

Он состоит из этапов потока данных в Logstash от ввода до вывода. Входные данные вводятся в конвейер и обрабатываются в виде события. Затем отправляет в место назначения вывода в желаемом формате пользователя или конечной системы.

Ввод

Это первый этап конвейера Logstash, который используется для получения данных в Logstash для дальнейшей обработки. Logstash предлагает различные плагины для получения данных с разных платформ. Некоторые из наиболее часто используемых плагинов - File, Syslog, Redis и Beats.

Фильтр

Это средний этап Logstash, на котором происходит фактическая обработка событий. Разработчик может использовать предопределенные шаблоны Regex от Logstash для создания последовательностей для различения полей в событиях и критериев для принятых событий ввода.

Logstash предлагает различные плагины, которые помогают разработчику анализировать и преобразовывать события в желаемую структуру. Некоторые из наиболее часто используемых плагинов фильтров - Grok, Mutate, Drop, Clone и Geoip.

Вывод

Это последний этап конвейера Logstash, на котором выходные события могут быть отформатированы в структуру, требуемую системами назначения. Наконец, он отправляет выходное событие после завершения обработки в пункт назначения с помощью подключаемых модулей. Некоторые из наиболее часто используемых плагинов - Elasticsearch, File, Graphite, Statsd и т. Д.

Преимущества Logstash

Следующие пункты объясняют различные преимущества Logstash.

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

  • Logstash поддерживает множество веб-серверов и источников данных для извлечения данных журналов.

  • Logstash предоставляет несколько плагинов для анализа и преобразования данных журнала в любой желаемый пользователем формат.

  • Logstash централизован, что упрощает обработку и сбор данных с разных серверов.

  • Logstash поддерживает множество баз данных, сетевых протоколов и других служб в качестве целевого источника событий журналирования.

  • Logstash использует протокол HTTP, который позволяет пользователю обновлять версии Elasticsearch без необходимости обновлять Logstash на этапе блокировки.

Недостатки Logstash

Следующие пункты объясняют различные недостатки Logstash.

  • Logstash использует http, что отрицательно сказывается на обработке данных журнала.

  • Работа с Logstash иногда может быть немного сложной, поскольку для этого требуется хорошее понимание и анализ входных данных журнала.

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

В следующей главе мы поймем, что такое стек ELK и как он помогает Logstash.

ELK означает Elasticsearch, Logstash, и Kibana. В стеке ELK Logstash извлекает данные журнала или другие события из разных источников ввода. Он обрабатывает события, а затем сохраняет их в Elasticsearch. Kibana - это веб-интерфейс, который получает доступ к форме данных журнала Elasticsearch и визуализирует ее.

Logstash и Elasticsearch

Logstash предоставляет подключаемый модуль ввода и вывода Elasticsearch для чтения и записи событий журнала в Elasticsearch. Компания Elasticsearch также рекомендует Elasticsearch в качестве места назначения вывода из-за его совместимости с Kibana. Logstash отправляет данные в Elasticsearch по протоколу http.

Elasticsearch предоставляет возможность массовой загрузки, которая помогает загружать данные из разных источников или экземпляров Logstash в централизованный механизм Elasticsearch. ELK имеет следующие преимущества перед другими решениями DevOps:

  • Стеком ELK проще управлять, и его можно масштабировать для обработки петабайт событий.

  • Архитектура стека ELK очень гибкая и обеспечивает интеграцию с Hadoop. Hadoop в основном используется для архивных целей. Logstash можно напрямую подключить к Hadoop с помощью flume, а Elasticsearch предоставляет соединитель с именемes-hadoop для подключения к Hadoop.

  • Общая стоимость владения ELK намного ниже, чем у его альтернатив.

Логсташ и Кибана

Kibana не взаимодействует с Logstash напрямую, а через источник данных, которым является Elasticsearch в стеке ELK. Logstash собирает данные из всех источников, а Elasticsearch очень быстро их анализирует, а затем Kibana предоставляет действенные аналитические данные по этим данным.

Kibana - это веб-инструмент визуализации, который помогает разработчикам и другим пользователям анализировать изменения в большом количестве событий, собираемых Logstash в движке Elasticsearch. Эта визуализация позволяет легко прогнозировать или видеть изменения в тенденциях ошибок или других значимых событиях источника ввода.

Чтобы установить Logstash в систему, мы должны выполнить следующие шаги:

Step 1- Проверьте версию Java, установленную на вашем компьютере; это должна быть Java 8, потому что она несовместима с Java 9. Вы можете проверить это:

В операционной системе (ОС) Windows (с помощью командной строки) -

> java -version

В ОС UNIX (с использованием терминала) -

$ echo $JAVA_HOME

Step 2 - Загрузите Logstash из -

https://www.elastic.co/downloads/logstash.

  • Для ОС Windows загрузите ZIP-файл.

  • Для ОС UNIX загрузите файл TAR.

  • Для ОС Debian загрузите файл DEB.

  • Для Red Hat и других дистрибутивов Linux загрузите файл RPN.

  • Утилиты APT и Yum также можно использовать для установки Logstash во многих дистрибутивах Linux.

Step 3- Процесс установки Logstash очень прост. Посмотрим, как установить Logstash на разные платформы.

Note - Не помещайте в установочную папку пробелы или двоеточия.

  • Windows OS - Разархивируйте zip-пакет, и Logstash будет установлен.

  • UNIX OS - Извлеките tar-файл в любое место, и Logstash будет установлен.

$tar –xvf logstash-5.0.2.tar.gz

Using APT utility for Linux OS −

  • Загрузите и установите открытый ключ подписи -
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  • Сохраните определение репозитория -
$ echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo
   tee -a /etc/apt/sources.list.d/elastic-5.x.list
  • Запускаем обновление -
$ sudo apt-get update
  • Теперь вы можете установить, используя следующую команду -
$ sudo apt-get install logstash

Using YUM utility for Debian Linux OS -

  • Загрузите и установите открытый ключ подписи -
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • Добавьте следующий текст в файл с суффиксом .repo в каталог «/etc/yum.repos.d/». Например,logstash.repo

[logstash-5.x]
name = Elastic repository for 5.x packages
baseurl = https://artifacts.elastic.co/packages/5.x/yum
gpgcheck = 1
gpgkey = https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled = 1
autorefresh = 1
type = rpm-md
  • Теперь вы можете установить Logstash, используя следующую команду -
$ sudo yum install logstash

Step 4- Перейдите в домашний каталог Logstash. Внутри папки bin запуститеelasticsearch.batфайл в случае Windows, или вы можете сделать то же самое с помощью командной строки и через терминал. В UNIX запустите файл Logstash.

Нам нужно указать источник ввода, источник вывода и дополнительные фильтры. Для проверки установки вы можете запустить ее с базовой конфигурацией, используя стандартный поток ввода (stdin) в качестве источника ввода и стандартный поток вывода (stdout) в качестве источника вывода. Вы также можете указать конфигурацию в командной строке, используя–e вариант.

In Windows −

> cd logstash-5.0.1/bin
> Logstash -e 'input { stdin { } } output { stdout {} }'

In Linux −

$ cd logstash-5.0.1/bin
$ ./logstash -e 'input { stdin { } } output { stdout {} }'

Note- в случае Windows вы можете получить сообщение об ошибке JAVA_HOME не установлено. Для этого укажите в переменных среды значение «C: \ Program Files \ Java \ jre1.8.0_111» или место, в которое вы установили java.

Step 5 - Порты по умолчанию для веб-интерфейса Logstash от 9600 до 9700 определены в logstash-5.0.1\config\logstash.yml как http.port и он выберет первый доступный порт в заданном диапазоне.

Мы можем проверить, запущен ли сервер Logstash, просмотрев http://localhost:9600или, если порт отличается, проверьте командную строку или терминал. Мы можем видеть назначенный порт как «Успешно запущенная конечная точка API Logstash {: порт ⇒ 9600}». Он вернет объект JSON, который содержит информацию об установленном Logstash следующим образом:

{
   "host":"manu-PC", 
   "version":"5.0.1",
   "http_address":"127.0.0.1:9600",
   "build_date":"2016-11-11T22:28:04+00:00",
   "build_sha":"2d8d6263dd09417793f2a0c6d5ee702063b5fada",
   "build_snapshot":false
}

В этой главе мы обсудим внутреннюю архитектуру и различные компоненты 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"]
}

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

В основном он отправляет результат в Elasticsearch для хранения. Logstash принимает данные из следующих источников -

  • STDIN
  • Syslog
  • Files
  • TCP/UDP
  • Журналы событий Microsoft Windows
  • Websocket
  • Zeromq
  • Индивидуальные расширения

Сбор журналов с помощью сервера Apache Tomcat 7

В этом примере мы собираем журналы сервера Apache Tomcat 7, установленного в Windows, с помощью плагина ввода файлов и отправляем их в другой журнал.

logstash.conf

Здесь Logstash настроен для доступа к журналу доступа Apache Tomcat 7, установленного локально. Шаблон регулярного выражения используется в настройке пути плагина файла для получения данных из файла журнала. Он содержит «доступ» в своем имени и добавляет тип apache, который помогает отличать события apache от других в централизованном источнике назначения. Наконец, выходные события будут показаны в output.log.

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/*access*"
      type => "apache"
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Запустите Logstash

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

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

Журнал Apache Tomcat

Доступ к серверу Apache Tomcat и его веб-приложениям (http://localhost:8080) для создания журналов. Обновленные данные в журналах считываются Logstash в реальном времени и сохраняются в output.log, как указано в файле конфигурации.

Apache Tomcat создает новый файл журнала доступа в соответствии с датой и записывает в него события доступа. В нашем случае это был localhost_access_log.2016-12-24.txt в папкеlogs каталог Apache Tomcat.

0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:00 +0800] "GET / HTTP/1.1" 200 11418
0:0:0:0:0:0:0:1 - munish [
   25/Dec/2016:18:37:02 +0800] "GET /manager/html HTTP/1.1" 200 17472
0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:08 +0800] "GET /docs/ HTTP/1.1" 200 19373
0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:10 +0800] "GET /docs/introduction.html HTTP/1.1" 200 15399

output.log

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

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt",
   "@timestamp":"2016-12-25T10:37:00.363Z","@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:00 +0800] \"GET /
   HTTP/1.1\" 200 11418\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:10.407Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - munish [25/Dec/2016:18:37:02 +0800] \"GET /
   manager/html HTTP/1.1\" 200 17472\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:10.407Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:08 +0800] \"GET /docs/
   HTTP/1.1\" 200 19373\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:20.436Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:10 +0800] \"GET /docs/
   introduction.html HTTP/1.1\" 200 15399\r","type":"apache","tags":[]
}

Сбор журналов с помощью плагина STDIN

В этом разделе мы обсудим еще один пример сбора журналов с использованием STDIN Plugin.

logstash.conf

Это очень простой пример, когда Logstash считывает события, введенные пользователем в стандартный ввод. В нашем случае это командная строка, в которой события хранятся в файле output.log.

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

Запустите Logstash

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

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

Напишите следующий текст в командной строке -

Пользователь ввел следующие две строки. Logstash разделяет события установкой разделителя, и его значение по умолчанию равно '\ n'. Пользователь может изменить, изменив значение разделителя в файловом плагине.

Tutorialspoint.com welcomes you
Simply easy learning

output.log

В следующем блоке кода показаны данные журнала вывода.

{
   "@timestamp":"2016-12-25T11:41:16.518Z","@version":"1","host":"Dell-PC",
   "message":"tutrialspoint.com welcomes you\r","tags":[]
}
{
   "@timestamp":"2016-12-25T11:41:53.396Z","@version":"1","host":"Dell-PC",
   "message":"simply easy learning\r","tags":[]
}

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

Собирайте журналы из показателей

Системные события и другие временные действия записываются в метриках. Logstash может получать доступ к журналу из системных показателей и обрабатывать их с помощью фильтров. Это помогает показать пользователю прямую трансляцию событий в индивидуальном порядке. Метрики сбрасываются в соответствии сflush_interval settingфильтра метрик и по умолчанию; он установлен на 5 секунд.

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

logstash.conf

Эта конфигурация содержит плагин генератора, который предлагается Logstash для тестовых метрик и устанавливает для параметра типа значение «сгенерировано» для анализа. На этапе фильтрации мы обрабатываем только строки сгенерированного типа с помощью оператора if. Затем плагин метрик считает поле, указанное в настройках счетчика. Плагин метрик сбрасывает счетчик через каждые 5 секунд, указанные вflush_interval.

Наконец, выведите события фильтра на стандартный вывод, например в командную строку, используя команду codec pluginдля форматирования. Плагин Codec использует значение [ events ] [ rate_1m ] для вывода событий в секунду в 1-минутном скользящем окне.

input {
   generator {
     	type => "generated"
   }
}
filter {
   if [type] == "generated" {
      metrics {
         meter => "events"
         add_tag => "metric"
      }
   }
}
output {
   # only emit events with the 'metric' tag
   if "metric" in [tags] {
      stdout {
         codec => line { format => "rate: %{[events][rate_1m]}"
      }
   }
}

Запустите Logstash

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

>logsaths –f logstash.conf

stdout (командная строка)

rate: 1308.4
rate: 1308.4
rate: 1368.654529135342
rate: 1416.4796003951449
rate: 1464.974293984808
rate: 1523.3119444107458
rate: 1564.1602979542715
rate: 1610.6496496890895
rate: 1645.2184750334154
rate: 1688.7768007612485
rate: 1714.652283095914
rate: 1752.5150680019278
rate: 1785.9432934744932
rate: 1806.912181962126
rate: 1836.0070454626025
rate: 1849.5669494173826
rate: 1871.3814756851832
rate: 1883.3443123790712
rate: 1906.4879113216743
rate: 1925.9420717997118
rate: 1934.166137658981
rate: 1954.3176526556897
rate: 1957.0107444542625

Сбор журналов с веб-сервера

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

Мы извлекаем данные из stderr logs локального сервера Apache Tomcat и спрятать его в output.log.

logstash.conf

Этот файл конфигурации Logstash предписывает Logstash прочитать журналы ошибок apache и добавить тег с именем «apache-error». Мы можем просто отправить его в output.log с помощью плагина вывода файлов.

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0 /logs/*stderr*"
      type => "apache-error"  
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Запустите Logstash

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

>Logstash –f Logstash.conf

Образец журнала ввода

Это образец stderr log, который генерируется при возникновении серверных событий в Apache Tomcat.

C: \ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ logs \ tomcat7-stderr.2016-12-25.log

Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-9999"]
Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 25, 2016 7:05:14 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 823 ms

output.log

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start\r",
   "type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"INFO: Starting ProtocolHandler [
      \"ajp-bio-8009\"]\r","type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"Dec 25, 2016 7:05:14 PM org.apache.catalina.startup.Catalina start\r",
   "type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"INFO: Server startup in 823 ms\r","type":"apache-error","tags":[]
}

Сбор журналов из источников данных

Для начала давайте разберемся, как настроить MySQL для ведения журнала. Добавьте следующие строки вmy.ini file сервера базы данных MySQL в [mysqld].

В Windows он присутствует в каталоге установки MySQL, который находится в -

C:\wamp\bin\mysql\mysql5.7.11

В UNIX вы можете найти его в - /etc/mysql/my.cnf

general_log_file   = "C:/wamp/logs/queries.log"
general_log = 1

logstash.conf

В этом конфигурационном файле плагин файла используется для чтения журнала MySQL и записи его в файл ouput.log.

input {
   file {
      path => "C:/wamp/logs/queries.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

query.log

Это журнал, созданный запросами, выполняемыми в базе данных MySQL.

2016-12-25T13:05:36.854619Z   2 Query		select * from test1_users
2016-12-25T13:05:51.822475Z    2 Query	select count(*) from users
2016-12-25T13:05:59.998942Z    2 Query         select count(*) from test1_users

output.log

{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:05:37.905Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:36.854619Z    2 Query\tselect * from test1_users",
   "tags":[]
}
{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:05:51.938Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:51.822475Z    2 Query\tselect count(*) from users",
   "tags":[]
}
{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:06:00.950Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:59.998942Z    2 Query\tselect count(*) from test1_users",
   "tags":[]
}

Logstash получает журналы с помощью подключаемых модулей ввода, а затем использует подключаемые модули фильтров для анализа и преобразования данных. Анализ и преобразование журналов выполняются в соответствии с системами, присутствующими в месте назначения вывода. Logstash анализирует данные журнала и отправляет только необходимые поля. Позже эти поля преобразуются в совместимую и понятную форму целевой системы.

Как разбирать журналы?

Парсинг логов выполняется с помощью GROK (Графическое представление знаний), и вы можете найти их в Github -

https://github.com/elastic/logstash/tree/v1.4.2/patterns.

Logstash сопоставляет данные журналов с указанным шаблоном GROK или последовательностью шаблонов для анализа журналов, например "% {COMBINEDAPACHELOG}", который обычно используется для журналов apache.

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

Синтаксис шаблона GROK:% {SYNTAX: SEMANTIC}. Фильтр Logstash GROK записывается в следующем виде -

%{PATTERN:FieldName}

Здесь PATTERN представляет собой шаблон GROK, а fieldname - это имя поля, которое представляет проанализированные данные в выходных данных.

Например, с помощью онлайн-отладчика GROK https://grokdebug.herokuapp.com/

Ввод

Образец строки ошибки в журнале -

[Wed Dec 07 21:54:54.048805 2016] [:error] [pid 1234:tid 3456829102]
   [client 192.168.1.1:25007] JSP Notice:  Undefined index: abc in
   /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11

Последовательность паттернов GROK

Эта последовательность шаблона GROK соответствует событию журнала, которое состоит из метки времени, за которой следуют уровень журнала, идентификатор процесса, идентификатор транзакции и сообщение об ошибке.

\[(%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[.*:%{LOGLEVEL:loglevel}\]
   \[pid %{NUMBER:pid}:tid %{NUMBER:tid}\] \[client %{IP:clientip}:.*\]
   %{GREEDYDATA:errormsg}

вывод

Вывод в формате JSON.

{
   "day": [
      "Wed"
   ],
   "month": [
      "Dec"
   ],
   "loglevel": [
      "error"
   ],
   "pid": [
      "1234"
   ],
   "tid": [
      "3456829102"
   ],
   "clientip": [
      "192.168.1.1"
   ],
   "errormsg": [
      "JSP Notice:  Undefined index: abc in
      /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11"
   ]
}

Logstash использует фильтры в середине конвейера между вводом и выводом. Фильтры мер Logstash манипулируют и создают такие события, какApache-Access. Многие плагины фильтров используются для управления событиями в Logstash. Здесь на примереLogstash Aggregate Filter, мы фильтруем продолжительность каждой транзакции SQL в базе данных и вычисляем общее время.

Установка подключаемого модуля совокупного фильтра

Установка плагина Aggregate Filter с помощью утилиты Logstash-plugin. Плагин Logstash - это командный файл для Windows вbin folder в Logstash.

>logstash-plugin install logstash-filter-aggregate

logstash.conf

В этой конфигурации вы можете увидеть три оператора if для Initializing, Incrementing, и generating общая продолжительность транзакции, т. е. sql_duration. Плагин агрегата используется для добавления sql_duration, присутствующего в каждом событии входного журнала.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - 
            %{NOTSPACE:taskid} - %{NOTSPACE:logger} - 
            %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"    
   }
}

Запустите Logstash

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

>logstash –f logstash.conf

input.log

В следующем блоке кода показаны данные входного журнала.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

output.log

Как указано в файле конфигурации, последний оператор if, в котором используется регистратор, - TRANSACTION_END, который печатает общее время транзакции или sql_duration. Это было выделено желтым цветом в output.log.

{
   "path":"C:/tpwork/logstash/bin/log/input.log","@timestamp": "2016-12-22T19:04:37.214Z",
   "loglevel":"INFO","logger":"TRANSACTION_START","@version": "1","host":"wcnlab-PC",
   "message":"8566 - TRANSACTION_START - start\r","tags":[]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.366Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.373Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.380Z","loglevel":"INFO","logger":"TRANSACTION_END",
   "@version":"1","host":"wcnlab-PC","label":"end",
   "message":" INFO - 48566 - TRANSACTION_END - end\r","taskid":"48566","tags":[]
}

Logstash предлагает различные плагины для преобразования анализируемого журнала. Эти плагины могутAdd, Delete, и Update поля в журналах для лучшего понимания и запросов в системах вывода.

Мы используем Mutate Plugin для добавления имени поля user в каждую строку журнала ввода.

Установите плагин Mutate Filter

Чтобы установить плагин фильтра изменения; мы можем использовать следующую команду.

>Logstash-plugin install Logstash-filter-mutate

logstash.conf

В этом файле конфигурации подключаемый модуль Mutate добавляется после подключаемого модуля Aggregate для добавления нового поля.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [ "message", "%{LOGLEVEL:loglevel} -
         %{NOTSPACE:taskid} - %{NOTSPACE:logger} -
         %{WORD:label}( - %{INT:duration:int})?" ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ; 
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
   mutate {
      add_field => {"user" => "tutorialspoint.com"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Запустите Logstash

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

>logstash –f logstash.conf

input.log

В следующем блоке кода показаны данные входного журнала.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

output.log

Вы можете видеть, что в выходных событиях появилось новое поле с именем «пользователь».

{
   "path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.383Z",
   "@version":"1",
   "host":"wcnlab-PC",
   "message":"NFO - 48566 - TRANSACTION_START - start\r",
   "user":"tutorialspoint.com","tags":["_grokparsefailure"]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.383Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.399Z","loglevel":"INFO",
   "logger":"SQL","@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.399Z","loglevel":"INFO",
   "logger":"TRANSACTION_END","@version":"1","host":"wcnlab-PC","label":"end",
   "message":" INFO - 48566 - TRANSACTION_END - end\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}

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

Хранение журналов

Logstash может хранить отфильтрованные журналы в File, Elasticsearch Engine, stdout, AWS CloudWatch, и т.д. Сетевые протоколы, такие как TCP, UDP, Websocket также может использоваться в Logstash для передачи событий журнала в удаленные системы хранения.

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

Установка плагина вывода Elasticsearch

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

>logstash-plugin install Logstash-output-elasticsearch

logstash.conf

Этот файл конфигурации содержит плагин Elasticsearch, который хранит событие вывода в Elasticsearch, установленном локально.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [ "message", "%{LOGLEVEL:loglevel} -
      %{NOTSPACE:taskid} - %{NOTSPACE:logger} -  
      %{WORD:label}( - %{INT:duration:int})?" ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
   mutate {
      add_field => {"user" => "tutorialspoint.com"}
   }
}
output {
   elasticsearch {
      hosts => ["127.0.0.1:9200"]
   }
}

Input.log

В следующем блоке кода показаны данные входного журнала.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

Запустите Elasticsearch на Localhost

Чтобы запустить Elasticsearch на локальном хосте, вы должны использовать следующую команду.

C:\elasticsearch\bin> elasticsearch

Когда Elasticsearch будет готов, вы можете проверить его, введя следующий URL-адрес в своем браузере.

http://localhost:9200/

отклик

В следующем блоке кода показан ответ Elasticsearch на локальном хосте.

{
   "name" : "Doctor Dorcas",
   "cluster_name" : "elasticsearch",
   "version" : {
      "number" : "2.1.1",
      "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
      "build_timestamp" : "2015-12-15T13:05:55Z",
      "build_snapshot" : false,
      "lucene_version" : "5.3.1"
   },
   "tagline" : "You Know, for Search"
}

Note - Для получения дополнительной информации об Elasticsearch вы можете щелкнуть следующую ссылку.

https://www.tutorialspoint.com/elasticsearch/index.html

Теперь запустите Logstash с вышеупомянутым Logstash.conf

>Logstash –f Logstash.conf

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

http://localhost:9200/logstash-2017.01.01/_search?pretty

отклик

Это данные в формате JSON, хранящиеся в индексе Logstash-2017.01.01.

{
   "took" : 20,
   "timed_out" : false,
   "_shards" : {
      "total" : 5,
      "successful" : 5,
      "failed" : 0
   },
   "hits" : {
      "total" : 10,
      "max_score" : 1.0,
      "hits" : [ {
         "_index" : "logstash-2017.01.01",
         "_type" : "logs",
         "_id" : "AVlZ9vF8hshdrGm02KOs",
         "_score" : 1.0,
         "_source":{
            "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log", 
            "@timestamp":"2017-01-01T12:17:49.140Z","loglevel":"INFO",
            "logger":"SQL","@version":"1","host":"wcnlab-PC",
            "label":"transaction1",
            "message":" INFO - 48566 - SQL - transaction1 - 200\r",
            "user":"tutorialspoint.com","taskid":"48566","tags":[]
         }
      },
      {
         "_index" : "logstash-2017.01.01",
         "_type" : "logs",
         "_id" : "AVlZ9vF8hshdrGm02KOt",
         "_score" : 1.0,
         "_source":{
            "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
            "@timestamp":"2017-01-01T12:17:49.145Z","loglevel":"INFO",
            "logger":"TRANSACTION_END","@version":"1","host":"wcnlab-PC",
            "label":"end",
            "message":" INFO - 48566 - TRANSACTION_END - end\r",
            "user":"tutorialspoint.com","taskid":"48566","tags":[]
         }
      }
   }
}

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

  • Стандартный выход
  • Вывод в файл
  • Нулевой вывод

Давайте теперь обсудим каждый из них подробно.

Стандартный вывод (stdout)

Он используется для создания отфильтрованных событий журнала в виде потока данных для интерфейса командной строки. Вот пример генерации общей продолжительности транзакции базы данных на стандартный вывод.

logstash.conf

Этот файл конфигурации содержит плагин вывода stdout для записи общего sql_duration в стандартный вывод.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid}
            - %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      stdout {
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Note - Установите агрегатный фильтр, если он еще не установлен.

>logstash-plugin install Logstash-filter-aggregate

Запустите Logstash

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

>logstash –f logsatsh.conf

Input.log

В следующем блоке кода показаны данные входного журнала.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END – end

stdout (это будет командная строка в Windows или терминал в UNIX)

Это общий sql_duration 320 + 200 = 520.

520

Вывод в файл

Logstash также может сохранять события журнала фильтра в выходной файл. Мы будем использовать вышеупомянутый пример и хранить вывод в файле вместо STDOUT.

logstash.conf

Этот файл конфигурации Logstash направляет Logstash для сохранения общего sql_duration в выходной файл журнала.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      file {
         path => "C:/tpwork/logstash/bin/log/output.log"
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Запустите logstash

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

>logstash –f logsatsh.conf

input.log

В следующем блоке кода показаны данные входного журнала.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END – end

output.log

В следующем блоке кода показаны данные журнала вывода.

520

Нулевой вывод

Это специальный плагин вывода, который используется для анализа производительности плагинов ввода и фильтрации.

Logstash предлагает различные плагины для всех трех этапов своего конвейера (ввод, фильтр и вывод). Эти плагины помогают пользователю собирать журналы из различных источников, таких как веб-серверы, базы данных, сетевые протоколы и т. Д.

После захвата Logstash может анализировать и преобразовывать данные в значимую информацию в соответствии с требованиями пользователя. Наконец, Logstash может отправлять или хранить эту значимую информацию в различные источники назначения, такие как Elasticsearch, AWS Cloudwatch и т. Д.

Плагины ввода

Плагины ввода в Logstash помогают пользователю извлекать и получать журналы из различных источников. Синтаксис использования плагина ввода следующий:

Input {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Вы можете загрузить плагин ввода, используя следующую команду -

>Logstash-plugin install Logstash-input-<plugin name>

Утилита Logstash-plugin присутствует в bin folderкаталога установки Logstash. В следующей таблице приведен список подключаемых модулей ввода, предлагаемых Logstash.

Sr.No. Название и описание плагина
1

beats

Чтобы получить данные журнала или события из структуры эластичных ударов.

2

cloudwatch

Для извлечения событий из CloudWatch, API, предлагаемого Amazon Web Services.

3

couchdb_changes

События из _chages URI couchdb, отправленные с использованием этого плагина.

4

drupal_dblog

Чтобы извлечь данные журналов сторожевого таймера drupal с включенным DBLog.

5

Elasticsearch

Для получения результатов запросов, выполненных в кластере Elasticsearch.

6

eventlog

Чтобы получить события из журнала событий Windows.

7

exec

Чтобы получить вывод команды оболочки в качестве ввода в Logstash.

8

file

Чтобы получить события из входного файла. Это полезно, когда Logstash установлен локально с источником ввода и имеет доступ к журналам источника ввода.

9

generator

Он используется для целей тестирования, которое создает случайные события.

10

github

Захватывает события из веб-перехватчика GitHub.

11

graphite

Получить данные метрик от инструмента мониторинга графита.

12

heartbeat

Он также используется для тестирования и генерирует сердцебиение, как события.

13

http

Для сбора журналов событий по двум сетевым протоколам - http и https.

14

http_poller

Он используется для декодирования вывода HTTP API для события.

15

jdbc

Он преобразует транзакции JDBC в событие в Logstash.

16

jmx

Для извлечения метрик из удаленных Java-приложений с помощью JMX.

17

log4j

Захват событий из объекта socketAppender Log4j через сокет TCP.

18

rss

Для вывода инструментов командной строки в качестве входного события в Logstash.

19

tcp

Захватывает события через TCP-сокет.

20

twitter

Собирайте события из API потоковой передачи Twitter.

21 год

unix

Собирать события через сокет UNIX.

22

websocket

Захват событий по протоколу websocket.

23

xmpp

Читает события по протоколам Jabber / xmpp.

Настройки плагина

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

файл

Этот модуль ввода используется для извлечения событий непосредственно из файлов журнала или текстовых файлов, имеющихся в источнике ввода. Он работает аналогично команде tail в UNIX и сохраняет последний курсор чтения и считывает только новые добавленные данные из входного файла, но его можно изменить с помощью параметра star_position. Ниже приведены настройки этого плагина ввода.

Название настройки Значение по умолчанию Описание
add_field {} Добавьте новое поле к событию ввода.
close_older 3600 Файлы, у которых время последнего чтения (в секундах) больше указанного в этом плагине, закрываются.
кодек «Равнина» Он используется для декодирования данных перед вводом в конвейер Logstash.
разделитель «\ N» Он используется для указания нового разделителя строк.
discover_interval 15 Это временной интервал (в секундах) между обнаружением новых файлов по указанному пути.
enable_metric правда Он используется для включения или отключения отчетности и сбора показателей для указанного плагина.
исключить Он используется для указания имени файла или шаблонов, которые следует исключить из модуля ввода.
Я бы Чтобы указать уникальный идентификатор для этого экземпляра плагина.
max_open_files Он определяет максимальное количество входных файлов Logstash в любое время.
путь Укажите путь к файлам, и он может содержать шаблоны для имени файла.
start_position "конец" Вы можете перейти на «начало», если хотите; изначально Logstash должен начать читать файлы с самого начала, а не только с нового события журнала.
start_interval 1 Он указывает временной интервал в секундах, по истечении которого Logstash проверяет наличие измененных файлов.
теги Чтобы добавить любую дополнительную информацию, такую ​​как Logstash, он добавляет «_grokparsefailure» в теги, когда какое-либо событие журнала не соответствует указанному фильтру Grok.
тип Это специальное поле, которое вы можете добавить к событию ввода, и оно полезно в фильтрах и кибане.

Elasticsearch

Этот конкретный плагин используется для чтения результатов поисковых запросов в кластере Elasticsearch. Ниже приведены настройки, используемые в этом плагине:

Название настройки Значение по умолчанию Описание
add_field {} Как и в файловом плагине, он используется для добавления поля в событие ввода.
ca_file Он используется для указания пути к файлу центра сертификации SSL.
кодек «Равнина» Он используется для декодирования входных событий из Elasticsearch перед входом в конвейер Logstash.
docinfo "ложный" Вы можете изменить его на true, если хотите извлечь дополнительную информацию, такую ​​как индекс, тип и идентификатор, из движка Elasticsearch.
docinfo_fields ["_index", "_type", "_id"] Вы можете удалить любое поле, которое не хотите вводить в Logstash.
enable_metric правда Он используется для включения или отключения отчетов и сбора показателей для этого экземпляра плагина.
хозяева Он используется для указания адресов всех механизмов elasticsearch, которые будут входным источником этого экземпляра Logstash. Синтаксис: хост: порт или IP: порт.
Я бы Он используется для присвоения уникального идентификационного номера этому конкретному экземпляру подключаемого модуля ввода.
индекс "logstash- *" Он используется для указания имени индекса или шаблона, которые Logstash будет отслеживать для ввода Logstash.
пароль Для аутентификации.
запрос "{\" sort \ ": [\" _ doc \ "]}" Запрос на исполнение.
ssl ложный Включение или отключение уровня защищенных сокетов.
теги Чтобы добавить любую дополнительную информацию во входные события.
тип Он используется для классификации форм ввода, чтобы было легко найти все входные события на более поздних этапах.
пользователь Для подлинных целей.

Журнал событий

Этот входной плагин считывает данные из Win32 API серверов Windows. Ниже приведены настройки этого плагина -

Название настройки Значение по умолчанию Описание
add_field {} Как и в файловом плагине, он используется для добавления поля в событие ввода.
кодек «Равнина» Он используется для декодирования событий ввода из окон; перед входом в конвейер Logstash
лог-файл [«Приложение», «Безопасность», «Система»] События, необходимые во входном файле журнала
интервал 1000 Он измеряется в миллисекундах и определяет интервал между двумя последовательными проверками новых журналов событий.
теги Чтобы добавить дополнительную информацию во входные события
тип Он используется для классификации входной формы определенных плагинов по заданному типу, чтобы было легко найти все входные события на более поздних этапах.

Twitter

Этот плагин ввода используется для сбора ленты твиттера из его Streaming API. В следующей таблице описаны настройки этого плагина.

Название настройки Значение по умолчанию Описание
add_field {} Как и в файловом плагине, он используется для добавления поля в событие ввода.
кодек «Равнина» Он используется для декодирования событий ввода из окон; перед входом в конвейер Logstash
consumer_key Он содержит потребительский ключ приложения twitter. Для получения дополнительной информации посетитеhttps://dev.twitter.com/apps/new
consumer_secret Он содержит секретный ключ потребителя приложения twitter. Для получения дополнительной информации посетитеhttps://dev.twitter.com/apps/new
enable_metric правда Он используется для включения или отключения отчетности и сбора показателей для этого экземпляра плагина.
следует

Он определяет идентификаторы пользователей, разделенные запятыми, и LogStash проверяет статус этих пользователей в Twitter.

Для получения дополнительной информации посетите

https://dev.twitter.com

full_tweet ложный Вы можете изменить его на true, если хотите, чтобы Logstash читал полный объект, возвращаемый из twitter API.
Я бы Он используется для присвоения уникального идентификационного номера этому конкретному экземпляру входного плагина.
ignore_retweets Ложь Вы можете изменить значение true, чтобы игнорировать ретвиты во входной ленте Twitter.
ключевые слова Это массив ключевых слов, которые нужно отслеживать во входной ленте твиттеров.
язык Он определяет язык твитов, необходимых для LogStash из входной ленты Twitter. Это массив идентификаторов, который определяет конкретный язык в твиттере.
локации Чтобы отфильтровать твиты из входной ленты в соответствии с указанным местоположением. Это массив, который содержит долготу и широту местоположения.
oauth_token Это обязательное поле, которое содержит токен oauth пользователя. Для получения дополнительной информации перейдите по следующей ссылкеhttps://dev.twitter.com/apps
oauth_token_secret Это обязательное поле, которое содержит секретный токен пользователя oauth. Для получения дополнительной информации перейдите по следующей ссылкеhttps://dev.twitter.com/apps
теги Чтобы добавить дополнительную информацию во входные события
тип Он используется для классификации входной формы определенных плагинов по заданному типу, чтобы было легко найти все входные события на более поздних этапах.

TCP

TCP используется для получения событий через сокет TCP; он может читать из пользовательских подключений или сервера, который указан в настройке режима. В следующей таблице описаны настройки этого плагина -

Название настройки Значение по умолчанию Описание
add_field {} Как и в файловом плагине, он используется для добавления поля в событие ввода.
кодек «Равнина» Он используется для декодирования событий ввода из окон; перед входом в конвейер Logstash
enable_metric правда Он используется для включения или отключения отчетности и сбора показателей для этого экземпляра плагина.
хозяин «0.0.0.0» Адрес серверной ОС, от которой зависит клиент
Я бы Он содержит потребительский ключ приложения twitter
Режим «Сервер» Он используется для указания источника ввода - сервера или клиента.
порт Он определяет номер порта
ssl_cert Используется для указания пути к сертификату SSL.
ssl_enable ложный Включить или отключить SSL
ssl_key Чтобы указать путь к файлу ключей SSL
теги Чтобы добавить дополнительную информацию во входные события
тип Он используется для классификации входной формы определенных плагинов по заданному типу, чтобы было легко найти все входные события на более поздних этапах.

Logstash - плагины вывода

Logstash поддерживает различные источники вывода и различные технологии, такие как база данных, файл, электронная почта, стандартный вывод и т. Д.

Синтаксис для использования плагина вывода следующий:

output {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Вы можете загрузить плагин вывода, используя следующую команду -

>logstash-plugin install logstash-output-<plugin name>

В Logstash-plugin utilityнаходится в папке bin каталога установки Logstash. В следующей таблице описаны плагины вывода, предлагаемые Logstash.

Sr.No. Название и описание плагина
1

CloudWatch

Этот плагин используется для отправки агрегированных метрических данных в CloudWatch веб-сервисов Amazon.

2

csv

Он используется для записи выходных событий через запятую.

3

Elasticsearch

Он используется для хранения выходных журналов в индексе Elasticsearch.

4

email

Он используется для отправки уведомления по электронной почте при создании вывода. Пользователь может добавить информацию о выходе по электронной почте.

5

exec

Он используется для запуска команды, соответствующей событию вывода.

6

ganglia

Это искажает метрики до Гангилы.

7

gelf

Он используется для вывода для Graylog2 в формате GELF.

8

google_bigquery

Он выводит события в Google BigQuery.

9

google_cloud_storage

Он сохраняет выходные события в Google Cloud Storage.

10

graphite

Он используется для сохранения выходных событий в Graphite.

11

graphtastic

Он используется для записи показателей вывода в Windows.

12

hipchat

Он используется для хранения событий журнала вывода в HipChat.

13

http

Он используется для отправки событий журнала вывода на конечные точки http или https.

14

influxdb

Он используется для хранения выходного события в InfluxDB.

15

irc

Он используется для записи выходных событий в irc.

16

mongodb

Он хранит выходные данные в MongoDB.

17

nagios

Он используется для уведомления Nagios о результатах пассивной проверки.

18

nagios_nsca

Он используется для уведомления Nagios о результатах пассивной проверки по протоколу NSCA.

19

opentsdb

Он сохраняет выходные события Logstash в OpenTSDB.

20

pipe

Он передает выходные события на стандартный ввод другой программы.

21 год

rackspace

Он используется для отправки событий журнала вывода в службу очередей Rackspace Cloud.

22

redis

Он использует команду rpush для отправки выходных данных журнала в очередь Redis.

23

riak

Он используется для хранения выходных событий в распределенной паре ключ / значение Riak.

24

s3

Он хранит выходные данные журнала в Amazon Simple Storage Service.

25

sns

Он используется для отправки выходных событий в службу простых уведомлений Amazon.

26

solr_http

Он индексирует и сохраняет выходные данные журнала в Solr.

27

sps

Он используется для отправки событий в службу Simple Queue Service AWS.

28

statsd

Он используется для отправки данных метрик сетевому демону statsd.

29

stdout

Он используется для отображения выходных событий в стандартном выводе CLI, таком как командная строка.

30

syslog

Он используется для отправки выходных событий на сервер системного журнала.

31 год

tcp

Он используется для отправки выходных событий в сокет TCP.

32

udp

Он используется для отправки событий вывода через UDP.

33

websocket

Он используется для отправки событий вывода по протоколу WebSocket.

34

xmpp

Он используется для передачи событий вывода по протоколу XMPP.

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

Elasticsearch

Плагин вывода Elasticsearch позволяет Logstash сохранять вывод в определенных кластерах движка Elasticsearch. Это один из известных вариантов выбора пользователей, поскольку он входит в пакет ELK Stack и, следовательно, предоставляет комплексные решения для Devops. В следующей таблице описаны настройки этого модуля вывода.

Название настройки Значение по умолчанию Описание
действие индекс Он используется для определения действия, выполняемого в движке Elasticsearch. Другие значения для этих настроек: удаление, создание, обновление и т. Д.
cacert Он содержит путь к файлу с расширением .cer или .pem для проверки сертификата сервера.
кодек «Равнина» Он используется для кодирования выходных данных регистрации перед их отправкой в ​​целевой источник.
doc_as_upset ложный Этот параметр используется в случае действия обновления. Он создает документ в движке Elasticsearch, если идентификатор документа не указан в выходном плагине.
тип документа Он используется для хранения событий одного типа в одном типе документа. Если он не указан, то используется тип события.
flush_size 500 Это используется для повышения производительности массовой загрузки в Elasticsearch.
хозяева [«127.0.0.1»] Это массив адресов назначения для выходных данных регистрации.
idle_flush_time 1 Он определяет предел времени (в секундах) между двумя сбросами, Logstash принудительно запускает сброс по истечении указанного в этой настройке ограничения времени.
индекс "logstash -% {+ YYYY.MM.dd}" Используется для указания индекса движка Elasticsearch.
manage_temlpate правда Он используется для применения шаблона по умолчанию в Elasticsearch.
родитель ноль Он используется для указания идентификатора родительского документа в Elasticsearch.
пароль Он используется для аутентификации запроса в защищенном кластере в Elasticsearch.
путь Он используется для указания HTTP-пути Elasticsearch.
трубопровод ноль Он используется для установки конвейера загрузки, который пользователь хочет выполнить для события.
доверенное лицо Используется для указания HTTP-прокси.
retry_initial_interval 2 Он используется для установки начального временного интервала (в секундах) между массовыми повторными попытками. Он удваивается после каждой попытки, пока не достигнет retry_max_interval
retry_max_interval 64 Используется для установки максимального интервала времени для retry_initial_interval
retry_on_conflict 1 Это количество попыток Elasticsearch обновить документ.
ssl Включение или отключение SSL / TLS с защитой Elasticsearch
шаблон Он содержит путь к настроенному шаблону в Elasticsearch.
Имя Шаблона "logstash" Это используется для имени шаблона в Elasticsearch.
тайм-аут 60 Это таймаут для сетевых запросов к Elasticsearch.
опровергать «» Он обновляет документ или, если document_id не существует, создает новый документ в Elasticsearch.
пользователь Он содержит пользователя для аутентификации запроса Logstash в безопасном кластере Elasticsearch.

Эл. адрес

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

Название настройки Значение по умолчанию Описание
адрес "Localhost" Это адрес почтового сервера
вложения [] Он содержит имена и расположение прикрепленных файлов
тело «» Он содержит тело письма и должен быть простым текстом.
cc Он содержит адреса электронной почты через запятую для копии электронной почты.
кодек «Равнина» Он используется для кодирования выходных данных регистрации перед их отправкой в ​​целевой источник.
Тип содержимого "text / html; charset = UTF-8" Используется для типа содержимого электронного письма.
отлаживать ложный Он используется для выполнения почтового ретранслятора в режиме отладки
домен "localhost" Он используется для установки домена для отправки сообщений электронной почты
из "[email protected]" Используется для указания адреса электронной почты отправителя
htmlbody «» Он используется для указания тела письма в формате html.
пароль Он используется для аутентификации на почтовом сервере.
порт 25 Он используется для определения порта для связи с почтовым сервером.
ответить на Он используется для указания идентификатора электронной почты для поля ответа электронной почты.
тема «» Он содержит тему письма
use_tls ложный Включение или отключение TSL для связи с почтовым сервером
имя пользователя Содержит имя пользователя для аутентификации на сервере
через «Smtp» Он определяет методы отправки электронной почты Logstash.

HTTP

Этот параметр используется для отправки выходных событий по http в пункт назначения. Этот плагин имеет следующие настройки -

Название настройки Значение по умолчанию Описание
automatic_retries 1 Он используется для установки количества повторных попыток HTTP-запроса с помощью logstash
cacert Он содержит путь к файлу для проверки сертификата сервера.
кодек «Равнина» Он используется для кодирования выходных данных регистрации перед их отправкой в ​​целевой источник.
Тип содержимого Я указываю тип содержимого http-запроса к целевому серверу
печенье правда Он используется для включения или отключения файлов cookie.
формат "json" Используется для установки формата тела HTTP-запроса
заголовки Он содержит информацию заголовка http
http_method «» Он используется для указания метода http, используемого в запросе с помощью logstash, и значения могут быть «put», «post», «patch», «delete», «get», «head».
request_timeout 60 Он используется для аутентификации на почтовом сервере.
url Это обязательный параметр для этого плагина, чтобы указать конечную точку http или https.

стандартный вывод

Плагин вывода stdout используется для записи событий вывода на стандартный вывод интерфейса командной строки. Это командная строка в Windows и терминал в UNIX. Этот плагин имеет следующие настройки -

Название настройки Значение по умолчанию Описание
кодек «Равнина» Он используется для кодирования выходных данных регистрации перед их отправкой в ​​целевой источник.
рабочие 1 Он используется для указания количества рабочих для вывода

statsd

Это сетевой демон, используемый для отправки данных матриц по UDP в серверные службы назначения. Это командная строка в Windows и терминал в UNIX. Этот плагин имеет следующие настройки -

Название настройки Значение по умолчанию Описание
кодек «Равнина» Он используется для кодирования выходных данных регистрации перед их отправкой в ​​целевой источник.
считать {} Он используется для определения количества, которое будет использоваться в показателях
декремент [] Он используется для указания имен метрик декремента
хозяин "Localhost" Он содержит адрес сервера статистики.
приращение [] Он используется для указания имен метрик приращения
порт 8125 Он содержит порт сервера статистики
частота дискретизации 1 Используется для указания частоты дискретизации метрики
отправитель «% {Host}» В нем указывается имя отправителя
набор {} Используется для указания установленной метрики
время {} Он используется для указания метрики времени
рабочие 1 Он используется для указания количества рабочих для вывода

Плагины фильтров

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

Синтаксис использования плагина фильтра следующий:

filter {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Вы можете скачать плагин фильтра, используя следующую команду -

>logstash-plugin install logstash-filter-<plugin name>

Утилита Logstash-plugin находится в папке bin каталога установки Logstash. В следующей таблице описаны плагины вывода, предлагаемые Logstash.

Sr.No. Название и описание плагина
1

aggregate

Этот плагин собирает или объединяет данные из различных событий одного типа и обрабатывает их в конечном событии.

2

alter

Это позволяет пользователю изменять поле событий журнала, которые не обрабатываются фильтром изменения.

3

anonymize

Используется для замены значений полей согласованным хешем

4

cipher

Он используется для шифрования выходных событий перед их сохранением в целевом источнике.

5

clone

Он используется для создания дубликатов выходных событий в Logstash.

6

collate

Он объединяет события из разных журналов по их времени или количеству

7

csv

Этот плагин анализирует данные из входных журналов в соответствии с разделителем

8

date

Он анализирует даты из полей в событии и устанавливает их в качестве метки времени для события.

9

dissect

Этот плагин помогает пользователю извлекать поля из неструктурированных данных и позволяет фильтру Grok правильно их анализировать.

10

drop

Он используется для удаления всех событий одного типа или любого другого подобия

11

elapsed

Он используется для вычисления времени между начальным и конечным событиями.

12

Elasticsearch

Он используется для копирования полей предыдущих событий журнала, присутствующих в Elasticsearch, в текущее в Logstash.

13

extractnumbers

Он используется для извлечения числа из строк в журнале событий.

14

geoip

Он добавляет поле в событие, которое содержит широту и долготу местоположения IP-адреса, присутствующего в событии журнала.

15

grok

Это часто используемый плагин фильтра для анализа события и получения полей

16

i18n

Он удаляет специальные символы из файла журнала событий.

17

json

Он используется для создания структурированного объекта Json в событии или в определенном поле события.

18

kv

Этот плагин полезен при сопоставлении пар ключ-значение в данных журнала.

19

metrics

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

20

multiline

Это также один из часто используемых плагинов фильтрации, который помогает пользователю в случае преобразования многострочных данных журнала в одно событие.

21 год

mutate

Этот плагин используется для переименования, удаления, замены и изменения полей в ваших событиях.

22

range

Он используется для проверки числовых значений полей в событиях относительно ожидаемого диапазона и длины строки в пределах диапазона.

23

ruby

Используется для запуска произвольного кода Ruby

24

sleep

Это заставляет Logstash засыпать определенное время.

25

split

Он используется для разделения поля события и помещения всех разделенных значений в клоны этого события.

26

xml

Он используется для создания события путем сопоставления данных XML, присутствующих в журналах.

Плагины кодеков

Плагины кодеков могут быть частью плагинов ввода или вывода. Эти плагины используются для изменения или форматирования представления данных журнала. Logstash предлагает несколько плагинов кодеков, и они следующие:

Sr.No. Название и описание плагина
1

avro

Этот плагин кодирует сериализацию событий Logstash в данные avro или декодирует записи avro в события Logstash.

2

cloudfront

Этот плагин считывает закодированные данные из облака AWS.

3

cloudtrail

Этот плагин используется для чтения данных из AWS cloudtrail.

4

collectd

Это считывает данные из двоичного протокола, называемого собранным по UDP.

5

compress_spooler

Он используется для сжатия событий журнала в Logstash в буферные пакеты.

6

dots

Это используется для отслеживания производительности путем установки точки для каждого события на стандартный вывод.

7

es_bulk

Это используется для преобразования массовых данных из Elasticsearch в события Logstash, включая метаданные Elasticsearch.

8

graphite

Этот кодек считывает данные из графита в события и преобразует событие в записи в графитовом формате.

9

gzip_lines

Этот плагин используется для обработки данных в формате gzip.

10

json

Это используется для преобразования одного элемента в массиве Json в одно событие Logstash.

11

json_lines

Он используется для обработки данных Json с разделителем новой строки

12

line

Этот плагин будет читать и записывать событие в одном режиме реального времени, это означает, что после разделителя новой строки будет новое событие.

13

multiline

Он используется для преобразования данных многострочного журнала в одно событие

14

netflow

Этот плагин используется для преобразования данных nertflow v5 / v9 в события logstash.

15

nmap

Он анализирует данные результатов nmap в формате XML.

16

plain

Читает текст без разделителей

17

rubydebug

Этот плагин будет записывать выходные события Logstash с использованием библиотеки печати Ruby awesome.

Создайте свой собственный плагин

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

Создание базовой структуры

Пользователь может сгенерировать необходимые файлы, используя опцию генерации утилиты logstash-plugin, или она также доступна на GitHub.

>logstash-plugin generate --type filter --name myfilter --path c:/tpwork/logstash/lib

Вот, typeОпция используется для указания того, что плагин является входом, выходом или фильтром. В этом примере мы создаем плагин фильтра с именемmyfilter. Параметр path используется для указания пути, по которому вы хотите создать каталог вашего плагина. После выполнения вышеупомянутой команды вы увидите, что структура каталогов создана.

Разработайте плагин

Вы можете найти файл кода плагина в \lib\logstash\filtersпапка в каталоге плагина. Расширение файла будет.rb.

В нашем случае файл кода находился по следующему пути -

C:\tpwork\logstash\lib\logstash-filter-myfilter\lib\logstash\filters\myfilter.rb

Мы меняем сообщение на - default ⇒ «Привет, вы изучаете это на tutorialspoint.com» и сохраняем файл.

Установите плагин

Чтобы установить этот плагин, необходимо изменить Gemfile Logstash. Вы можете найти этот файл в каталоге установки Logstash. В нашем случае это будет вC:\tpwork\logstash. Отредактируйте этот файл с помощью любого текстового редактора и добавьте в него следующий текст.

gem "logstash-filter-myfilter",:path => "C:/tpwork/logstash/lib/logstash-filter-myfilter"

В приведенной выше команде мы указываем имя плагина и место, где его можно найти для установки. Затем запустите утилиту Logstash-plugin, чтобы установить этот плагин.

>logstash-plugin install --no-verify

Тестирование

Здесь мы добавляем myfilter в одном из предыдущих примеров -

logstash.conf

Этот файл конфигурации Logstash содержит myfilter в разделе фильтров после плагина фильтра grok.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   } 
}
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" ]
   }
   myfilter{}
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output1.log"
      codec => rubydebug
   }
}

Run logstash

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

>logstash –f logsatsh.conf

input.log

В следующем блоке кода показаны данные входного журнала.

INFO - 48566 - TRANSACTION_START - start

output.log

В следующем блоке кода показаны данные журнала вывода.

{
   "path" => "C:/tpwork/logstash/bin/log/input.log",
   "@timestamp" => 2017-01-07T06:25:25.484Z,
   "loglevel" => "INFO",
   "logger" => "TRANSACTION_END",
   "@version" => "1",
   "host" => "Dell-PC",
   "label" => "end",
   "message" => "Hi, You are learning this on tutorialspoint.com",
   "taskid" => "48566",
   "tags" => []
}

Опубликуйте на Logstash

Разработчик также может опубликовать свой собственный плагин в Logstash, загрузив его на github и выполнив стандартные шаги, определенные компанией Elasticsearch.

Пожалуйста, обратитесь по следующему URL-адресу для получения дополнительной информации о публикации -

https://www.elastic.co/guide/en/logstash/current/contributing-to-logstash.html

Logstash предлагает API для мониторинга его производительности. Эти API-интерфейсы мониторинга извлекают метрики времени выполнения о Logstash.

Node Info API

Этот API используется для получения информации об узлах Logstash. Он возвращает информацию об ОС, конвейере Logstash и JVM в формате JSON.

Вы можете извлечь информацию, отправив get запрос в Logstash, используя следующий URL -

GET http://localhost:9600/_node?pretty

отклик

Ниже будет ответ API информации об узле.

{
   "host" : "Dell-PC",
   "version" : "5.0.1",
   "http_address" : "127.0.0.1:9600",
   
   "pipeline" : {
      "workers" : 4,
      "batch_size" : 125,
      "batch_delay" : 5,
      "config_reload_automatic" : false,
      "config_reload_interval" : 3
   },
   "os" : {
      "name" : "Windows 7",
      "arch" : "x86",
      "version" : "6.1",
      "available_processors" : 4
   },
   "jvm" : {
      "pid" : 312,
      "version" : "1.8.0_111",
      "vm_name" : "Java HotSpot(TM) Client VM",
      "vm_version" : "1.8.0_111",
      "vm_vendor" : "Oracle Corporation",
      "start_time_in_millis" : 1483770315412,
      
      "mem" : {
         "heap_init_in_bytes" : 16777216,
         "heap_max_in_bytes" : 1046937600,
         "non_heap_init_in_bytes" : 163840,
         "non_heap_max_in_bytes" : 0
      },
      "gc_collectors" : [ "ParNew", "ConcurrentMarkSweep" ]
   }
}

Вы также можете получить конкретную информацию о конвейере, ОС и JVM, просто добавив их имена в URL-адрес.

GET http://localhost:9600/_node/os?pretty
GET http://localhost:9600/_node/pipeline?pretty
GET http://localhost:9600/_node/jvm?pretty

API информации о плагинах

Этот API используется для получения информации об установленных плагинах в Logstash. Вы можете получить эту информацию, отправив запрос на получение по URL-адресу, указанному ниже -

GET http://localhost:9600/_node/plugins?pretty

отклик

Ниже будет ответ API информации о подключаемых модулях.

{
   "host" : "Dell-PC",
   "version" : "5.0.1",
   "http_address" : "127.0.0.1:9600",
   "total" : 95,
   "plugins" : [ {
      "name" : "logstash-codec-collectd",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-dots",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-edn",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-edn_lines",
      "version" : "3.0.2"
   },
   ............
}

API статистики узла

Этот API используется для извлечения статистики Logstash (память, процесс, JVM, конвейер) в объектах JSON. Вы можете получить эту информацию, отправив запрос на получение по URL-адресам, указанным ниже -

GET http://localhost:9600/_node/stats/?pretty
GET http://localhost:9600/_node/stats/process?pretty
GET http://localhost:9600/_node/stats/jvm?pretty
GET http://localhost:9600/_node/stats/pipeline?pretty

API горячих потоков

Этот API получает информацию о горячих потоках в Logstash. Горячие потоки - это потоки Java, которые имеют высокую загрузку ЦП и работают дольше обычного времени выполнения. Вы можете получить эту информацию, отправив запрос на получение по URL-адресу, указанному ниже -

GET http://localhost:9600/_node/hot_threads?pretty

Пользователь может использовать следующий URL-адрес, чтобы получить ответ в более удобной для чтения форме.

GET http://localhost:9600/_node/hot_threads?human = true

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

Мониторинг

Logstash - очень хороший инструмент для мониторинга серверов и сервисов в производственных средах. Приложения в производственной среде создают различные типы данных журнала, такие как журналы доступа, журналы ошибок и т. Д. Logstash может подсчитывать или анализировать количество ошибок, доступов или других событий с помощью подключаемых модулей фильтрации. Этот анализ и подсчет можно использовать для мониторинга различных серверов и их служб.

Logstash предлагает такие плагины, как HTTP Pollerдля наблюдения за статусом сайта. Здесь мы отслеживаем веб-сайт с именемmysite размещен на локальном сервере Apache Tomcat.

logstash.conf

В этом конфигурационном файле плагин http_poller используется для перехода на сайт, указанный в плагине, через интервал времени, указанный в настройке интервала. Наконец, он выводит статус сайта на стандартный вывод.

input {
   http_poller {
      urls => {
         site => "http://localhost:8080/mysite"
      }
      request_timeout => 20
      interval => 30
      metadata_target => "http_poller_metadata"
   }
}
output {
   if [http_poller_metadata][code] == 200 {
      stdout {
         codec => line{format => "%{http_poller_metadata[response_message]}"}
      }
   }
   if [http_poller_metadata][code] != 200 {
      stdout {
         codec => line{format => "down"}
      }
   }
}

Запустите logstash

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

>logstash –f logstash.conf

стандартный вывод

Если сайт работает, то вывод будет -

Ok

Если мы остановим сайт с помощью Manager App Tomcat, вывод изменится на -

down

Безопасность

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

Безопасность с протоколом HTTP

В различных плагинах, предлагаемых Logstash, например, в плагине Elasticsearch, есть настройки, такие как пользователь и пароль для аутентификации.

elasticsearch {
   user => <username>
   password => <password>
}

Другая аутентификация PKI (public key infrastructure)для Elasticsearch. Разработчик должен определить две настройки в плагине вывода Elasticsearch, чтобы включить аутентификацию PKI.

elasticsearch {
   keystore => <string_value>
   keystore_password => <password>
}

В протоколе HTTPS разработчик может использовать сертификат органа для SSL / TLS.

elasticsearch {
   ssl => true
   cacert => <path to .pem file>
}

Безопасность с транспортным протоколом

Чтобы использовать транспортный протокол с Elasticsearch, пользователям необходимо установить транспортный протокол. Это позволяет избежать немаршалинга объектов JSON и повысить эффективность.

Базовая аутентификация такая же, как в протоколе http в протоколе вывода Elasticsearch.

elasticsearch {
   protocol => “transport”
   user => <username>
   password => <password>
}

Для аутентификации PKI также необходимо, чтобы наборы SSL были верными с другими настройками в протоколе вывода Elasticsearch -

elasticsearch {
   protocol => “transport”
   ssl => true
   keystore => <string_value>
   keystore_password => <password>
}

Наконец, для обеспечения безопасности SSL требуется немного больше настроек, чем для других методов безопасности связи.

elasticsearch {
   ssl => true
   ssl => true
   keystore => <string_value>
   keystore_password => <password>
   truststore => 
      
        truststore_password => <password> } 
      

Другие преимущества безопасности от Logstash

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

Другие продукты компании Elasticsearch, такие как x-pack и filebeat предоставляет некоторые функции для безопасного взаимодействия с Logstash.