Установка стека ELK в CentOS 7

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

Читайте также:

Tags: , , , , , , , , ,

Добавить комментарий