Данное руководство поможет установить 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.