Централизованное логирование с помощью фильтров Logstash
Linux, VPS | Комментировать запись
Примечание: Аналогичное руководство для 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: Apache, ELK, Grok, Logstash, NGINX