Установка Elasticsearch 1.7, Logstash 1.5 и Kibana 4.1 в CentOS 7
Centos, Java, RHEL | Комментировать запись
Данное руководство поможет установить Elasticsearch 1.7.3, Logstash 1.5.4 и Kibana 4.1.1 на сервер CentOS 7, а также настроить полученный программный стек ELK для сбора и визуализации системных логов.
Logstash – это открытый инструмент для сбора, обработки и централизованного хранения логов. Kibana – это веб-интерфейс для поиска и визуализации логов, индексированных с помощью Logstash. Оба эти инструмента основаны на поисковом движке Elasticsearch, который используется для хранения логов.
Централизованное логирование позволяет быстро выявить и устранить проблемы сервера или приложений.
Примечание: Logstash может собирать все типы логов, но данное руководство ограничивается системными логами.
В результате вы получите рабочий стек ELK для сбора системных логов нескольких серверов, который состоит из таких компонентов:
- Logstash: серверный компонент, который обрабатывает входящие логи.
- Elasticsearch: хранит все логи.
- Kibana: веб-интерфейс для визуализации логов, который проксируется с помощью Nginx.
- Filebeat: клиентский компонент, который передаёт логи в Logstash.
Примечание: Аналогичное руководство для Ubuntu можно найти здесь.
Требования
- Сервер 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/8u65-b17/jdk-8u65-linux-x64.rpm"
Установите RPM:
sudo yum localinstall jdk-8u65-linux-x64.rpm
Примечание: Если вы устанавливаете другую версию пакета, откорректируйте номер версии в команде.
Пакет Java установлен в //usr/java/jdk1.8.0_65/jre/bin/java и ссылается на /usr/bin/java.
Удалите архив:
rm ~/jdk-8u65-linux-x64.rpm
Установка Elasticsearch
Чтобы установить Elasticsearch, добавьте файл репозиторий этого пакета.
Чтобы добавить GPG-ключ Elasticsearch, введите:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Создайте новый репозиторий для Elasticsearch:
sudo vi /etc/yum.repos.d/elasticsearch.repo
Добавьте в него:
[elasticsearch-1.7]
name=Elasticsearch repository for 1.7.x packages
baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Сохраните и закройте файл.
Установите 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.1]
name=Kibana repository for 4.1.x packages
baseurl=http://packages.elastic.co/kibana/4.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Сохраните и закройте файл.
Установите Kibana:
sudo yum -y install kibana
Откройте конфигурационный файл Kibana.
sudo vi /opt/kibana/config/kibana.yml
Найдите строку host и замените указанный в ней IP-адрес (по умолчанию 0.0.0.0) значением localhost:
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-1.5]
name=logstash repository for 1.5.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.5/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
Сохраните и закройте файл.
Установите Logstash 1.5:
sudo yum -y install logstash
Генерирование SSL-сертификата
Чтобы сервис Logstash Forwarder передавал логи клиентов на сервер ELK, нужно создать SSL-сертификат и ключ. С помощью сертификата Logstash Forwarder сможет проверить подлинность сервера ELK.
У вас есть два варианта: вы можете создать сертификат либо для IP-адреса, либо для доменного имени.
1: Сертификат для IP-адреса
Если у вас нет домена, вы можете указать в сертификате IP-адрес сертификата ELK. Для этого укажите адрес в поле subjectAltName. Откройте конфигурационный файл OpenSSL.
sudo vi /etc/pki/tls/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/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=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 на клиентских серверах
Примечание: Этот раздел нужно выполнить на всех клиентских серверах CentOS или RHEL, данные которых нужно передавать в Logstash на сервер ELK.
Копирование сертификата
На сервере ELK нужно скопировать SSL-сертификат и переместить его копию на клиентский сервер:
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
Примечание: Вместо client_server_private_address укажите внутренний адрес сервера.
Пройдя аутентификацию, убедитесь, что сертификат успешно скопирован.
Установка Logstash Forwarder
Добавьте на клиентский сервер GPG-ключ Elasticsearch.
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Создайте репозиторий для Logstash Forwarder.
sudo vi /etc/yum.repos.d/logstash-forwarder.repo
В файл вставьте следующие строки:
[logstash-forwarder]
name=logstash-forwarder repository
baseurl=http://packages.elastic.co/logstashforwarder/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
Сохраните и закройте файл.
Установите пакет Logstash Forwarder:
sudo yum -y install logstash-forwarder
Скопируйте SSL-сертификат сервера Logstash в /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 написан в формате JSON.
В раздел network добавьте следующие строки:
"servers": [ "logstash_server_private_IP:5043" ],
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
"timeout": 15
Примечание: Вместо logstash_server_private_address укажите внутренний адрес сервера logstash.
В раздел files в квадратные скобки нужно добавить строки:
{
"paths": [
"/var/log/messages",
"/var/log/secure"
],
"fields": { "type": "syslog" }
}
Сохраните и закройте файл.
Теперь Logstash Forwarder может взаимодействовать с Logstash через порт 5043 и использовать сертификат
SSL. Раздел paths определяет логи, которые нужно передавать в Logstash (в данном случае messages и secure). Раздел type определяет тип логов (в данном случае syslog).
Запустите и включите сервис Logstash Forwarder:
sudo systemctl start logstash-forwarder
sudo chkconfig logstash-forwarder on
Подключение к Kibana
Настроив Logstash Forwarder на всех клиентских серверах, приступайте к настройке веб-интерфейса Kibana.
Откройте в браузере FQDN или IP-адрес сервера ELK. Введите учётные данные администратора (в данном случае он называется kibanaadmin). На экране появится страница, которая предложит выбрать шаблон индекса по умолчанию.
Configure an index pattern
В выпадающем меню выберите @timestamp и нажмите Create, чтобы создать первый шаблон индекса.
Затем выберите Discover в верхнем меню навигации. По умолчанию эта ссылка выведет данные логов за последние 15 минут. На экране появится гистограмма и сообщения логов.
С помощью интерфейса вы можете искать логи и отображать их. Также можно настроить дашборд.
Для примера попробуйте:
- Узнать, пытается ли кто-то попасть на сервер как пользователь root (для этого введите root в строку поиска).
- Найти конкретное имя хоста (для поиска используйте формат host: “hostname”).
- Изменить временные рамки, выбрав область на гистограмме или в верхнем меню.
- Отфильтровать данные с помощью сообщений под гистограммой (для этого нужно кликнуть по сообщению).
Kibana имеет много интересных и полезных функций: построение графиков, фильтрация и т.п.
Заключение
Вы настроили централизацию логов с помощью Elasticsearch и Logstash, кроме того, вы можете визуализировать их с помощью интерфейса Kibana.
Читайте также:
- Открытый поиск по логам и визуализация при помощи Elasticsearch, Fluentd и Kibana
- Сбор метрик инфраструктуры с помощью Topbeat и ELK