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

Как использовать Logstash и Kibana для централизации журналов в CentOS 6


Статус: устарело

В этой статье рассматривается версия CentOS, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением CentOS 6, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию CentOS.

Причина:

Смотрите вместо этого:

Следующая серия руководств DigitalOcean может представлять непосредственный интерес, поскольку в ней рассказывается, как централизовать ведение журнала с помощью Logstash и Kibana на сервере CentOS 7:

  • Централизованное ведение журнала с помощью Logstash и Kibana в CentOS 7

Введение

В этом руководстве мы рассмотрим установку Logstash 1.4.2 и Kibana 3 и их настройку для сбора и визуализации системных журналов наших систем в централизованном месте. Logstash — это инструмент с открытым исходным кодом для сбора, анализа и хранения журналов для будущего использования. Kibana 3 — это веб-интерфейс, который можно использовать для поиска и просмотра журналов, проиндексированных Logstash. Оба этих инструмента основаны на Elasticsearch. Elasticsearch, Logstash и Kibana при совместном использовании называются стеком ELK.

Централизованное ведение журналов может быть очень полезным при попытке выявить проблемы с вашими серверами или приложениями, поскольку оно позволяет выполнять поиск по всем вашим журналам в одном месте. Это также полезно, поскольку позволяет выявлять проблемы, охватывающие несколько серверов, путем сопоставления их журналов за определенный период времени.

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

Наша цель

Цель руководства — настроить Logstash для сбора системных журналов с нескольких серверов и настроить Kibana для визуализации собранных журналов.

Наша установка Logstash/Kibana состоит из четырех основных компонентов:

  • Logstash: серверный компонент Logstash, обрабатывающий входящие журналы.
  • Elasticsearch: сохраняет все журналы.
  • Kibana: веб-интерфейс для поиска и визуализации журналов
  • Logstash Forwarder: установленный на серверах, которые будут отправлять свои журналы в Logstash, Logstash Forwarder служит агентом пересылки журналов, который использует сетевой протокол lumberjack для связи с Logstash

Мы установим первые три компонента на один сервер, который мы будем называть нашим сервером Logstash. Logstash Forwarder будет установлен на всех серверах, для которых мы хотим собирать журналы, которые мы вместе будем называть нашими серверами.

Предпосылки

Для выполнения этого руководства вам потребуется root-доступ к CentOS 6.5 VPS. Инструкции по настройке можно найти здесь (шаги 3 и 4): Initial Server Setup with CentOS 6.

Объем ЦП, ОЗУ и хранилища, которые потребуются вашему серверу Logstash, зависит от объема журналов, которые вы собираетесь собирать. В этом руководстве мы будем использовать VPS со следующими характеристиками для нашего сервера Logstash:

  • ОС: CentOS 6.5
  • ОЗУ: 2 ГБ
  • ЦП: 2

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

Давайте приступим к настройке нашего сервера Logstash!

Установить Java 7

Для Elasticsearch и Logstash требуется Java 7, поэтому мы установим ее сейчас. Мы установим OpenJDK 7.

Установите последнюю стабильную версию OpenJDK 7 с помощью этой команды:

sudo yum -y install java-1.7.0-openjdk

Теперь, когда Java 7 установлена, давайте установим ElasticSearch.

Установить эластичный поиск

Примечание. Logstash 1.4.2 рекомендует Elasticsearch 1.1.1.

Выполните следующую команду, чтобы импортировать общедоступный GPG-ключ Elasticsearch в rpm:

sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch

Создайте и отредактируйте новый файл репозитория yum для Elasticsearch:

sudo vi /etc/yum.repos.d/elasticsearch.repo

Добавьте следующую конфигурацию репозитория:

[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

Сохранить и выйти.

Установите Elasticsearch 1.1.1 с помощью этой команды:

sudo yum -y install elasticsearch-1.1.1

Теперь Elasticsearch установлен. Отредактируем конфигурацию:

sudo vi /etc/elasticsearch/elasticsearch.yml

Добавьте в файл следующую строку, чтобы отключить динамические скрипты:

script.disable_dynamic: true

Вы также захотите ограничить внешний доступ к вашему экземпляру Elasticsearch, чтобы посторонние не могли прочитать ваши данные или отключить ваш кластер Elasticseach через HTTP API. Найдите строку, указывающую network.host, и раскомментируйте ее, чтобы она выглядела так:

network.host: localhost

Затем отключите многоадресную рассылку, найдя элемент discovery.zen.ping.multicast.enabled и раскомментировав его, чтобы он выглядел так:

discovery.zen.ping.multicast.enabled: false

Сохраните и закройте elasticsearch.yml.

Теперь запустите Elasticsearch:

sudo service elasticsearch restart

Затем выполните следующую команду, чтобы запустить Elasticsearch при загрузке:

sudo /sbin/chkconfig --add elasticsearch

Теперь, когда Elasticsearch запущен, давайте установим Kibana.

Установить Кибану

Примечание. Logstash 1.4.2 рекомендует Kibana 3.0.1.

Загрузите Kibana в свой домашний каталог с помощью следующей команды:

cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

Распакуйте архив Kibana с помощью tar:

tar xvf kibana-3.0.1.tar.gz

Откройте файл конфигурации Kibana для редактирования:

vi ~/kibana-3.0.1/config.js

В файле конфигурации Kibana найдите строку, указывающую URL-адрес сервера elasticsearch, и замените номер порта (по умолчанию 9200) на 80:

   elasticsearch: "http://"+window.location.hostname+":80",

Это необходимо, потому что мы планируем получить доступ к Kibana через порт 80 (т. е. http://logstash_server_public_ip/).

Мы будем использовать Nginx для обслуживания нашей установки Kibana, поэтому давайте переместим файлы в подходящее место. Создайте каталог с помощью следующей команды:

sudo mkdir -p /usr/share/nginx/kibana3

Теперь скопируйте файлы Kibana в только что созданный каталог:

sudo cp -R ~/kibana-3.0.1/* /usr/share/nginx/kibana3/

Прежде чем мы сможем использовать веб-интерфейс Kibana, нам нужно установить Nginx. Давайте сделаем это сейчас.

Установите Nginx

Добавьте репозиторий Yum, содержащий Nginx:

sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Используйте Yum для установки Nginx:

sudo yum -y install nginx

Из-за того, как Kibana связывает пользователя с Elasticsearch (пользователь должен иметь прямой доступ к Elasticsearch), нам нужно настроить Nginx для проксирования запросов порта 80 на порт 9200 (порт, который Elasticsearch прослушивает по умолчанию). К счастью, Kibana предоставляет образец конфигурации Nginx, который настраивает большую часть этого.

Загрузите образец конфигурации Nginx из репозитория Kibana на github в свой домашний каталог:

cd ~; curl -OL https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

Откройте пример файла конфигурации для редактирования:

vi nginx.conf

Найдите и измените значения server_name на ваше полное доменное имя (или ваш общедоступный IP-адрес, если вы не используете доменное имя) и root на место, где мы установили Kibana, поэтому они выглядят как следующие записи:

  server_name FQDN;
  root  /usr/share/nginx/kibana3;

Сохранить и выйти. Теперь скопируйте его поверх блока сервера Nginx по умолчанию с помощью следующей команды:

sudo cp ~/nginx.conf /etc/nginx/conf.d/default.conf

Теперь мы установим apache2-utils, чтобы мы могли использовать htpasswd для создания пары имени пользователя и пароля:

sudo yum install httpd-tools-2.2.15

Затем создайте логин, который будет использоваться в Kibana для сохранения информационных панелей и предоставления к ним общего доступа (замените свое имя пользователя):

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user

Затем введите пароль и подтвердите его. Только что созданный файл htpasswd упоминается в конфигурации Nginx, которую вы недавно настроили.

Теперь перезапустите Nginx, чтобы наши изменения вступили в силу:

sudo service nginx restart

Также настройте Nginx для запуска при загрузке:

sudo chkconfig --levels 235 nginx on

Теперь Kibana доступна через ваше полное доменное имя или общедоступный IP-адрес вашего сервера Logstash, например http://logstash_server_public_ip/. Если вы зайдете туда в веб-браузере, вы должны увидеть страницу приветствия Kibana, которая позволит вам просматривать информационные панели, но не будет журналов для просмотра, поскольку Logstash еще не настроен. Давайте сделаем это сейчас.

Установить Логсташ

Пакет Logstash использует тот же ключ GPG, что и Elasticsearch, и мы уже установили этот открытый ключ, поэтому давайте создадим и отредактируем новый файл репозитория Yum для Logstash:

sudo vi /etc/yum.repos.d/logstash.repo

Добавьте следующую конфигурацию репозитория:

[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

Сохранить и выйти.

Установите Logstash 1.4.2 с помощью этой команды:

sudo yum -y install logstash-1.4.2

Logstash установлен, но еще не настроен.

Создание SSL-сертификатов

Поскольку мы собираемся использовать Logstash Forwarder для отправки журналов с наших серверов на наш сервер Logstash, нам необходимо создать сертификат SSL и пару ключей. Сертификат используется Logstash Forwarder для проверки подлинности Logstash Server.

Теперь у вас есть два варианта создания SSL-сертификатов. Если у вас есть настройка DNS, которая позволит вашим клиентским серверам разрешать IP-адрес сервера Logstash, используйте вариант 2. В противном случае вариант 1 позволит вам использовать IP-адреса.

Вариант 1: IP-адрес

Если у вас нет настройки DNS, которая позволила бы вашим серверам, с которых вы будете собирать журналы, разрешать IP-адрес вашего сервера Logstash, вам придется добавить частный IP-адрес вашего сервера Logstash в subjectAltName (SAN) сертификата SSL, который мы собираемся сгенерировать. Для этого откройте файл конфигурации OpenSSL:

sudo vi /etc/pki/tls/openssl.cnf

Найдите в файле раздел [ v3_ca ] и добавьте под ним эту строку (подставив частный IP-адрес сервера Logstash):

subjectAltName = IP: logstash_server_private_ip

Сохранить и выйти.

Теперь создайте сертификат SSL и закрытый ключ в соответствующих местах (/etc/pki/tls/) с помощью следующих команд:

cd /etc/pki/tls
sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

Файл logstash-forwarder.crt будет скопирован на все серверы, которые будут отправлять журналы в Logstash, но мы сделаем это чуть позже. Давайте завершим нашу настройку Logstash. Если вы выбрали этот вариант, пропустите вариант 2 и перейдите к настройке Logstash.

Вариант 2: полное доменное имя (DNS)

Если у вас есть настройка DNS с вашей частной сетью, вам следует создать запись A, содержащую частный IP-адрес сервера Logstash — это доменное имя будет использоваться в следующей команде для создания сертификата SSL. В качестве альтернативы вы можете использовать запись, указывающую на общедоступный IP-адрес сервера. Просто убедитесь, что ваши серверы (те, с которых вы будете собирать журналы) смогут преобразовать доменное имя в ваш сервер Logstash.

Теперь сгенерируйте сертификат SSL и закрытый ключ в соответствующих местах (/etc/pki/tls/…) с помощью следующей команды (замените полное доменное имя сервера Logstash):

cd /etc/pki/tls
sudo openssl req -subj '/CN=<^>logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

Файл logstash-forwarder.crt будет скопирован на все серверы, которые будут отправлять журналы в Logstash, но мы сделаем это чуть позже. Давайте завершим нашу настройку Logstash.

Настроить Логсташ

Файлы конфигурации Logstash имеют формат JSON и находятся в /etc/logstash/conf.d. Конфигурация состоит из трех разделов: входы, фильтры и выходы.

Давайте создадим файл конфигурации с именем 01-lumberjack-input.conf и настроим наш вход «лесоруб» (протокол, который использует Logstash Forwarder):

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

Вставьте следующую конфигурацию input:

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Сохранить и выйти. Это указывает на ввод lumberjack, который будет прослушивать tcp-порт 5000 и будет использовать SSL-сертификат и закрытый ключ, которые мы создали ранее.

Теперь давайте создадим файл конфигурации с именем 10-syslog.conf, куда мы добавим фильтр для сообщений системного журнала:

sudo vi /etc/logstash/conf.d/10-syslog.conf

Вставьте следующую конфигурацию системного журнала filter:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

Сохранить и выйти. Этот фильтр ищет журналы, помеченные как «syslog» (с помощью Logstash Forwarder), и пытается использовать «grok» для анализа входящих журналов системного журнала, чтобы сделать их структурированными и доступными для запросов.

Наконец, мы создадим файл конфигурации с именем 30-lumberjack-output.conf:

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

Вставьте следующую конфигурацию output:

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

Сохранить и выйти. Этот вывод в основном настраивает Logstash для хранения журналов в Elasticsearch.

С этой конфигурацией Logstash также будет принимать журналы, которые не соответствуют фильтру, но данные не будут структурированы (например, нефильтрованные журналы Nginx или Apache будут отображаться в виде простых сообщений вместо того, чтобы классифицировать сообщения по кодам ответа HTTP, исходным IP-адресам, обслуживаемым файлам). , и т. д.).

Если вы хотите добавить фильтры для других приложений, использующих ввод Logstash Forwarder, обязательно назовите файлы так, чтобы они сортировались между входной и выходной конфигурацией (т. е. между 01 и 30).

Перезапустите Logstash, чтобы наши изменения конфигурации вступили в силу:

sudo service logstash restart

Теперь, когда наш сервер Logstash готов, давайте перейдем к настройке Logstash Forwarder.

Настроить форвардер Logstash

Примечание. Выполните эти действия для каждого сервера, с которого вы хотите отправлять журналы на ваш сервер Logstash. Инструкции по установке Logstash Forwarder в дистрибутивах Linux на базе Debian (например, Ubuntu, Debian и т. д.) см. в разделе «Настройка Logstash Forwarder» варианта Ubuntu этого руководства.

Скопируйте SSL-сертификат и пакет пересылки Logstash

На Logstash Server скопируйте SSL-сертификат на сервер (замените своим логином):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp

Установите пакет пересылки Logstash

На сервере загрузите RPM Logstash Forwarder в свой домашний каталог:

cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm

Затем установите пакет пересылки Logstash:

sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm

Затем вам нужно будет установить сценарий инициализации Logstash Forwarder, чтобы он запускался при загрузке. Мы будем использовать сценарий инициализации, предоставленный logstashbook.com:

cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder

Сценарий инициализации зависит от файла с именем /etc/sysconfig/logstash-forwarder. Образец файла доступен для скачивания:

sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig

Откройте его для редактирования:

sudo vi /etc/sysconfig/logstash-forwarder

И измените значение LOGSTASH_FORWARDER_OPTIONS, чтобы оно выглядело следующим образом:

LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"

Сохранить и выйти.

Теперь скопируйте сертификат SSL в соответствующее место (/etc/pki/tls/certs):

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

Настроить форвардер Logstash

На сервере создайте и отредактируйте файл конфигурации Logstash Forwarder в формате JSON:

sudo vi /etc/logstash-forwarder

Теперь добавьте в файл следующие строки, заменив частный IP-адрес вашего сервера Logstash на logstash_server_private_IP:

{
  "network": {
    "servers": [ "logstash_server_private_IP:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "paths": [
        "/var/log/messages",
        "/var/log/secure"
       ],
      "fields": { "type": "syslog" }
    }
   ]
}

Сохранить и выйти. Это настраивает Logstash Forwarder для подключения к вашему серверу Logstash через порт 5000 (порт, для которого мы указали входные данные ранее) и использует сертификат SSL, который мы создали ранее. В разделе paths указывается, какие файлы журналов отправлять (здесь мы указываем messages и secure), а в разделе type указывает, что эти журналы относятся к типу syslog* (это тип, который ищет наш фильтр).

Обратите внимание, что здесь вы должны добавить дополнительные файлы/типы для настройки Logstash Forwarder для других файлов журналов в Logstash на порту 5000.

Теперь мы хотим добавить службу Logstash Forwarder с помощью chkconfig:

sudo chkconfig --add logstash-forwarder

Теперь запустите Logstash Forwarder, чтобы применить наши изменения:

sudo service logstash-forwarder start

Теперь Logstash Forwarder отправляет сообщения и auth.log на ваш сервер Logstash! Повторите этот процесс для всех остальных серверов, для которых вы хотите собирать журналы.

Подключиться к Кибане

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

В веб-браузере перейдите к полному доменному имени или общедоступному IP-адресу вашего сервера Logstash. Вы должны увидеть приветственную страницу Kibana.

Нажмите Панель управления Logstash, чтобы перейти к готовой панели управления. Вы должны увидеть гистограмму с событиями журнала и сообщениями журнала ниже (если вы не видите никаких событий или сообщений, один из ваших четырех компонентов Logstash настроен неправильно).

Здесь вы можете искать и просматривать свои журналы. Вы также можете настроить панель инструментов. Это пример того, как может выглядеть ваш экземпляр Kibana:

Попробуйте следующее:

  • Выполните поиск по слову \root, чтобы узнать, не пытается ли кто-нибудь войти на ваши серверы с правами root
  • Поиск определенного имени хоста
  • Измените временной интервал, выбрав область на гистограмме или в меню выше.
  • Нажимайте на сообщения под гистограммой, чтобы увидеть, как данные фильтруются.

В Kibana есть много других функций, таких как построение графиков и фильтрация, так что не стесняйтесь ковыряться!

Заключение

Теперь, когда ваши системные журналы централизованы через Logstash и вы можете визуализировать их с помощью Kibana, вы должны начать с централизации всех ваших важных журналов. Помните, что вы можете отправлять журналы практически любого типа в Logstash, но данные становятся еще более полезными, если они анализируются и структурируются с помощью grok.

Обратите внимание, что ваша панель инструментов Kibana доступна любому, кто имеет доступ к вашему серверу, поэтому вы захотите защитить ее с помощью чего-то вроде htaccess.