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