Фильтры Logstash как способ улучшения сбора логов

Published by Leave your thoughts

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

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

Требования

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

Требования к серверу Logstash:

  • Logstash должен быть установлен в /opt/logstash;
  • Logstash Forwarder должен принимать логии на порту 5000;
  • Конфигурационные файлы Logstash должны находиться в etc/logstash/conf.d;
  • Входной файл называется 01-lumberjack-input.conf
  • Выходной файл называется 30-lumberjack-output.conf

Требования Logstash Forwarder:

  • Logstash Forwarder настроен для каждого сервера приложений, а также отправляет syslog/auth.log на сервер Logstash.

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

Что такое Grok?

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

Синтаксис grok-шаблона выглядит так:

%{PATTERN:IDENTIFIER}

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

Чтобы узнать о grok больше, обратитесь к странице grok на сайте Logstash, а также к списку шаблонов Logstash по умолчанию.

Как использовать данное руководство

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

Разделы Logstash Forwarder

Подразделы с пометкой Logstash Forwarder касаются сервера приложений, который отправляет свои логи. В файл /etc/logstash-forwarder непосредственно после следующих строк нужно внести дополнительные настройки файлов:

"files": [
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}

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

Разделы о Logstash-шаблонах

Каждый раздел о Logstash-шаблонах содержит grok-шаблоны, которые можно добавить в новый файл в /opt/logstash/patterns на сервере Logstash. Это позволит Logstash-фильтрам использовать новые шаблоны.

Разделы о Logstash-фильтрах

Разделы о Logstash-фильтрах содержат фильтры, которые можно внести в новый файл между входным и выходным файлами в /etc/logstash/conf.d на сервере Logstash. Фильтр определяет, как именно Logstash-сервер должен анализировать соответствующие лог файлы. Не забудьте перезапустить Logstash-сервер после внесения новых фильтров, чтобы активировать все изменения.

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

Приложение: Nginx

Logstash Forwarder: Nginx

На сервере Nginx откройте конфигурационный файл logstash-forwarder и отредактируйте его:

sudo vi /etc/logstash-forwarder

В раздел files внесите следующий блок кода, чтобы отправить логи доступа Nginx (файлы типа «nginx-access») серверу Logstash:

,
{
"paths": [
"/var/log/nginx/access.log"
],
"fields": { "type": "nginx-access" }
}

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

sudo service logstash-forwarder force-reload

Logstash-шаблоны: Nginx

Шаблоны для Nginx не входят в Logstash-шаблоны по умолчанию, потом их нужно добавить вручную.

На Logstash-сервере создайте новый файл для шаблона и назовите его nginx:

sudo vi /opt/logstash/patterns/nginx

Затем внесите в него следующий код:

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

Сохраните изменения и закройте файл. Шаблон NGINXACCESS анализирует и присваивает данным различные идентификаторы (например, clientip, ident, auth и т.д.).

Затем сделайте logstash владельцем файла с шаблоном:

chown logstash:logstash /opt/logstash/patterns/nginx

Logstash-фильтр: Nginx

На сервере Logstash создайте новый конфигурационный файл для фильтра и назовите его 11-nginx.conf:

sudo vi /etc/logstash/conf.d/11-nginx.conf

Затем внесите следующий фильтр:

filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
}

Сохраните изменения и закройте файл. Обратите внимание: данный фильтр находит сообщения типа «nginx-access» с помощью шаблона NGINXACCESS, созданного ранее.

Теперь нужно перезапустить Logstash, чтобы обновить конфигурации:

sudo service logstash restart

Готово! Теперь логи Nginx будут собраны, проанализированы и отфильтрованы.

Приложение: HTTP веб-сервер Apache 

Шаблоны для логов Apache включены в Logstash по умолчанию, потому настроить фильтры для Apache будет очень просто.

Logstash Forwarder

На сервере Apache откройте конфигурационный файл logstash-forwarder и отредактируйте:

sudo vi /etc/logstash-forwarder

В раздел files внесите логи доступа Apache для Logstash и укажите тип файлов «apache-access»:

,
{
"paths": [
"/var/log/apache2/access.log"
],
"fields": { "type": "apache-access" }
}

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

sudo service logstash-forwarder force-reload

Logstash-фильтр: Apache

На сервере Logstash создайте новый файл по имени 12-apache.conf:

sudo vi /etc/logstash/conf.d/12-apache.conf

Затем внесите следующий фильтр

filter {
if [type] == "apache-access" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
}

Сохранит изменения, закройте файл. Обратите внимание: этот фильтр будет искать сообщения типа apache-access с помощью COMBINEDAPACHELOG, шаблона Logstash по умолчанию.
Опять же, перезагрузите Logstash:

sudo service logstash restart

Теперь логи Apache будут собраны и отфильтрованы!

Итоги

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

Tags: , , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>