Добавление фильтров Logstash для улучшения централизованного ведения журнала
Введение
Logstash — это мощный инструмент для централизации и анализа журналов, который может помочь предоставить обзор вашей среды и выявить проблемы с вашими серверами. Один из способов повысить эффективность настройки стека ELK (Elasticsearch, Logstash и Kibana) — собирать важные журналы приложений и структурировать данные журналов с помощью фильтров, чтобы данные можно было легко анализировать и запрашивать. Мы будем строить наши фильтры на основе шаблонов \grok, которые будут анализировать данные в журналах на полезные фрагменты информации.
Это руководство является продолжением руководства «Как установить Elasticsearch, Logstash и Kibana 4 в Ubuntu 14.04» и в основном посвящено добавлению фильтров Logstash для различных распространенных журналов приложений.
Предпосылки
Чтобы следовать этому руководству, у вас должен быть работающий сервер Logstash, который получает журналы от поставщика, такого как Filebeat. Если вы не настроили Logstash для получения журналов, вот руководство, которое поможет вам начать работу: Как установить Elasticsearch, Logstash и Kibana 4 в Ubuntu 14.04.
Предположения о сервере ELK
- Logstash установлен в
/opt/logstash
- Ваши файлы конфигурации Logstash находятся в
/etc/logstash/conf.d
- У вас есть входной файл с именем
02-beats-input.conf
- У вас есть выходной файл с именем
30-elasticsearch-output.conf
Вам может понадобиться создать каталог patterns
, выполнив эту команду на вашем сервере Logstash:
- sudo mkdir -p /opt/logstash/patterns
- sudo chown logstash: /opt/logstash/patterns
Предположения клиент-сервер
- Вы настроили Filebeat на каждом сервере приложений для отправки syslog/auth.log на ваш сервер Logstash (как описано в разделе «Настройка Filebeat» обязательного руководства)
Если ваши настройки отличаются, просто измените это руководство в соответствии с вашей средой.
О Гроке
Grok работает, анализируя текстовые шаблоны, используя регулярные выражения и присваивая им идентификатор.
Синтаксис шаблона grok: %{ШАБЛОН:ИДЕНТИФИКАТОР}
. Фильтр Logstash включает в себя последовательность шаблонов grok, которые сопоставляют и присваивают различным частям сообщения журнала различные идентификаторы, благодаря которым журналы получают структуру.
Чтобы узнать больше о grok, посетите список шаблонов Logstash по умолчанию.
Как пользоваться этим руководством
Каждый основной раздел, следующий за этим, будет включать дополнительные сведения о конфигурации, необходимые для сбора и фильтрации журналов для данного приложения. Для каждого приложения, которое вы хотите регистрировать и фильтровать, вам придется внести некоторые изменения в конфигурацию как на клиентском сервере (Filebeat), так и на сервере Logstash.
Подраздел «Шаблоны Logstash»
Если есть подраздел Logstash Patterns, он будет содержать шаблоны grok, которые можно добавить в новый файл в /opt/logstash/patterns
на сервере Logstash. Это позволит вам использовать новые шаблоны в фильтрах Logstash.
Подраздел фильтра Logstash
Подразделы Logstash Filter будут включать фильтр, который можно добавить в новый файл между входным и выходным файлами конфигурации в /etc/logstash/conf.d
на сервере Logstash. Фильтр определяет, как сервер Logstash анализирует соответствующие файлы журналов. Не забудьте перезапустить службу Logstash после добавления нового фильтра, чтобы загрузить изменения.
Подраздел Filebeat Prospector
Используемые Filebeat Prospectors указывают, какие журналы отправлять в Logstash. Дополнительные конфигурации старателей следует добавить в файл /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/
в Logstash с приложением app. -access
тип. После внесения любых изменений Filebeat необходимо перезагрузить, чтобы изменения вступили в силу.
Теперь, когда вы знаете, как пользоваться этим руководством, остальная часть руководства покажет вам, как собирать и фильтровать журналы приложений!
Приложение: Nginx
Шаблоны Logstash: Nginx
Шаблоны журнала Nginx не включены в шаблоны Logstash по умолчанию, поэтому мы добавим шаблоны Nginx вручную.
На сервере ELK создайте новый файл шаблона с именем 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
:
- sudo chown logstash: /opt/logstash/patterns/nginx
Фильтр Logstash: Nginx
На сервере ELK создайте новый файл конфигурации фильтра с именем 11-nginx-filter.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
, чтобы отправлять журналы доступа Nginx как тип nginx-access
на ваш сервер Logstash:
-
paths:
- /var/log/nginx/access.log
document_type: nginx-access
Сохранить и выйти. Перезагрузите Filebeat, чтобы изменения вступили в силу:
- sudo service filebeat restart
Теперь ваши журналы Nginx будут собираться и фильтроваться!
Приложение: веб-сервер Apache HTTP
Шаблоны журнала Apache включены в шаблоны Logstash по умолчанию, поэтому настроить для него фильтр довольно просто.
Примечание. Если вы используете вариант RedHat, например CentOS, журналы находятся в /var/log/httpd
, а не в /var/log/apache2
, что используемые в примерах.
Фильтр 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
с шаблоном COMBINEDAPACHELOG
, одним из шаблонов Logstash по умолчанию.
Теперь перезапустите Logstash, чтобы перезагрузить конфигурацию:
- sudo service logstash restart
Filebeat Prospector: Apache
На серверах Apache откройте файл конфигурации filebeat.yml
для редактирования:
- sudo vi /etc/filebeat/filebeat.yml
Добавьте следующий Prospector в раздел filebeat
, чтобы отправлять журналы Apache с типом apache-access
на ваш сервер Logstash:
-
paths:
- /var/log/apache2/access.log
document_type: apache-access
Сохранить и выйти. Перезагрузите Filebeat, чтобы изменения вступили в силу:
- sudo service filebeat restart
Теперь ваши журналы Apache будут собираться и фильтроваться!
Заключение
Можно собирать и анализировать журналы практически любого типа. Попробуйте написать свои собственные фильтры и шаблоны для других файлов журналов.
Не стесняйтесь комментировать фильтры, которые вы хотели бы видеть, или свои собственные шаблоны!
Если вы не знакомы с использованием Kibana, ознакомьтесь с этим руководством: How To Use Kibana Visualizations and Dashboards.