Централизованное логирование с помощью фильтров Logstash

Примечание: Аналогичное руководство для Logstash Forwarder можно найти по этой ссылке.

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

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

Требования

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

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

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

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

  • Программа должна быть предварительно настроена на каждом сервере, чтобы отправлять логи (syslog и auth.log) на сервер Logstash.

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

Чтобы создать каталог patterns, запустите на сервере Logstash команду:

sudo mkdir -p /opt/logstash/patterns
sudo chown logstash:logstash /opt/logstash/patterns

Что такое Grok?

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

Синтаксис шаблона grok:

%{PATTERN:IDENTIFIER}

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

Примечание: Больше информации о grok можно найти на странице сайта Logstash и Github.

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

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

Разделы Logstash Forwarder

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

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

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

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

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

Раздел о Filebeat prospector

Prospectors позволяют указать, какие логи отправлять в Logstash. Дополнительные настройки prospector нужно поместить в файл /etc/filebeat/filebeat.yml сразу после стандартных настроек в разделе prospectors.

filebeat:
# List of prospectors to fetch data.
prospectors:
-
- /var/log/secure
- /var/log/messages
document_type: syslog
-
paths:
- /var/log/app/*.log
document_type: app-access
...

Выделенные красным строки в этом примере настраивают Prospector, который будет отправлять файлы .log в каталог /var/log/app/ с типом app-access. После внесения изменений в настройки нужно перезапустить Filebeat.

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

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

Шаблон Logstash: Nginx

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

На сервере ELK создайте новый шаблон:

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 обрабатывает данные и приписывает им идентификаторы.

Передайте права собственности на файл пользователю logstash:

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

Фильтр Logstash: Nginx

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

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

Добавьте в него:

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

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

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

sudo service logstash restart

Filebeat Prospector: Nginx

На всех серверах Nginx нужно открыть конфигурационный файл filebeat.yml в текстовом редакторе.

sudo vi /etc/filebeat/filebeat.yml

Добавьте следующие настройки для Prospector в раздел filebeat, чтобы передавать на сервер Logstash логи доступа Nginx как тип nginx-access:

-
paths:
- /var/log/nginx/access.log
document_type: nginx-access

Сохраните и закройте файл. Перезапустите Filebeat:

sudo service filebeat restart

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

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

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

Примечание: В дистрибутивах RedHat логи хранятся в каталоге /var/log/httpd.

Фильтр Logstash: Apache

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

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

Добавьте следующий фильтр:

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

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

Опять же, перезагрузите Logstash:

sudo service logstash restart

Filebeat Prospector: Apache

На всех серверах Apache откройте filebeat.yml в текстовом редакторе:

sudo vi /etc/filebeat/filebeat.yml

Добавьте в раздел filebeat настройки для Prospector, которые будут отправлять логи Apache на сервер Logstash как тип apache-access.

-
paths:
- /var/log/apache2/access.log
document_type: apache-access

Сохраните и закройте файл. Перезапустите Filebeat:

sudo service filebeat restart

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

Заключение

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

Tags: , , , ,

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