Централизация логов с помощью Logstash и Kibana в CentOS 6

Данное руководство поможет установить Logstash 1.4.2 и Kibana 3 на сервер CentOS 6, а также настроить полученный программный стек для сбора и визуализации системных логов.

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

Читайте также: Установка стека ELK в CentOS 7

Централизованное логирование позволяет быстро выявить и устранить проблемы сервера или приложений.

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

В результате вы получите рабочий стек ELK для сбора системных логов нескольких серверов, который состоит из таких компонентов:

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

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

Требования

  • Сервер CentOS 6 (чтобы настроить сервер, читайте это руководство).
  • Объем CPU, RAM и хранилища сервера Logstash зависит от объема логов, которые вы будете собирать. В данном руководстве используется сервер с такими характеристиками: RAM: 2GB, CPU: 2.
  • Несколько дополнительных серверов, чьи логи вы сможете собрать.

Примечание: Аналогичное руководство для дистрибутивов на основе Ubuntu можно найти здесь.

Установка Java 7

Для работы Elasticsearch и Logstash нужно установить Java. Установите OpenJDK 7.

sudo yum -y install java-1.7.0-openjdk

Установка Elasticsearch

Примечание: С Logstash 1.4.2 рекомендуется использовать Elasticsearch 1.1.1.

Чтобы импортировать GPG-ключ Elasticsearch, введите:

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:

sudo yum -y install elasticsearch-1.1.1

Отредактируйте конфигурационный файл Elasticsearch:

sudo vi /etc/elasticsearch/elasticsearch.yml

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

script.disable_dynamic: true

Ограничьте внешний доступ к Elasticsearch, чтобы посторонние пользователи не смогли прочитать данные или отключить Elasticsearch с помощью HTTP API. Найдите строку network.host и измените её значение на localhost.

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

Установка 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

Распакуйте его:

tar xvf kibana-3.0.1.tar.gz

Откройте конфигурационный файл Kibana.

vi ~/kibana-3.0.1/config.js

Найдите строку elasticsearch и измените номер порта (по умолчанию 9200) на 80.

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

Это нужно для того, чтобы получить доступ к Kibana по http.

Сохраните и закройте файл.

Для обслуживания Kibana будет использоваться сервер Nginx. Создайте в корневом каталоге Nginx новый каталог:

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

Скопируйте в него все файлы Kibana:

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

Установка Nginx

Добавьте репозиторий Nginx с помощью команды:

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

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

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

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

Откройте файл:

vi nginx.conf

Найдите строку server_name и укажите в ней свой FQDN (если у вас нет домена, укажите localhost). В строке 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 можно получить по FQDN или IP-адресу сервера Logstash. Попробуйте открыть домен или IP в браузере. На экране должна появиться приветственная страница Kibana, на которой вы сможете просмотреть дашборды. Но пока что в Logstash нет никаких данных, потому инструменту Kibana нечего визуализировать.

Установка Logstash

Пакет Logstash и Elasticsearch используют один и тот же GPG-ключ. Создайте репозиторий для 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, введите:

sudo yum -y install logstash-1.4.2

Генерирование SSL-сертификата

Чтобы сервис Logstash Forwarder передавал логи клиентов на сервер ELK, нужно создать SSL-сертификат и ключ. С помощью сертификата Logstash Forwarder сможет проверить подлинность сервера Logstash.

У вас есть два варианта: вы можете создать сертификат либо для IP-адреса, либо для доменного имени.

1: Сертификат для IP-адреса

Если у вас нет домена, вы можете указать в сертификате IP-адрес сертификата Logstash. Для этого укажите адрес в поле subjectAltName. Откройте конфигурационный файл OpenSSL.

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

Найдите в нём раздел [ v3_ca ] и добавьте в него строку:

subjectAltName = IP: logstash_server_private_ip

Примечание: Укажите IP своего сервера Logstash.

Сохраните и закройте файл.

Теперь вы можете сгенерировать 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, вы можете указать это имя в сертификате SSL.

Чтобы сгенерировать сертификат, введите команду:

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_server_fqdn укажите доменное имя сервера Logstash.

Файл logstash-forwarder.crt нужно скопировать на все серверы, которые отправляют логи в Logstash. После этого нужно завершить настройку Logstash.

Настройка Logstash

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

Создайте файл 01-lumberjack-input.conf для входных данных lumberjack.

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

Добавьте в него конфигурацию:

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 {
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" ] }
}
}

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

Осталось создать только 30-lumberjack-output.conf:

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

Добавьте настройки выходных данных:

30-lumberjack-output.conf:
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}

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

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

Чтобы обновить настройки, перезапустите Logstash.

sudo service logstash restart

Настройка Logstash Forwarder на клиентских серверах

Примечание: Данный раздел нужно выполнить на всех клиентских серверах Debian, данные которых нужно передавать на сервер Logstash.

Копирование сертификата

На сервере Logstash нужно скопировать SSL-сертификат и переместить его копию на клиентский сервер:

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

Примечание: Вместо client_server_private_address укажите внутренний адрес сервера.

Пройдя аутентификацию, убедитесь, что сертификат успешно скопирован.

Установка Logstash Forwarder

Добавьте в домашний каталог на клиентском сервере RPM для Logstash Forwarder.

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

Установите пакет Logstash Forwarder:

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

Добавьте сценарий инициализации Logstash Forwarder в автозагрузку.

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"

Сохраните и закройте файл.

Скопируйте сертификат в каталог /etc/pki/tls/certs на клиенте.

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

Настройка Logstash Forwarder

Теперь нужно настроить взаимодействие Logstash Forwarder и Logstash.

Откройте конфигурационный файл Logstash Forwarder на клиентском сервере:

sudo vi /etc/logstash-forwarder

Добавьте следующие строки в файл, вместо logstash_server_private_IP укажите внутренний IP-адрес сервера Logstash:

{
"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 определяет логи, которые нужно передавать в Logstash (в данном случае syslog и auth.log). Раздел type определяет тип логов (в данном случае syslog; чтобы Logstash Forwarder собирал больше файлов, добавьте их настройки в этот раздел).

Добавьте сервис Logstash Forwarder:

sudo chkconfig --add logstash-forwarder

Запустите Logstash Forwarder:

sudo service logstash-forwarder start

Подключение к Kibana

Настроив Logstash Forwarder на всех клиентских серверах, приступайте к настройке веб-интерфейса Kibana.

Откройте в браузере FQDN или IP-адрес сервера Logstash. Введите учётные данные администратора. На экране появится приветственная страница Kibana.

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

С помощью интерфейса вы можете искать логи и отображать их. Также можно настроить дашборд.

Для примера попробуйте:

  • Узнать, пытается ли кто-то попасть на сервер как пользователь root (для этого введите root в строку поиска).
  • Найти конкретное имя хоста (для поиска используйте фоормат host: “hostname”).
  • Изменить временные рамки, выбрав область на гистограмме или в верхнем меню.
  • Отфильтровать данные с помощью сообщений под гистограммой (для этого нужно кликнуть по сообщению).

Kibana имеет много интересных и полезных функций: построение графиков, фильтрация и т.п.

Заключение

Вы настроили централизацию логов с помощью Elasticsearch и Logstash, кроме того, вы можете визуализировать их с помощью интерфейса Kibana.

Читайте также:

Tags: , , , , , , ,

Добавить комментарий