Установка стека ELK в Ubuntu 16.04

Данное руководство поможет установить Elasticsearch 2.3.x, Logstash 2.3.x и Kibana 4.5.x на сервер Ubuntu 16.04, а также настроить полученный программный стек для сбора и визуализации системных логов (с помощью Filebeat 1.2.x).

Logstash – это открытый инструмент для сбора, обработки и централизованного хранения логов. Kibana – это веб-интерфейс для поиска и визуализации логов, индексированных с помощью Logstash. Оба эти инструмента основаны на поисковом движке Elasticsearch, который используется для хранения логов.

Централизованное логирование позволяет быстро выявить и устранить проблемы сервера или приложений.

Примечание: Logstash может собирать все типы логов, но данное руководство ограничивается системными логами.

В результате вы получите рабочий стек ELK для сбора системных логов нескольких серверов, который состоит из таких компонентов:

  • Logstash: серверный компонент, который обрабатывает входящие логи.
  • Elasticsearch: хранит все логи.
  • Kibana: веб-интерфейс для визуализации логов, который проксируется с помощью Nginx.
  • Filebeat: клиентский компонент, который передаёт логи в Logstash.

Требования

  • Сервер Ubuntu 16.04 для стека ELK (чтобы настроить сервер, читайте это руководство).
  • Объем CPU, RAM и хранилища сервера ELK зависит от объема логов, которые вы будете собирать. В данном руководстве используется сервер с такими характеристиками: RAM: 4GB, CPU: 2.
  • Несколько дополнительных серверов, чьи логи вы сможете собрать.

Примечание: Аналогичное руководство для CentOS можно найти здесь.

Установка 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/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

Обновите индекс пакетов:

sudo apt-get update

Установите Elasticsearch:

sudo apt-get -y install elasticsearch

Отредактируйте конфигурационный файл Elasticsearch:

sudo nano /etc/elasticsearch/elasticsearch.yml

Ограничьте  внешний доступ к Elasticsearch (порт 9200), чтобы посторонние пользователи не смогли прочитать данные или отключить Elasticsearch с помощью HTTP API. Найдите строку network.host и измените её значение на localhost.

network.host: localhost

Сохраните и закройте elasticsearch.yml. Запустите Elasticsearch:

sudo systemctl restart elasticsearch

Чтобы настроить автозапуск Elasticsearch, введите:

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch

Установка Kibana

Пакет Kibana можно установить с помощью файла source list. Чтобы создать такой файл, введите:

echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list

Обновите индекс пакетов:

sudo apt-get update

Чтобы установить Kibana, запустите команду:

sudo apt-get -y install kibana

Веб-интерфейс Kibana успешно установлен.

Откройте конфигурационный файл Kibana.

sudo nano /opt/kibana/config/kibana.yml

Найдите строку server.host и замените указанный в ней IP-адрес (по умолчанию 0.0.0.0) значением localhost:

server.host: "localhost"

Сохраните и закройте файл. Теперь интерфейс Kibana доступен только с локального хоста. Для внешнего доступа к нему будет использоваться обратный прокси-сервер Nginx.

Включите и запустите сервис Kibana:

sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana

Установка Nginx

Теперь Kibana прослушивает localhost. Чтобы получить внешний доступ к сервису, настройте Nginx как обратный прокси-сервер.

Примечание: Если у вас уже есть установленный сервер Nginx, используйте этот экземпляр. Вам нужно только настроить доступ к Kibana для Nginx (измените значение host в файле /opt/kibana/config/kibana.yml, указав IP-адрес сервера Kibana). Также рекомендуется включить SSL/TLS.

Установите Nginx:

sudo apt-get -y install nginx

С помощью openssl создайте аккаунт администратора, у которого будет доступ к веб-интерфейсу Kibana (в руководстве он называется kibanaadmin, но вы можете использовать другое имя).

sudo -v
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Введите пароль пользователя. В дальнейшем с помощью этого пароля вы сможете получить доступ к интерфейсу.

Откройте виртуальный хост Nginx по умолчанию в текстовом редакторе.

sudo nano /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 nginx -t
sudo systemctl restart nginx

Если вы следовали руководству по начальной настройке сервера, вы включили брандмауэр UFW; теперь он блокирует соединения Nginx. Разблокируйте их:

sudo ufw allow 'Nginx Full'

Теперь веб-интерфейс Kibana доступен по FQDN или внешнему IP-адресу сервера ELK.

Установка Logstash

Пакет Logstash можно установить из того же репозитория, что и Elasticsearch. Чтобы создать source list для Logstash, введите:

echo "deb http://packages.elastic.co/logstash/2.3/debian stable main" | sudo tee -a /etc/apt/sources.list

Обновите индекс пакетов:

sudo apt-get update

Установите Logstash:

sudo apt-get 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 nano /etc/ssl/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/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=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 nano /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-сертификат и ключ.

Если вы включили UFW, он будет блокировать этот порт. Измените настройки брандмауэра, чтобы разблокировать порт 5044:

sudo ufw allow 5044

Теперь создайте файл 10-syslog-filter.conf, в который нужно поместить фильтры для сообщений системных логов.

sudo nano /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 nano /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 /opt/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/

Если ошибок нет, команда вернёт:

Configuration OK

Если команда обнаружила ошибки, исправьте их и снова запустите команду.

Чтобы обновить настройки, перезапустите Logstash.

sudo systemctl restart logstash
sudo systemctl enable logstash

Загрузка дашборда Kibana

Elastic предоставляет несколько образцов дашбордов Kibana и шаблонов индексов Beats. Загрузите дашборды, чтобы использовать их с индексом Filebeat.

Загрузите архив дашбордов в домашний каталог:

cd ~
curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.2.2.zip

Установите пакет unzip:

sudo apt-get -y install unzip

Распакуйте архив:

unzip beats-dashboards-*.zip

Загрузите образец дашборда, визуализацию и шаблоны индексов Beats в Elasticsearch.

cd beats-dashboards-*
./load.sh

Только что вы загрузили такие шаблоны:

  • packetbeat-*
  • topbeat-*
  • filebeat-*
  • winlogbeat-*

Загрузка шаблона индексов 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 на клиентских серверах

Примечание: данный раздел нужно выполнить на всех клиентских серверах Debian, данные которых нужно передавать в 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

Добавьте на клиентский сервер source list для Beats.

echo "deb https://packages.elastic.co/beats/apt stable main" |  sudo tee -a /etc/apt/sources.list.d/beats.list

Этот пакет использует тот же GPG-ключ, что и Elasticsearch. Чтобы установить его, введите:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Установите пакет Filebeat.

sudo apt-get update
sudo apt-get install filebeat

Настройка Filebeat

Теперь нужно настроить взаимодействие Filebeat и Logstash.

Примечание: В результате конфигурационный файл Filebeat будет выглядеть так.

Откройте конфигурационный файл Filebeat на клиентском сервере:

sudo nano /etc/filebeat/filebeat.yml

Примечание: Конфигурационный файл Filebeat написан в формате YAML. Этот формат очень чувствителен к отступам и пробелам.

В начале файла вы найдёте раздел prospectors, который определяет, какие логи нужно передавать и как их обрабатывать. Каждая запись лога начинается с дефиса.

Добавьте в этот раздел записи для syslog и auth.log. В paths закомментируйте /var/log/*.log (теперь Filebeat не будет отправлять все файлы с расширением .log).

...
paths:
- /var/log/auth.log
- /var/log/syslog
# - /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 добавьте:

### Logstash as output
logstash:
# The Logstash hosts
hosts: ["ELK_server_private_IP:5044"] 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 restart filebeat
sudo systemctl enable filebeat

Примечание: Сравните получившиеся конфигурации с этим образцом.

Теперь Filebeat собирает и передаёт syslog и auth.log в Logstash.

Тестирование установки Filebeat

Если установка стека ELK прошла успешно,  Filebeat должен собирать логи клиентов и передавать их на сервер ELK. Logstash будет загружать данные Filebeat в Elasticsearch с помощью добавленных ранее индексов.

Перейдите на сервер 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-* и нажмите на зелёную кнопку со звёздочкой (Set as default index).

Затем выберите Discover в верхнем меню навигации. По умолчанию эта ссылка выведет данные логов за последние 15 минут. На экране появится гистограмма и сообщения логов.

С помощью интерфейса вы можете искать логи и отображать их. Также можно настроить дашборд.

Для примера попробуйте:

  • Узнать, пытается ли кто-то попасть на сервер как пользователь root (для этого введите root в строку поиска).
  • Найти конкретное имя хоста (для поиска используйте фоормат host: “hostname”).
  • Изменить временные рамки, выбрав область на гистограмме или в верхнем меню.
  • Отфильтровать данные с помощью сообщений под гистограммой (для этого нужно кликнуть по сообщению).

Kibana имеет много интересных и полезных функций: построение графиков, фильтрация и т.п.

Заключение

Вы настроили централизацию логов с помощью Elasticsearch и Logstash, кроме того, вы можете визуализировать их с помощью интерфейса Kibana.

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

Tags: , , , , , , , ,

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