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