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

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

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

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

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

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

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

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

Требования

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

Примечание: Аналогичное руководство для дистрибутивов на основе Red Hat (RHEL, CentOS, и т.п.) можно найти здесь.

Установка Java 7

Для работы Elasticsearch и Logstash нужно установить Java. Установите Oracle Java 7 (согласно рекомендациям Elasticsearch). В целом, OpenJDK тоже подойдёт.

Добавьте PPA-архив Oracle Java:

sudo add-apt-repository -y ppa:webupd8team/java

Обновите индекс пакетов apt:

sudo apt-get update

Установите последнюю доступную версию Oracle Java 7 (на экране появится лицензия, которую нужно принять).

sudo apt-get -y install oracle-java7-installer

Установка Elasticsearch

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

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

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

Чтобы создать sources.list для Elasticsearch, введите:

echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debianstable main' | sudo tee /etc/apt/sources.list.d/elasticsearch.list

Обновите индекс пакетов:

sudo apt-get update

Установите Elasticsearch:

sudo apt-get -y install elasticsearch=1.1.1

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

sudo vi /etc/elasticsearch/elasticsearch.yml

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

script.disable_dynamic: true

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

network.host: localhost

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

Запустите Elasticsearch:

sudo service elasticsearch restart

Добавьте Elasticsearch в автозагрузку:

sudo update-rc.d elasticsearch defaults 95 10

Установка Kibana

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

Загрузите архив Kibana в домашний каталог:

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

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

tar xvf kibana-3.0.1.tar.gz

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

sudo vi ~/kibana-3.0.1/config.js

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

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

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

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

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

sudo mkdir -p /var/www/kibana3

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

sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/

Установка Nginx

Установите Nginx с помощью команды:

sudo apt-get install nginx

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

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

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

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

vi nginx.conf

Найдите строку server_name и укажите в ней свой FQDN (если у вас нет домена, укажите localhost). В строке root укажите путь к установке Kibana.

server_name FQDN;
root /var/www/kibana3;

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

Скопируйте его в стандартный виртуальный хост Nginx:

sudo cp nginx.conf /etc/nginx/sites-available/default

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

sudo apt-get install apache2-utils

Сгенерируйте логин для работы в Kibana (вместо условных данных укажите свои данные):

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

Введите пароль и подтвердите его.

На только что созданный файл htpasswd уже есть ссылка в конфигурационном файле Nginx.

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

sudo service nginx restart

Теперь доступ к Kibana можно получить по FQDN или IP-адресу сервера Logstash. Попробуйте открыть домен или IP в браузере. На экране должна появиться приветственная страница Kibana, на которой вы сможете просмотреть дашборды. Но пока что в Logstash нет никаких данных, потому инструменту Kibana нечего визуализировать.

Установка Logstash

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

echo 'deb http://packages.elasticsearch.org/logstash/1.4/debianstable main' | sudo tee /etc/apt/sources.list.d/logstash.list

Обновите индекс пакетов:

sudo apt-get update

Установите Logstash:

sudo apt-get install logstash=1.4.2-1-2c0f5a1

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

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

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

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

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

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

sudo vi /etc/ssl/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/ssl/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

Добавьте на клиентский сервер source list для Logstash Forwarder.

echo 'deb http://packages.elasticsearch.org/logstashforwarder/debianstable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

Этот пакет использует тот же GPG-ключ, что и Elasticsearch. Чтобы установить его, введите:

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

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

sudo apt-get update
sudo apt-get install logstash-forwarder

Примечание: Если на 32-битном сервере Ubuntu при установке Logstash Forwarder возникла ошибка «Unable to locate package logstash-forwarder», установите Logstash Forwarder вручную.

wget https://assets.digitalocean.com/articles/logstash/logstash-forwarder_0.3.1_i386.deb
sudo dpkg -i logstash-forwarder_0.3.1_i386.deb

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

cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo chmod +x logstash-forwarder
sudo update-rc.d logstash-forwarder defaults

Переместите сертификат в каталог /etc/pki/tls/certs на клиенте.

sudo mkdir -p /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/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}
]
}

Сохраните и закройте файл. Теперь Logstash Forwarder может взаимодействовать с Logstash через порт 5000 и использовать сертификат SSL. Раздел paths определяет логи, которые нужно передавать в Logstash (в данном случае syslog и auth.log). Раздел type определяет тип логов (в данном случае syslog; чтобы Logstash Forwarder собирал больше файлов, добавьте их настройки в этот раздел).

Перезапустите Logstash Forwarder:

sudo service logstash-forwarder restart

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

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

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

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

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

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

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

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

Заключение

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