Я уже рассказывал про установку Elasticsearch и состав основных компонентов Elastic Stack. В этой публикациия расскажу о том, как выполняется установка Kibana – инструмента, которые позволяет визуализировать собранные данные и управлять компонентами Elastic Stack.
В качестве сервера я буду использовать ВМ с Rocky Linux 9.
Предварительные требования
Особых предварительных требований для установки Kibana нет, но есть требования к совместимости версий Kibana и Elasticsearch.
Мажорная версия Kibana должна быть идентичная мажорной версии Elasticsearch. В то же ввремя минорная версия Kibana должна быть равна или меньше минорной версии Elasticsearch. Например, версия Kibana 8.13.0 не совместима с версией Elasticsearch 7.3.0. Также Kibana 8.13.0 не поддерживается при работе с Elastichsearch 8.12.0. Зато поддерживается конфигурация с идентичными версиями Kibana и Elasticsearch. Также возможно совместимость Kibana 8.12.0 и Elasticsearch 8.13.0.
Различные патч версии Kibana и Elasticsearch совместимы между собой. Например, 8.13.0 и 8.13.2.
Установка Kibana
Установка выполняется следующим образом:
1. Загрузите deb/rpm пакет со страницы загрузки:
Вы также можете выполнить загрузку используя соответствующие шаги из руководства для Debian или RPM пакетов.
2. Запустите установку пакета:
sudo rpm -i kibana-8.13.2-x86_64.rpm
3. Включите автоматический запуск сервиса Kibana:
sudo systemctl daemon-reload
sudo systemctl enable kibana.service
Не запускайте сервис Kibana до завершения процедуры первоначальной настройки.
Первоначальная настройка Kibana
После установки Kibana необходимо выполнить её первоначальную настройку:
1. Сначала сгенерируем токен доступа на сервере с Elasticsearch:
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
root@tst01:/home/roman# sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjEzLjIiLCJhZHIiOlsiMTkyLjE2OC41Ni40MDo5MjAwIl0sImZnciI6IjUwMGE5NjRiZTcxMjkwYjg0YmZkZTAxMjQ0ZTJkNDY5ZGMzZmM1NzFmOWFhNmRlMGVjYjljNjY0ZWUzZjMzYzQiLCJrZXkiOiJlVWJnNlk0QjF0TnFKMjQ5eGN2cTpUNlB1c01JcVF4Ml81ZjJzdTF4N3h3In0=
root@tst01:/home/roman#
2. Теперь нужно добавить адрес сервера Elastichsearch в конфигурационный файл сервиса Kibana:
sudo nano /etc/kibana/kibana.yml
3. Раскомментируем параметр server.host и укажем в нем IP-адрес сервера Kibana. на котором буут прослушиваться входящие подключения:
server.host: "192.168.56.36"
4. Сохраните внесенные изменения.
5. Запустите сервис Kibana:
sudo systemctl start kibana.service
6. Проверим статус сервиса Kibana:
sudo systemctl status kibana.service
[root@localhost roman]# sudo systemctl status kibana.service
● kibana.service - Kibana
Loaded: loaded (/usr/lib/systemd/system/kibana.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-04-17 09:40:07 +07; 20s ago
Docs: https://www.elastic.co
Main PID: 1613 (node)
Tasks: 11 (limit: 23168)
Memory: 279.3M
CPU: 21.328s
CGroup: /system.slice/kibana.service
└─1613 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist
Apr 17 09:40:09 localhost.localdomain kibana[1613]: Native global console methods have been overridden in production environment.
Apr 17 09:40:11 localhost.localdomain kibana[1613]: [2024-04-17T09:40:11.588+07:00][INFO ][root] Kibana is starting
Apr 17 09:40:11 localhost.localdomain kibana[1613]: [2024-04-17T09:40:11.710+07:00][INFO ][node] Kibana process configured with roles: [background_tasks, ui]
Apr 17 09:40:25 localhost.localdomain kibana[1613]: [2024-04-17T09:40:25.591+07:00][INFO ][plugins-service] The following plugins are disabled: "cloudChat,cloudExperim>
Apr 17 09:40:25 localhost.localdomain kibana[1613]: [2024-04-17T09:40:25.728+07:00][INFO ][http.server.Preboot] http server running at http://192.168.56.36:5601
Apr 17 09:40:26 localhost.localdomain kibana[1613]: [2024-04-17T09:40:26.080+07:00][INFO ][plugins-system.preboot] Setting up [1] plugins: [interactiveSetup]
Apr 17 09:40:26 localhost.localdomain kibana[1613]: [2024-04-17T09:40:26.111+07:00][INFO ][preboot] "interactiveSetup" plugin is holding setup: Validating Elasticsearc>
Apr 17 09:40:26 localhost.localdomain kibana[1613]: [2024-04-17T09:40:26.161+07:00][INFO ][root] Holding setup until preboot stage is completed.
Apr 17 09:40:26 localhost.localdomain kibana[1613]: i Kibana has not been configured.
Apr 17 09:40:26 localhost.localdomain kibana[1613]: Go to http://192.168.56.36:5601/?code=773960 to get started.
7. Добавим исключение в правила брандмауэра (актуально для Rocky Linux):
sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --reload
8. Переходим по ссылке из сообщения статуса сервиса. В моем случае адрес следующий:
http://192.168.56.36:5601/?code=773960
9. Теперь нужно указать токен доступа, которые мы сгенерировали в п. 1 и нажать на кнопку “Configure Elastic”:
10. Дождитесь окончания процесса инициализации настроек Kibana. В случае успешного заврешения инициализации настроек должна отобразиться форма с приглашение указания учетных данных для подключения:
11. Используйте учетную запись пользователя elastic, который был создан в процессе установки сервера Elasticsearch.
12. В случае успешной аутентификации должен отобразиться стартовый экран Kibana:
Настройка шифрования трафика
После установки Kibana работает по HTTP, что далеко не безопасно в современных реалиях. Необходимо настроить шифрование трафика между серверами Kibana и Elasticsearch, а также между клиентским браузером и серверов Kibana. После завершения инициализации натроек Kibana трафик до сервера Elasticsearch уже по умолчанию зашифрован:
sudo nano /etc/kibana/kibana.yml
elasticsearch.hosts: ['https://192.168.56.40:9200']
elasticsearch.serviceAccountToken: AAEAAWVsYXN0aWMva2liYW5hL2Vucm9sbC1wcm9jZXNzLXRva2VuLTE3MTMzMjE5MjUxNTA6VncxMllkV3pSai12eDdOdHR6M1pFZw
elasticsearch.ssl.certificateAuthorities: [/var/lib/kibana/ca_1713321927055.crt]
Остается выполнить настройку шифрования между браузером клиента и сервером Kibana.
Шифрование между браузером и Kibana
Для настройки TLS соединения между клиентски браузером и Kibana необходим открытый ключ и закрытый ключ сертификата. Есть несколько вариантов:
1. Выпустить самоподписанный сертификат для Kibana. Этот вариант подойдет для тестовых сред.
2. Использовать сертификат от стороннего центра сертификации. Например, от Let’s Encrypt.
Я буду использовать второй вариант.
Шифрование между браузером и сервером Kibana конфигурируется следующим образом:
1. Скопируйте в директорию /etc/kibana файл открытого и закрытого ключа сертификата:
sudo ls -l /etc/kibana
[root@localhost roman]# sudo ls -l /etc/kibana
total 28
-rw-rw----. 1 root kibana 1935 Apr 17 12:30 cert.crt
-rw-rw----. 1 root kibana 130 Apr 17 09:22 kibana.keystore
-rw-rw----. 1 root kibana 8400 Apr 17 12:26 kibana.yml
-rw-r--r--. 1 root kibana 447 Apr 5 23:19 node.options
-rw-rw----. 1 root kibana 2459 Apr 17 12:30 priv.key
[root@localhost roman]#
2. Откройте на редактирование конфигурационный файл сервиса Kibana.
sudo nano /etc/kibana/kibana.yml
3. Раскомментируйте следующие параметры и укажите расположений файла открытого и закрытого ключа сертификата:
server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/certs/cert.crt
server.ssl.key: /etc/kibana/certs/priv.key
4. Сохраните изменения в файле конфигурации.
5. Перезапустите сервис Kibana:
sudo systemctl start kibana.service
5. Проверим статус сервиса:
sudo systemctl status kibana.service
[root@localhost roman]# sudo systemctl status kibana.service
● kibana.service - Kibana
Loaded: loaded (/usr/lib/systemd/system/kibana.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-04-17 15:25:33 +07; 4min 14s ago
Docs: https://www.elastic.co
Main PID: 14939 (node)
Tasks: 11 (limit: 23168)
Memory: 458.4M
CPU: 1min 13.849s
CGroup: /system.slice/kibana.service
└─14939 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist
Apr 17 15:28:06 localhost.localdomain kibana[14939]: [2024-04-17T15:28:06.267+07:00][INFO ][plugins.fleet] Beginning fleet setup
Apr 17 15:28:06 localhost.localdomain kibana[14939]: [2024-04-17T15:28:06.269+07:00][INFO ][plugins.fleet] Cleaning old indices
Apr 17 15:28:06 localhost.localdomain kibana[14939]: [2024-04-17T15:28:06.706+07:00][WARN ][plugins.fleet] xpack.encryptedSavedObjects.encryptionKey is not configured, private key passphrase is being sto>
Apr 17 15:28:06 localhost.localdomain kibana[14939]: [2024-04-17T15:28:06.739+07:00][INFO ][plugins.fleet] Fleet setup completed
Apr 17 15:28:19 localhost.localdomain kibana[14939]: [2024-04-17T15:28:19.252+07:00][INFO ][plugins.securitySolution.endpoint:user-artifact-packager:1.0.0] Started. Checking for changes to endpoint artif>
Apr 17 15:28:19 localhost.localdomain kibana[14939]: [2024-04-17T15:28:19.267+07:00][INFO ][plugins.securitySolution.endpoint:user-artifact-packager:1.0.0] Last computed manifest not available yet
Apr 17 15:28:19 localhost.localdomain kibana[14939]: [2024-04-17T15:28:19.268+07:00][INFO ][plugins.securitySolution.endpoint:user-artifact-packager:1.0.0] Complete. Task run took 16ms [ stated: 2024-04->
Apr 17 15:29:22 localhost.localdomain kibana[14939]: [2024-04-17T15:29:22.243+07:00][INFO ][plugins.securitySolution.endpoint:user-artifact-packager:1.0.0] Started. Checking for changes to endpoint artif>
Apr 17 15:29:22 localhost.localdomain kibana[14939]: [2024-04-17T15:29:22.253+07:00][INFO ][plugins.securitySolution.endpoint:user-artifact-packager:1.0.0] Last computed manifest not available yet
Apr 17 15:29:22 localhost.localdomain kibana[14939]: [2024-04-17T15:29:22.254+07:00][INFO ][plugins.securitySolution.endpoint:user-artifact-packager:1.0.0] Complete. Task run took 11ms [ stated: 2024-04->
lines 1-21/21 (END)
6. Теперь интерфейс Kibana будет доступен по тому же стандартному порту 5601, но уже по HTTPS:
https://192.168.56.36:5601/
В моем случае я обращался к Kibana по IP-адресу, а не по DNS-имени. В следствии этого отображается предупреждение о небезопасном соединении.
Настройка прослушиваемого имени
Также рекомендуемтся в конфигурационном файле сервиса Kibana указать имя, по которому сервис будет прослушивать входящие подключения:
sudo nano /etc/kibana/kibana.yml
Добавьте параметр с указанием прослушиваемого имени:
server.publicBaseUrl: "https://kib.itproblog.ru"
Сохраните внесенные изменения и перезапустите сервис Kibana:
sudo systemctl start kibana.service
Подключение Elastic Enterprise Search
Для того, чтобы в Kibana работал Elastic web crawler необходим еще один компонент – Elastic Enterprise Search.
Для подключения Elastic Enterprise Search выполните следующие действия:
1. Установите Elastic Enterprise Search на отдельном хосте или на хосте с Kibana. На своем тестовом стенде я совместил Elastic Enterprise Search и Kibana.
2. Откройте для редактирования конфигурационный файл Kibana:
sudo nano /etc/kibana/kibana.yml
3. Добавьте параметр с указанием расположения сервиса Elastic Enterprise Search:
enterpriseSearch.host: 'http://localhost:3002'
Поскольку я совместил Elastic Enterprise Search и Kibana, то я могу обращаться через локальный хост.
4. Сохраните внесенные изменения.
5. Перезапустите сервис Kibana.
sudo systemctl restart kibana.service
Если вы все выполнили верно, то на странице с перечнем всех индексов вы не должны увидеть соответствующего предупреждения о том, что сервис Elastic Enterprise Search не подключен.
https://192.168.56.36:5601/app/enterprise_search/content/search_indices
Пример окно с перечнем индексов после успешного подключения сервиса Elastic Enterprise Search.
Как видно из примера выше предупреждениебольше не отображается.
Если что-то пошло не так
Смотрим журналы:
sudo journalctl -u kibana.service
Смотрим дополнительные журналы вот тут:
/var/log/kibana