Данное руководство поможет установить Elasticsearch 1.7.3, Logstash 1.5.4 и Kibana 4.1.1 на сервер Ubuntu 14.04, а также настроить полученный программный стек ELK для сбора и визуализации системных логов.
Logstash – это открытый инструмент для сбора, обработки и централизованного хранения логов. Kibana – это веб-интерфейс для поиска и визуализации логов, индексированных с помощью Logstash. Оба эти инструмента основаны на поисковом движке Elasticsearch, который используется для хранения логов.
Централизованное логирование позволяет быстро выявить и устранить проблемы сервера или приложений.
Примечание: Logstash может собирать все типы логов, но данное руководство ограничивается системными логами.
В результате вы получите рабочий стек ELK для сбора системных логов нескольких серверов, который состоит из таких компонентов:
- Logstash: серверный компонент, который обрабатывает входящие логи.
- Elasticsearch: хранит все логи.
- Kibana: веб-интерфейс для визуализации логов, который проксируется с помощью Nginx.
- Filebeat: клиентский компонент, который передаёт логи в Logstash.
Примечание: Аналогичное руководство для CentOS можно найти здесь.
Требования
- Сервер Ubuntu 14.04 для стека ELK (чтобы настроить сервер, читайте это руководство).
- Объем CPU, RAM и хранилища сервера ELK зависит от объема логов, которые вы будете собирать. В данном руководстве используется сервер с такими характеристиками: RAM: 4GB, CPU: 2.
- Несколько дополнительных серверов, чьи логи вы сможете собрать.
Установка Java 8
Для работы Elasticsearch и Logstash нужно установить Java. Установите Oracle Java 8 (согласно рекомендациям Elasticsearch). В целом, OpenJDK тоже подойдёт.
Добавьте PPA-архив Oracle Java:
sudo add-apt-repository -y ppa:webupd8team/java
Обновите базу пакетов apt:
sudo apt-get update
Установите последнюю доступную версию Oracle Java 8 (на экране появится лицензия, которую нужно принять).
sudo apt-get -y install oracle-java8-installer
Установка Elasticsearch
Чтобы установить Elasticsearch, добавьте файл sources.list для этого пакета.
Чтобы добавить GPG-ключ Elasticsearch, введите:
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Если на этом этапе командная строка зависла, введите пароль текущего пользователя.
Чтобы создать sources.list для Elasticsearch, введите:
echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
Обновите индекс пакетов:
sudo apt-get update
Установите Elasticsearch:
sudo apt-get -y install elasticsearch
Отредактируйте конфигурационный файл Elasticsearch:
sudo vi /etc/elasticsearch/elasticsearch.yml
Ограничьте внешний доступ к 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
Пакет Kibana можно установить с помощью файла source list. Чтобы создать такой файл, введите:
echo 'deb http://packages.elastic.co/kibana/4.1/debian stable main' | sudo tee /etc/apt/sources.list.d/kibana.list
Обновите индекс пакетов:
sudo apt-get update
Чтобы установить Kibana, запустите команду:
sudo apt-get -y install kibana
Веб-интерфейс Kibana успешно установлен.
Откройте конфигурационный файл Kibana.
sudo vi /opt/kibana/config/kibana.yml
Найдите строку host и замените указанный в ней IP-адрес (по умолчанию 0.0.0.0) значением localhost:
host: "localhost"
Сохраните и закройте файл. Теперь интерфейс Kibana доступен только с локального хоста. Для внешнего доступа к нему будет использоваться обратный прокси-сервер Nginx.
Включите и запустите сервис Kibana:
sudo update-rc.d kibana defaults 96 9
sudo service kibana start
Установка Nginx
Теперь Kibana прослушивает localhost. Чтобы получить внешний доступ к сервису, настройте Nginx как обратный прокси-сервер.
Примечание: Если у вас уже есть установленный сервер Nginx, используйте этот экземпляр. Вам нужно только настроить доступ к Kibana для Nginx (измените значение host в файле /opt/kibana/config/kibana.yml, указав IP-адрес сервера Kibana). Также рекомендуется включить SSL/TLS.
Установите Nginx и Apache2-utils:
sudo apt-get install nginx apache2-utils
С помощью htpasswd создайте аккаунт администратора, у которого будет доступ к веб-интерфейсу Kibana (в руководстве он называется kibanaadmin, но вы можете использовать другое имя).
sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
Введите пароль пользователя. В дальнейшем с помощью этого пароля вы сможете получить доступ к интерфейсу.
Откройте виртуальный хост Nginx по умолчанию в текстовом редакторе.
sudo vi /etc/nginx/sites-available/default
Удалите его содержимое и вставьте следующий код. В строке server_name укажите имя своего сервера.
server {
listen 80;
server_name example.com;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Сохраните и закройте файл. Теперь Nginx будет передавать HTTP-трафик приложению Kibana, которое прослушивает localhost:5601. Nginx будет использовать ранее созданный файл htpasswd.users и запрашивать базовую аутентификацию.
Перезапустите Nginx, чтобы обновить настройки.
sudo service nginx restart
Установка Logstash
Пакет Logstash можно установить из того же репозитория, что и Elasticsearch. Чтобы создать source list для Logstash, введите:
echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list
Обновите индекс пакетов:
sudo apt-get update
Установите Logstash:
sudo apt-get install logstash
Генерирование SSL-сертификата
Чтобы сервис Logstash Forwarder передавал логи клиентов на сервер ELK, нужно создать SSL-сертификат и ключ. С помощью сертификата Logstash Forwarder сможет проверить подлинность сервера ELK. Создайте каталоги для хранения сертификата и закрытого ключа:
sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private
Теперь у вас есть два варианта: вы можете создать сертификат либо для IP-адреса, либо для доменного имени.
1: Сертификат для IP-адреса
Если у вас нет домена, вы можете указать в сертификате IP-адрес сертификата ELK. Для этого укажите адрес в поле subjectAltName. Откройте конфигурационный файл OpenSSL.
sudo vi /etc/ssl/openssl.cnf
Найдите в нём раздел [ v3_ca ] и добавьте в него строку:
subjectAltName = IP: logstash_server_private_ip
Примечание: Укажите IP своего сервера ELK.
Теперь вы можете сгенерировать 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: Сертификат для домена
Если у вас есть доменное имя, направленное на сервер ELK, вы можете указать это имя в сертификате 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 укажите доменное имя сервера ELK.
Файл logstash-forwarder.crt нужно скопировать на все серверы, которые отправляют логи в Logstash. После этого нужно завершить настройку Logstash.
Настройка Logstash
Конфигурационные файлы Logstash составляются в формате JSON и хранятся в /etc/logstash/conf.d. Конфигурации состоят из трех частей: входных данных (input), фильтров (filter) и выходных данных (output).
Создайте файл 01-lumberjack-input.conf для входных данных Logstash Forwarder.
sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf
Добавьте в него:
input {
lumberjack {
port => 5043
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
Сохраните и закройте файл. Он задаёт настройки входных данных lumberjack, которые будут прослушиваться на tcp-порте 5043 и использовать 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
Добавьте в файл:
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
Сохраните и закройте файл. С помощью этого файла Logstash будет хранить полученные данные в Elasticsearch. Такая настройка позволяет Logstash собирать данные, которые не соответствуют фильтру, но они не будут структурированы (неотфильтрованные логи Nginx или Apache будут отображаться как простые сообщения).
Чтобы обновить настройки, перезапустите Logstash.
sudo service logstash restart
Настройка Logstash Forwarder на клиентских серверах
Примечание: данный раздел нужно выполнить на всех клиентских серверах Debian, данные которых нужно передавать в Logstash на сервер ELK.
Копирование сертификата
На сервере ELK нужно скопировать SSL-сертификат и переместить его копию на клиентский сервер:
scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp
Примечание: Вместо client_server_private_address укажите внутренний адрес сервера.
Пройдя аутентификацию, убедитесь, что сертификат успешно скопирован.
Установка Logstash Forwarder
Добавьте на клиентский сервер source list для Logstash Forwarder.
echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list
Этот пакет использует тот же GPG-ключ, что и Elasticsearch. Чтобы установить его, введите:
wget -qO - https://packages.elastic.co/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 вручную.
Переместите сертификат в каталог /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.conf
Примечание: Конфигурационный файл Logstash Forwarder написан в формате YAML. Этот формат очень чувствителен к отступам и пробелам.
В раздел network добавьте следующие строки:
"servers": [ "logstash_server_private_address:5043" ],
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
"timeout": 15
Примечание: Вместо logstash_server_private_address укажите внутренний адрес сервера logstash.
В раздел files в квадратные скобки нужно добавить строки:
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}
Теперь Logstash Forwarder может взаимодействовать с Logstash через порт 5043 и использовать сертификат
SSL. Раздел paths определяет логи, которые нужно передавать в Logstash (в данном случае syslog и auth.log). Раздел type определяет тип логов (в данном случае syslog).
Перезапустите Logstash Forwarder:
sudo service logstash-forwarder restart
Подключение к Kibana
Настроив Logstash Forwarder на всех клиентских серверах, приступайте к настройке веб-интерфейса Kibana.
Откройте в браузере FQDN или IP-адрес сервера ELK. Введите учётные данные администратора (в данном случае он называется kibanaadmin). На экране появится страница, которая предложит выбрать шаблон индекса по умолчанию.
Configure an index pattern
В выпадающем меню выберите @timestamp и нажмите Create, чтобы создать первый шаблон индекса.
Затем выберите Discover в верхнем меню навигации. По умолчанию эта ссылка выведет данные логов за последние 15 минут. На экране появится гистограмма и сообщения логов.
С помощью интерфейса вы можете искать логи и отображать их. Также можно настроить дашборд.
Для примера попробуйте:
- Узнать, пытается ли кто-то попасть на сервер как пользователь root (для этого введите root в строку поиска).
- Найти конкретное имя хоста (для поиска используйте фоормат host: “hostname”).
- Изменить временные рамки, выбрав область на гистограмме или в верхнем меню.
- Отфильтровать данные с помощью сообщений под гистограммой (для этого нужно кликнуть по сообщению).
Kibana имеет много интересных и полезных функций: построение графиков, фильтрация и т.п.
Заключение
Вы настроили централизацию логов с помощью Elasticsearch и Logstash, кроме того, вы можете визуализировать их с помощью интерфейса Kibana.
Читайте также: