Учебники

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

Logstash — Введение

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

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

Основные характеристики Logstash

Основные характеристики Logstash следующие:

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

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

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

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

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

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

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, где происходит фактическая обработка событий. Разработчик может использовать предопределенные шаблоны регулярных выражений 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 предоставляет несколько плагинов для анализа и преобразования данных журналов в любой пользовательский формат.

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

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

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

Недостатки Logstash

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

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

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

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

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

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

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

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

Logstash — ELK Стек

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

ELK

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 намного меньше, чем его альтернативы.

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

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

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

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

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

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

Logstash — Установка

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

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

В операционной системе Windows (ОС) (с использованием командной строки) —

> java -version 

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

$ echo $JAVA_HOME

Шаг 2 — Загрузите Logstash с —

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

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

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

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

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

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

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

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

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

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

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

Шаг 3 — Процесс установки Logstash очень прост. Давайте посмотрим, как вы можете установить Logstash на разных платформах.

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

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

  • ОС UNIX — распакуйте файл tar в любое место, и Logstash будет установлен.

ОС Windows — разархивируйте zip-пакет и Logstash будет установлен.

ОС UNIX — распакуйте файл tar в любое место, и Logstash будет установлен.

$tar –xvf logstash-5.0.2.tar.gz

Использование утилиты APT для ОС Linux —

  • Загрузите и установите открытый ключ подписи —
$ 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

Использование утилиты YUM для ОС Debian Linux

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

Добавьте следующий текст в файл с суффиксом .repo в каталоге o /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

Шаг 4 — Перейдите в домашний каталог Logstash. Внутри папки bin запустите файлasticsearch.bat для окон или вы можете сделать то же самое с помощью командной строки и через терминал. В UNIX запустите файл Logstash.

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

В винде —

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

В Linux —

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

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

Шаг 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 Сервис Архитектура

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

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

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

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

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

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

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

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

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

Logstash.conf

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

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

Запустите Logstash

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

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

inlog.log

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

Hello tutorialspoint.com

outlog.log

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

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

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

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

Logstash.conf

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

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

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

Запустите Logstash

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

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

inlog2.log

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

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

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

{
   "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 — Сбор журналов

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

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

  • STDIN
  • Syslog
  • файлы
  • TCP / UDP
  • Microsoft Windows Eventlogs
  • WebSocket
  • ZeroMQ
  • Индивидуальные расширения

Сбор журналов с использованием Apache Tomcat 7 Server

В этом примере мы собираем журналы сервера 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 Log

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

Apache Tomcat генерирует новый файл журнала доступа в соответствии с датой и регистрирует там события доступа. В нашем случае это был localhost_access_log.2016-12-24.txt в каталоге журналов 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 .

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 поддерживает огромный спектр журналов из разных источников. Он работает с известными источниками, как описано ниже.

Собирать логи из метрик

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

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

logstash.conf

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

Наконец, выведите события фильтра в стандартный вывод, такой как командная строка, используя плагин кодека для форматирования. Плагин 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

стандартный вывод (командная строка)

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 локального сервера 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 , который генерируется, когда события сервера происходят в 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 сервера базы данных MySQL под [mysqld].

В окнах он присутствует внутри установочного каталога 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"
   }
}

queries.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 получает журналы, используя входные плагины, а затем использует плагины фильтров для анализа и преобразования данных. Анализ и преобразование журналов выполняются в соответствии с системами, присутствующими в выходном месте назначения. 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 представляет шаблон GROK, а имя поля — это имя поля, которое представляет проанализированные данные в выходных данных.

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

Установка плагина Aggregate Filter

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

>logstash-plugin install logstash-filter-aggregate

logstash.conf

В этой конфигурации вы можете увидеть три оператора if для инициализации, увеличения и генерации общей продолжительности транзакции, то есть 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 — Преобразование журналов

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

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

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

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

>Logstash-plugin install Logstash-filter-mutate

logstash.conf

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

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

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

{
   "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 предлагает несколько выходных плагинов для хранения отфильтрованных событий журнала в различных системах хранения и поиска.

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

Logstash может хранить отфильтрованные журналы в файле, 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: // локальный: 9200 /

отклик

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

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

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

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

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

>Logstash –f Logstash.conf

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

HTTP: // локальный: 9200 / logstash-2017.01.01 / _search довольно

отклик

Это данные в формате 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 — Поддерживаемые выходы

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

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

>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

стандартный вывод (это будет командная строка в 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 может анализировать и преобразовывать данные в значимую информацию, как того требует пользователь. Наконец, Logstash может отправлять или хранить значимую информацию в различных источниках назначения, таких как Elasticsearch, AWS Cloudwatch и т. Д.

Входные плагины

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

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

Вы можете скачать плагин ввода с помощью следующей команды —

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

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

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

биения

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

2

cloudwatch

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

3

couchdb_changes

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

4

drupal_dblog

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

5

Elasticsearch

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

6

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

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

7

Exec

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

8

файл

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

9

генератор

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

10

GitHub

Захватывает события от GitHub webhook.

11

графит

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

12

стук сердца

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

13

HTTP

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

14

http_poller

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

15

JDBC

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

16

JMX

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

17

log4j

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

18

Новости

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

19

ТСР

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

20

щебет

Сбор событий из потокового API Twitter.

21

Юникс

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

22

WebSocket

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

23

XMPP

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

биения

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

cloudwatch

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

couchdb_changes

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

drupal_dblog

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

Elasticsearch

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

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

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

Exec

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

файл

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

генератор

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

GitHub

Захватывает события от GitHub webhook.

графит

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

стук сердца

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

HTTP

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

http_poller

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

JDBC

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

JMX

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

log4j

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

Новости

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

ТСР

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

щебет

Сбор событий из потокового API Twitter.

Юникс

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

WebSocket

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

XMPP

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

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

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

файл

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

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

Elasticsearch

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

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

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

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

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

щебет

Этот плагин ввода используется для сбора потока Twitter из его потокового 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, чтобы игнорировать ретвиты во входном твиттере
ключевые слова Это массив ключевых слов, которые нужно отслеживать во входном фиде твиттеров.
язык Он определяет язык твитов, необходимых для LogStash из входного твиттера. Это массив идентификаторов, который определяет конкретный язык в твиттере
места Чтобы отфильтровать твиты из входного канала в соответствии с указанным местоположением. Это массив, который содержит долготу и широту местоположения
oauth_token Это обязательное поле, содержащее токен пользователя oauth. Для получения дополнительной информации, пожалуйста, посетите следующую ссылку https://dev.twitter.com/apps
oauth_token_secret Это обязательное поле, содержащее секретный токен пользователя oauth. Для получения дополнительной информации, пожалуйста, посетите следующую ссылку https://dev.twitter.com/apps
теги Чтобы добавить любую дополнительную информацию в события ввода
тип Он используется для классификации входных форм определенных плагинов к заданному типу, так что будет проще искать все входные события на более поздних этапах

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

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

https://dev.twitter.com

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 находится в папке bin установочного каталога Logstash. В следующей таблице описываются выходные плагины, предлагаемые Logstash.

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

CloudWatch

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

2

CSV

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

3

Elasticsearch

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

4

Эл. адрес

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

5

Exec

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

6

ганглии

Это корчи метрики Гмонду Гангила.

7

gelf

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

8

google_bigquery

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

9

google_cloud_storage

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

10

графит

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

11

graphtastic

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

12

hipchat

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

13

HTTP

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

14

influxdb

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

15

ИРЦ

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

16

MongoDB

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

17

Nagios

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

18

nagios_nsca

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

19

opentsdb

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

20

труба

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

21

Rackspace

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

22

Redis

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

23

Riak

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

24

s3

Он сохраняет выходные данные регистрации в Amazon Simple Storage Service.

25

с.н.с.

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

26

solr_http

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

27

СФС

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

28

statsd

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

29

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

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

30

системный журнал

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

31

ТСР

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

32

УДП

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

33

WebSocket

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

34

XMPP

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

CloudWatch

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

CSV

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

Elasticsearch

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

Эл. адрес

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

Exec

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

ганглии

Это корчи метрики Гмонду Гангила.

gelf

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

google_bigquery

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

google_cloud_storage

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

графит

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

graphtastic

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

hipchat

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

HTTP

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

influxdb

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

ИРЦ

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

MongoDB

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

Nagios

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

nagios_nsca

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

opentsdb

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

труба

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

Rackspace

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

Redis

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

Riak

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

s3

Он сохраняет выходные данные регистрации в Amazon Simple Storage Service.

с.н.с.

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

solr_http

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

СФС

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

statsd

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

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

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

системный журнал

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

ТСР

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

УДП

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

WebSocket

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

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
upsert «» Он обновляет документ или, если document_id не существует, он создает новый документ в Elasticsearch
пользователь Он содержит пользователя для аутентификации запроса Logstash в безопасном кластере Elasticsearch

Эл. адрес

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

Название настройки Значение по умолчанию Описание
адрес «Локальный» Это адрес почтового сервера
вложения [] Он содержит имена и места прикрепленных файлов
тело «» Он содержит текст письма и должен быть простым текстом
куб.см Он содержит адреса электронной почты через запятую для копии электронной почты
кодер-декодер «Простой» Он используется для кодирования выходных данных регистрации перед отправкой в ​​источник назначения.
Тип содержимого «text / html; charset = UTF-8» Используется для содержимого типа письма
отлаживать ложный Используется для запуска почтового ретранслятора в режиме отладки.
домен «Локальный» Используется для настройки домена для отправки сообщений электронной почты.
от «Logstash.alert@nowhere.com» Используется для указания адреса электронной почты отправителя.
htmlbody «» Используется для указания тела письма в формате html.
пароль Используется для аутентификации на почтовом сервере
порт 25 Он используется для определения порта для связи с почтовым сервером
ответить на Используется для указания идентификатора электронной почты для поля ответа на электронную почту
предмет «» Содержит строку темы письма
use_tls ложный Включить или отключить TSL для связи с почтовым сервером
имя пользователя Содержит имя пользователя для аутентификации на сервере
с помощью «SMTP» Он определяет методы отправки электронной почты от Logstash

Http

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

Название настройки Значение по умолчанию Описание
automatic_retries 1 Используется для установки количества попыток http-запроса logstash.
cacert Содержит путь к файлу для проверки сертификата сервера
кодер-декодер «Простой» Он используется для кодирования выходных данных регистрации перед отправкой в ​​источник назначения.
Тип содержимого Я указываю тип содержимого http-запроса к целевому серверу
печенье правда Используется для включения или отключения куки
формат «JSON» Используется для установки формата тела http-запроса.
заголовки Содержит информацию http заголовка
http_method «» Он используется для указания метода http, используемого в запросе logstash, и значениями могут быть «положить», «опубликовать», «патч», «удалить», «получить», «голова»
request_timeout 60 Используется для аутентификации на почтовом сервере
URL Для этого плагина обязательна настройка конечной точки http или https

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

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

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

statsd

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

Название настройки Значение по умолчанию Описание
кодер-декодер «Простой» Он используется для кодирования выходных данных регистрации перед отправкой в ​​источник назначения.
подсчитывать {} Он используется для определения количества, которое будет использоваться в метриках
декремент [] Используется для указания имен метрик декремента.
хозяин «Локальный» Содержит адрес сервера statsd
приращение [] Используется для указания имен метрик приращения.
порт 8125 Содержит порт сервера statsd
частота дискретизации 1 Используется указать частоту выборки метрики
отправитель «% {Хост}» Указывает имя отправителя
задавать {} Используется для указания заданной метрики
синхронизация {} Используется для указания метрики синхронизации
рабочие 1 Используется для указания количества рабочих на выходе

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

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

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

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

Вы можете скачать плагин фильтра с помощью следующей команды —

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

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

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

совокупный

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

2

изменять

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

3

анонимный

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

4

шифровать

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

5

клон

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

6

сличать

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

7

CSV

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

8

Дата

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

9

рассекать

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

10

падение

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

11

истекшее

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

12

Elasticsearch

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

13

extractnumbers

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

14

GeoIP

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

15

Grok

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

16

i18n

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

17

JSON

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

18

киловольт

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

19

метрика

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

20

многострочный

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

21

мутировать

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

22

спектр

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

23

Рубин

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

24

спать

Это делает Logstash спит в течение определенного времени

25

Трещина

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

26

XML

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

совокупный

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

изменять

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

анонимный

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

шифровать

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

клон

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

сличать

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

CSV

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

Дата

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

рассекать

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

падение

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

истекшее

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

Elasticsearch

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

extractnumbers

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

GeoIP

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

Grok

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

i18n

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

JSON

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

киловольт

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

метрика

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

многострочный

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

мутировать

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

спектр

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

Рубин

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

спать

Это делает Logstash спит в течение определенного времени

Трещина

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

XML

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

Кодек плагины

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

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

Avro

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

2

CloudFront

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

3

cloudtrail

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

4

collectd

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

5

compress_spooler

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

6

точек

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

7

es_bulk

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

8

графит

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

9

gzip_lines

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

10

JSON

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

11

json_lines

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

12

линия

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

13

многострочный

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

14

поток данных, передающихся по сети

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

15

птар

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

16

гладкий

Это читает текст без разделителей

17

rubydebug

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

Avro

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

CloudFront

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

cloudtrail

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

collectd

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

compress_spooler

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

точек

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

es_bulk

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

графит

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

gzip_lines

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

JSON

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

json_lines

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

линия

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

многострочный

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

поток данных, передающихся по сети

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

птар

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

гладкий

Это читает текст без разделителей

rubydebug

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

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

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

Генерация базовой структуры

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

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

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

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

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

В нашем случае файл кода был расположен по следующему пути:

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

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

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

Чтобы установить этот плагин, нужно изменить Gemfile of 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 filter.

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

Запустите 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 мониторинга

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

API Node Info

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

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

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

отклик

Ниже приводится ответ API Node Info.

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

Вы также можете получить конкретную информацию о Pipeline, OS и 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. Вы можете получить эту информацию, отправив запрос на получение адресов, указанных ниже —

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 Hot Threads

Этот 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 может подсчитывать или анализировать количество ошибок, обращений или других событий с помощью подключаемых модулей фильтров. Этот анализ и подсчет могут быть использованы для мониторинга различных серверов и их служб.

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 от Tomcat, результат изменится на —

down

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

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

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

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

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

Другая аутентификация — это PKI (инфраструктура открытых ключей) для 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.