Поиск по сайту:

Как установить Elasticsearch, Logstash и Kibana (стек ELK) на CentOS/RHEL 7


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

Раньше эту задачу приходилось выполнять в основном вручную, причем каждый тип журнала обрабатывался отдельно. К счастью, комбинация Elasticsearch, Logstash и Kibana на стороне сервера, а также Filebeat на стороне клиента сторона, делает эту некогда трудную задачу похожей на сегодняшнюю прогулку в парке.

Первые три компонента образуют так называемый стек ELK, основная цель которого — одновременный сбор журналов с нескольких серверов (также известный как централизованное ведение журналов).

Рекомендуется к прочтению: 4 хороших инструмента мониторинга и управления журналами с открытым исходным кодом для Linux

Встроенный веб-интерфейс на основе Java позволяет быстро просматривать журналы для упрощения сравнения и устранения неполадок. Эти клиентские журналы отправляются на центральный сервер с помощью Filebeat, который можно назвать агентом доставки журналов.

Давайте посмотрим, как все эти части сочетаются друг с другом. Наша тестовая среда будет состоять из следующих машин:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Обратите внимание, что приведенные здесь значения RAM не являются строгими обязательными условиями, а являются рекомендуемыми значениями для успешной реализации стека ELK на центральном сервере. Уменьшение ОЗУ на клиентах не будет иметь большого значения, если оно вообще будет иметь значение.

Установка стека ELK на сервер

Начнем с установки стека ELK на сервер вместе с кратким объяснением того, что делает каждый компонент:

  1. Elasticsearch хранит журналы, отправляемые клиентами.
  2. Logstash обрабатывает эти журналы.
  3. Kibana предоставляет веб-интерфейс, который поможет нам проверять и анализировать журналы.

Установите следующие пакеты на центральный сервер. Прежде всего мы установим Java JDK версии 8 (обновление 102, последнее на момент написания этой статьи), которое является зависимостью компонентов ELK.

Возможно, вы захотите сначала проверить страницу загрузок Java здесь, чтобы узнать, доступно ли новое обновление.

yum update
cd /opt
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/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

Пришло время проверить, успешно ли завершилась установка:

java -version

Чтобы установить последние версии Elasticsearch, Logstash и Kibana, нам придется создать репозитории для yum вручную. следующее:

Включить репозиторий Elasticsearch

1. Импортируйте открытый ключ GPG Elasticsearch в менеджер пакетов rpm:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Вставьте следующие строки в файл конфигурации репозитория elasticsearch.repo:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

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

yum install elasticsearch

Когда установка завершится, вам будет предложено запустить и включить elasticsearch:

4. Запустите и включите службу.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Разрешите трафик через TCP-порт 9200 в брандмауэре:

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Проверьте, отвечает ли Elasticsearch на простые запросы через HTTP:

curl -X GET http://localhost:9200

Вывод приведенной выше команды должен быть похож на:

Обязательно выполните вышеуказанные шаги, а затем приступайте к Logstash. Поскольку и Logstash, и Kibana используют ключ Elasticsearch GPG, нет необходимости повторно импортировать его перед установкой пакетов.

Рекомендуется к прочтению: Управление системными журналами (настройка, ротация и импорт в базу данных) в CentOS 7

Включить репозиторий Logstash

7. Вставьте следующие строки в файл конфигурации репозитория logstash.repo:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Установите пакет Logstash:

yum install logstash

9. Добавьте сертификат SSL на основе IP-адреса сервера ELK в следующей строке под разделом [ v3_ca ] в . >/etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Создайте самозаверяющий сертификат, действительный в течение 365 дней:

cd /etc/pki/tls
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

11. Настройте входные, выходные и фильтрующие файлы Logstash:

Ввод: создайте /etc/logstash/conf.d/input.conf и вставьте в него следующие строки. Это необходимо для того, чтобы Logstash «научился» обрабатывать удары, поступающие от клиентов. Убедитесь, что путь к сертификату и ключу соответствуют правильным путям, как указано на предыдущем шаге:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Выходной файл (/etc/logstash/conf.d/output.conf):


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Файл фильтра (/etc/logstash/conf.d/filter.conf). Для простоты мы будем регистрировать сообщения системного журнала:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Проверьте файлы конфигурации Logstash.

service logstash configtest

13. Запустите и включите logstash:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Настройте брандмауэр, чтобы разрешить Logstash получать журналы от клиентов (порт TCP 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Включить репозиторий Kibana

14. Вставьте следующие строки в файл конфигурации репозитория kibana.repo:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Установите пакет Kibana:

yum install kibana

16. Запустите и включите Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Убедитесь, что у вас есть доступ к веб-интерфейсу Kibana с другого компьютера (разрешите трафик через TCP-порт 5601):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Запустите Kibana (http://192.168.0.29:5601), чтобы убедиться, что вы можете получить доступ к веб-интерфейсу:

Мы вернемся сюда после того, как установим и настроим Filebeat на клиентах.

Рекомендуется к прочтению: Мониторинг журналов сервера в режиме реального времени с помощью инструмента «Log.io» в Linux

Установите Filebeat на клиентских серверах

Мы покажем вам, как это сделать для Клиента №1 (впоследствии повторите для Клиента №2, изменив пути, если это применимо к вашему дистрибутиву).

1. Скопируйте сертификат SSL с сервера на клиенты:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Импортируйте открытый ключ GPG Elasticsearch в менеджер пакетов rpm:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Создайте репозиторий для Filebeat (/etc/yum.repos.d/filebeat.repo) в CentOS. > дистрибутивы на основе:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Настройте источник для установки Filebeat в Debian и его производных:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

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

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Запустите и включите Filebeat:

systemctl start filebeat
systemctl enable filebeat

Настроить Filebeat

Здесь следует предостеречь. Конфигурация Filebeat хранится в файле YAML, для которого требуются строгие отступы. Будьте осторожны при редактировании /etc/filebeat/filebeat.yml следующим образом:

  1. В разделе пути укажите, какие файлы журналов следует «отправить» на сервер ELK.
  2. В разделе старатели:
input_type: log
document_type: syslog
  1. В разделе вывод:

    1. Раскомментируйте строку, начинающуюся с logstash.
    2. Укажите IP-адрес вашего ELK-сервера и порт, на котором Logstash прослушивает хосты.
    3. Убедитесь, что путь к сертификату указывает на реальный файл, который вы создали на Шаге I (раздел Logstash) выше.

Вышеописанные шаги проиллюстрированы на следующем изображении:

Сохраните изменения, а затем перезапустите Filebeat на клиентах:

systemctl restart filebeat

После того, как мы выполнили вышеуказанные шаги для клиентов, смело приступайте к работе.

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

Чтобы убедиться, что журналы от клиентов могут быть успешно отправлены и получены, выполните следующую команду на сервере ELK:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Вывод должен быть похож на (обратите внимание, как сообщения из /var/log/messages и /var/log/secure принимаются от client1 и клиент2):

В противном случае проверьте файл конфигурации Filebeat на наличие ошибок.

journalctl -xe

после попытки перезапустить Filebeat укажет вам на поврежденную строку(и).

Тестирование Кибаны

После того, как мы убедились, что журналы отправляются клиентами и успешно принимаются на сервере. Первое, что нам нужно сделать в Kibana, — это настроить шаблон индекса и установить его по умолчанию.

Вы можете описать индекс как полную базу данных в контексте реляционной базы данных. Мы воспользуемся filebeat-* (или вы можете использовать более точные критерии поиска, как описано в официальной документации).

Введите filebeat-* в поле Имя индекса или шаблон, а затем нажмите Создать:

Обратите внимание, что позже вам будет разрешено ввести более детальные критерии поиска. Затем щелкните звездочку внутри зеленого прямоугольника, чтобы настроить ее как шаблон индекса по умолчанию:

Наконец, в меню Обнаружение вы найдете несколько полей, которые можно добавить в отчет о визуализации журнала. Просто наведите на них курсор и нажмите Добавить:

Результаты будут показаны в центральной части экрана, как показано выше. Не стесняйтесь экспериментировать (добавлять и удалять поля из отчета журнала), чтобы познакомиться с Kibana.

По умолчанию Kibana отображает записи, обработанные за последние 15 минут (см. верхний правый угол), но вы можете изменить это поведение, выбрав другой период времени:

Краткое содержание

В этой статье мы объяснили, как настроить стек ELK для сбора системных журналов, отправленных двумя клиентами: компьютерами CentOS 7 и Debian 8.

Теперь вы можете обратиться к официальной документации Elasticsearch и найти более подробную информацию о том, как использовать эту настройку для более эффективной проверки и анализа ваших журналов.

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать. Мы с нетерпением ждем вашего ответа.