Данное руководство поможет установить Elasticsearch 2.2.x, Logstash 2.2.x и Kibana 4.4.x на сервер CentOS 7, а также настроить полученный программный стек для сбора и визуализации системных логов (с помощью Filebeat 1.1.x).
Logstash – это открытый инструмент для сбора, обработки и централизованного хранения логов. Kibana – это веб-интерфейс для поиска и визуализации логов, индексированных с помощью Logstash. Оба эти инструмента основаны на поисковом движке Elasticsearch, который используется для хранения логов.
Централизованное логирование позволяет быстро выявить и устранить проблемы сервера или приложений.
Примечание: Logstash может собирать все типы логов, но данное руководство ограничивается системными логами.
В результате вы получите рабочий стек ELK для сбора системных логов нескольких серверов, который состоит из таких компонентов:
- Logstash: серверный компонент, который обрабатывает входящие логи.
- Elasticsearch: хранит все логи.
- Kibana: веб-интерфейс для визуализации логов, который проксируется с помощью Nginx.
- Filebeat: клиентский компонент, который передаёт логи в Logstash.
Примечание: Аналогичное руководство для Ubuntu 14.04 можно найти здесь.
Требования
- Сервер CentOS 7 для стека ELK (чтобы настроить сервер, читайте это руководство).
- Объем CPU, RAM и хранилища сервера ELK зависит от объема логов, которые вы будете собирать. В данном руководстве используется сервер с такими характеристиками: RAM: 4GB, CPU: 2.
- Несколько дополнительных серверов, чьи логи вы сможете собрать.
Установка Java 8
Для работы Elasticsearch и Logstash нужно установить Java. Установите Oracle Java 8 (согласно рекомендациям Elasticsearch). В целом, OpenJDK тоже подойдёт.
Примечание: Следуя инструкциям, приведенным в данном разделе, вы принимаете условия лицензионного соглашения Oracle для Java SE.
Перейдите в домашний каталог и загрузите Oracle Java 8 JDK RPM:
cd ~
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"
Установите RPM:
sudo yum -y localinstall jdk-8u73-linux-x64.rpm
Примечание: Если вы устанавливаете другую версию пакета, откорректируйте номер версии в команде.
Пакет Java установлен в /usr/java/jdk1.8.0_73/jre/bin/java и ссылается на /usr/bin/java.
Удалите архив:
rm ~/jdk-8u*-linux-x64.rpm
Установка Elasticsearch
Чтобы установить Elasticsearch, добавьте файл репозиторий этого пакета.
Чтобы добавить GPG-ключ Elasticsearch, введите:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Создайте новый репозиторий для Elasticsearch с помощью этой команды:
echo '[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
' | sudo tee /etc/yum.repos.d/elasticsearch.repo
Установите Elasticsearch:
sudo yum -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 systemctl start elasticsearch
Чтобы настроить автозапуск Elasticsearch, введите:
sudo systemctl enable elasticsearch
Установка Kibana
Kibana и Elasticsearch используют один GPG-ключ.
Создайте репозиторий для Kibana:
sudo vi /etc/yum.repos.d/kibana.repo
Добавьте в него:
[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Сохраните и закройте файл. Установите Kibana:
sudo yum -y install kibana
Веб-интерфейс Kibana успешно установлен.
Откройте конфигурационный файл Kibana.
sudo vi /opt/kibana/config/kibana.yml
Найдите строку server.host и замените указанный в ней IP-адрес (по умолчанию 0.0.0.0) значением localhost:
server.host: "localhost"
Сохраните и закройте файл. Теперь интерфейс Kibana доступен только с локального хоста. Для внешнего доступа к нему будет использоваться обратный прокси-сервер Nginx.
Включите и запустите сервис Kibana:
sudo systemctl start kibana
sudo chkconfig kibana on
Установка Nginx
Теперь Kibana прослушивает localhost. Чтобы получить внешний доступ к сервису, настройте Nginx как обратный прокси-сервер.
Примечание: Если у вас уже есть установленный сервер Nginx, используйте этот экземпляр. Вам нужно только настроить доступ к Kibana для Nginx (измените значение host в файле /opt/kibana/config/kibana.yml, указав IP-адрес сервера Kibana). Также рекомендуется включить SSL/TLS.
Добавьте репозиторий EPEL:
sudo yum -y install epel-release
Установите Nginx и httpd-tools:
sudo yum -y install nginx httpd-tools
С помощью htpasswd создайте аккаунт администратора, у которого будет доступ к веб-интерфейсу Kibana (в руководстве он называется kibanaadmin, но вы можете использовать другое имя).
sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
Введите пароль пользователя. В дальнейшем с помощью этого пароля вы сможете получить доступ к интерфейсу.
Откройте конфигурационный файл Nginx по умолчанию в текстовом редакторе.
sudo vi /etc/nginx/nginx.conf
Удалите блок server (начинается с server {). После этого в конце файла окажутся строки:
include /etc/nginx/conf.d/*.conf;
}
Сохраните и закройте файл.
Создайте новый виртуальный хост Nginx:
sudo vi /etc/nginx/conf.d/kibana.conf
Вставьте в файл следующий код. В строке 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 systemctl start nginx
sudo systemctl enable nginx
Примечание: В руководстве подразумевается, что SELinux отключен. Если это не так, запустите следующую команду, иначе Kibana не сможет работать:
sudo setsebool -P httpd_can_network_connect 1
Установка Logstash
Пакет Logstash и Elasticsearch используют один и тот же GPG-ключ. Создайте репозиторий для Logstash:
sudo vi /etc/yum.repos.d/logstash.repo
Добавьте в файл:
[logstash-2.2]
name=logstash repository for 2.2 packages
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
Сохраните и закройте файл.
Чтобы установить Logstash, введите:
sudo yum -y install logstash
Генерирование SSL-сертификата
Чтобы сервис Filebeat передавал логи клиентов на сервер ELK, нужно создать SSL-сертификат и ключ. С помощью сертификата Filebeat сможет проверить подлинность сервера ELK. Создайте каталоги для хранения сертификата и закрытого ключа:
sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private
Теперь у вас есть два варианта: вы можете создать сертификат либо для IP-адреса, либо для доменного имени.
1: Сертификат для IP-адреса
Если у вас нет домена, вы можете указать в сертификате IP-адрес сертификата ELK. Для этого укажите адрес в поле subjectAltName. Откройте конфигурационный файл OpenSSL.
sudo vi /etc/pki/tls/openssl.cnf
Найдите в нём раздел [ v3_ca ] и добавьте в него строку:
subjectAltName = IP: ELK_server_private_IP
Примечание: укажите IP своего сервера ELK.
Теперь вы можете сгенерировать 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: Сертификат для домена
Если у вас есть доменное имя, направленное на сервер ELK, вы можете указать это имя в сертификате SSL.
Чтобы сгенерировать сертификат, введите команды:
cd /etc/pki/tls
sudo openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
Примечание: Вместо ELK_server_fqdn укажите доменное имя сервера ELK.
Файл logstash-forwarder.crt нужно скопировать на все серверы, которые отправляют логи в Logstash. После этого нужно завершить настройку Logstash.
Настройка Logstash
Конфигурационные файлы Logstash составляются в формате JSON и хранятся в /etc/logstash/conf.d. Конфигурации состоят из трех частей: входных данных (input), фильтров (filter) и выходных данных (output).
Создайте файл 02-beats-input.conf для входных данных filebeat.
sudo vi /etc/logstash/conf.d/02-beats-input.conf
Добавьте в него конфигурацию:
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
Сохраните и закройте файл. Он задаёт настройки входных данных beats, которые будут прослушиваться на tcp-порте 5044 и использовать SSL-сертификат и ключ.
Теперь создайте файл 10-syslog-filter.conf, в который нужно поместить фильтры для сообщений системных логов.
sudo vi /etc/logstash/conf.d/10-syslog-filter.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" ]
}
}
}
Сохраните и закройте файл. Этот фильтр собирает логи, отмеченные приложением Filebeat как syslog, а затем использует grok, чтобы обработать входящие логи и структурировать их.
Осталось создать только 30-elasticsearch-output.conf:
sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
Добавьте настройки выходных данных:
output {
elasticsearch {
hosts => ["localhost:9200"]
sniffing => true
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
Сохраните и закройте файл. С помощью этого файла Logstash будет хранить полученные данные в Elasticsearch (который запущен на localhost:9200) в индексе filebeat.
Проверьте конфигурации Logstash:
sudo service logstash configtest
Если ошибок нет, команда вернёт:
Configuration OK
Если команда обнаружила ошибки, исправьте их и снова запустите команду.
Чтобы обновить настройки, перезапустите Logstash.
sudo systemctl restart logstash
sudo chkconfig logstash on
Загрузка дашборда Kibana
Elastic предоставляет несколько образцов дашбордов Kibana и шаблонов индексов Beats. Загрузите дашборды, чтобы использовать их с индексом Filebeat.
Загрузите архив дашбордов в домашний каталог:
cd ~
curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip
Установите пакет unzip:
sudo yum -y install unzip
Распакуйте архив:
unzip beats-dashboards-*.zip
Загрузите образец дашборда, визуализацию и шаблоны индексов Beats в Elasticsearch.
cd beats-dashboards-*
./load.sh
Только что вы загрузили такие шаблоны:
- [packetbeat-]YYYY.MM.DD
- [topbeat-]YYYY.MM.DD
- [filebeat-]YYYY.MM.DD
- [winlogbeat-]YYYY.MM.DD
Загрузка шаблона индексов Filebeat в Elasticsearch
Чтобы приложение Filebeat могло передавать логи в Elasticsearch, нужно загрузить шаблон индексов Filebeat. Это поможет Elasticsearch анализировать входящие данные Filebeat.
Загрузите шаблон Filebeat в домашний каталог:
cd ~
curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
Затем загрузите шаблон:
curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json
Если все прошло успешно, на экране появится:
{
"acknowledged" : true
}
Теперь сервер ELK может читать данные Filebeat. Настройте Filebeat на всех клиентах.
Настройка Filebeat на клиентских серверах
Примечание: данный раздел нужно выполнить на всех клиентских серверах CentOS or RHEL, данные которых нужно передавать в Logstash на сервер ELK.
Копирование сертификата
На сервере ELK нужно скопировать SSL-сертификат и переместить его копию на клиентский сервер:
scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp
Примечание: Вместо client_server_private_address укажите внутренний адрес сервера.
Пройдя аутентификацию, убедитесь, что сертификат успешно скопирован. Переместите сертификат в каталог /etc/pki/tls/certs на клиенте.
sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
Установка Filebeat
Добавьте на клиентский сервер GPG-ключ Elasticsearch.
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Создайте новый репозиторий для Filebeat:
sudo vi /etc/yum.repos.d/elastic-beats.repo
Добавьте в него такой код:
[beats]
name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1
Сохраните и закройте файл. Установите пакет Filebeat
sudo yum -y install filebeat
Настройка Filebeat
Теперь нужно настроить взаимодействие Filebeat и Logstash.
Примечание: В результате конфигурационный файл Filebeat будет выглядеть так.
Откройте конфигурационный файл Filebeat на клиентском сервере:
sudo vi /etc/filebeat/filebeat.yml
Примечание: Конфигурационный файл Filebeat написан в формате YAML. Этот формат очень чувствителен к отступам и пробелам.
В начале файла вы найдёте раздел prospectors, который определяет, какие логи нужно передавать и как их обрабатывать. Каждая запись лога начинается с дефиса.
Добавьте в этот раздел записи для syslog и auth.log. В paths закомментируйте /var/log/*.log (теперь Filebeat не будет отправлять все файлы с расширением .log).
...
paths:
- /var/log/secure
- /var/log/messages
# - /var/log/*.log
...
Найдите строку document_type:, раскомментируйте её и задайте значение syslog:
...
document_type: syslog
...
Теперь Logstash будет собирать только файлы типа syslog.
При желании вы можете добавить другие записи логов в раздел prospector.
Найдите раздел output и строку elasticsearch:, которая настраивает выходные данные Elasticsearch. Удалите ил иполностью закомментируйте этот раздел (до строки logstash:).
Затем найдите раздел настроек для выходных данных Logstash (начинается со строки #logstash:) и раскомментируйте его, удалив символ # в начале строки. Также нужно раскомментировать строку hosts: [“localhost:5044”].
### Logstash as output
logstash:
# The Logstash hosts
hosts: ["ELK_server_private_IP:5044"]
Примечание: Вместо ELK_server_private_IP укажите закрытый IP-адрес сервера ELK.
Теперь Filebeat может подключиться к Logstash на сервере ELK через порт 5044.
После строки hosts добавьте:
bulk_max_size: 1024
Затем найдите раздел tls и раскомментируйте его. Также нужно раскомментировать строку certificate_authorities и изменить её значение на [“/etc/pki/tls/certs/logstash-forwarder.crt”].
tls:
# List of root certificates for HTTPS server verifications
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
Теперь Filebeat может использовать SSL-сертификат.
Сохраните и закройте файл.
Запустите и включите сервис Filebeat:
sudo systemctl start filebeat
sudo systemctl enable filebeat
Примечание: Сравните получившиеся конфигурации с этим образцом.
Теперь Filebeat собирает и передаёт syslog и auth.log в Logstash.
Тестирование установки Filebeat
Если установка стека ELK прошла успешно, Filebeat должен собирать логи клиентов и передавать их на сервер ELK. Logstash будет загружать данные Filebeat в Elasticsearchс индексом filebeat-YYYY.MM.DD.
Перейдите на сервер ELK и убедитесь, что Elasticsearch получает данные, запросив индекс Filebeat:
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
Команда вернёт:
...
{
"_index" : "filebeat-2016.01.29",
"_type" : "log",
"_id" : "AVKO98yuaHvsHQLa53HE",
"_score" : 1.0,
"_source":{"message":"Feb 3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"}
}
...
Если команда не вернула ничего, то Elasticsearch не загружает и не индексирует данные. Проверьте настройку на наличие ошибок.
Подключение к Kibana
Настроив Filebeat на всех клиентских серверах, приступайте к настройке веб-интерфейса Kibana.
Откройте в браузере FQDN или IP-адрес сервера ELK. Введите учётные данные администратора (в данном случае он называется kibanaadmin). На экране появится страница, которая предложит выбрать шаблон индекса по умолчанию.
Configure an index pattern
В списке слева выберите filebeat-YYYY.MM.DD и нажмите на зелёную кнопку со звёздочкой.
Затем выберите Discover в верхнем меню навигации. По умолчанию эта ссылка выведет данные логов за последние 15 минут. На экране появится гистограмма и сообщения логов.
С помощью интерфейса вы можете искать логи и отображать их. Также можно настроить дашборд.
Для примера попробуйте:
- Узнать, пытается ли кто-то попасть на сервер как пользователь root (для этого введите root в строку поиска).
- Найти конкретное имя хоста (для поиска используйте фоормат host: “hostname”).
- Изменить временные рамки, выбрав область на гистограмме или в верхнем меню.
- Отфильтровать данные с помощью сообщений под гистограммой (для этого нужно кликнуть по сообщению).
Kibana имеет много интересных и полезных функций: построение графиков, фильтрация и т.п.
Заключение
Вы настроили централизацию логов с помощью Elasticsearch и Logstash, кроме того, вы можете визуализировать их с помощью интерфейса Kibana.
Читайте также: