Поиск по сайту:

Добавление фильтров 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:

  1. sudo mkdir -p /opt/logstash/patterns
  2. 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:

  1. 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:

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

Фильтр Logstash: Nginx

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

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

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

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

Сохранить и выйти. Обратите внимание, что этот фильтр будет пытаться сопоставить сообщения типа nginx-access с шаблоном NGINXACCESS, определенным выше.

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

  1. sudo service logstash restart

Filebeat Prospector: Nginx

На ваших серверах Nginx откройте файл конфигурации filebeat.yml для редактирования:

  1. sudo vi /etc/filebeat/filebeat.yml

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

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

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

  1. sudo service filebeat restart

Теперь ваши журналы Nginx будут собираться и фильтроваться!

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

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

Примечание. Если вы используете вариант RedHat, например CentOS, журналы находятся в /var/log/httpd, а не в /var/log/apache2, что используемые в примерах.

Фильтр Logstash: Apache

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

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

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

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

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

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

  1. sudo service logstash restart

Filebeat Prospector: Apache

На серверах Apache откройте файл конфигурации filebeat.yml для редактирования:

  1. sudo vi /etc/filebeat/filebeat.yml

Добавьте следующий Prospector в раздел filebeat, чтобы отправлять журналы Apache с типом apache-access на ваш сервер Logstash:

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

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

  1. sudo service filebeat restart

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

Заключение

Можно собирать и анализировать журналы практически любого типа. Попробуйте написать свои собственные фильтры и шаблоны для других файлов журналов.

Не стесняйтесь комментировать фильтры, которые вы хотели бы видеть, или свои собственные шаблоны!

Если вы не знакомы с использованием Kibana, ознакомьтесь с этим руководством: How To Use Kibana Visualizations and Dashboards.