Установка стека ELK в Ubuntu 14.04
Debian, Java, Ubuntu | Комментировать запись
Данное руководство поможет установить Elasticsearch 2.2.x, Logstash 2.2.x и Kibana 4.4.x на сервер Ubuntu 14.04, а также настроить полученный программный стек для сбора и визуализации системных логов (с помощью Filebeat 1.1.x).
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/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 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.4/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.4.x.list
Обновите индекс пакетов:
sudo apt-get update
Чтобы установить Kibana, запустите команду:
sudo apt-get -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 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.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash-2.2.x.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 vi /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 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 service logstash restart
sudo update-rc.d logstash defaults 96 9
Загрузка дашборда Kibana
Elastic предоставляет несколько образцов дашбордов Kibana и шаблонов индексов Beats. Загрузите дашборды, чтобы использовать их с индексом Filebeat.
Загрузите архив дашбордов в домашний каталог:
cd ~
curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip
Установите пакет unzip:
sudo apt-get -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 на клиентских серверах
Примечание: данный раздел нужно выполнить на всех клиентских серверах 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 vi /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 добавьте:
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 service filebeat restart
sudo update-rc.d filebeat defaults 95 10
Примечание: Сравните получившиеся конфигурации с этим образцом.
Теперь 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.
Читайте также:
- Открытый поиск по логам и визуализация при помощи Elasticsearch, Fluentd и Kibana
- Сбор метрик инфраструктуры с помощью Topbeat и ELK в Ubuntu 14.04