Установка Elasticsearch + Kibana. Ubuntu
ELK (Elasticsearch, Logstash, Kibana) – это одна из самых популярных поисковых систем в области Big Data, масштабируемое нереляционное хранилище данных с открытым исходным кодом, аналитическая NoSQL-СУБД с широким набором функций полнотекстового поиска.
Основные функциональные возможности Elasticsearch включают:
- автоматическую индексацию новых JSON-объектов,
- поддержку восточных языков,
- гибкость поисковых фильтров,
- наличие встроенных анализаторов текста.
Elasticsearch активно применяется в различных Big Data системах крупных и средних компаний по всему миру.
Предварительная подготовка
Полный перечень шагов по предварительной подготовке сервера приведен в соответствующем разделе документации.
При установки из deb или rpm пакета большинство предварительных настроек применяется автоматически. Про те настройки, которые не применяются автоматически я расскажу в следующих нескольких разделах.
Отключение swap
Поскольку Elastichsearch написан на Java, то необходимо отключить swap, чтобы не допустить выгрузку данных Java приложения на диск, т.к. это может привести к очень серьезным проблема с производительностью.
Команда для отключения swap:
sudo swapoff -aОднако, после перезагрузки swap снова будет активен. Чтобы этого избежать необходимо скорректировать настройки монтирования в файле fstab и отключить монтирование swap раздела (если таковое настроено):
sudo nano /etc/fstab# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-SgxsJ2Y0eJDJHTCFxWt9vMFHdFgBPS6uChmsGMK81UYtPrnaUsrLbPGkdnE9aLxc / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/0debc3fb-e83a-4d99-a78e-99472ebcadbd /boot ext4 defaults 0 1
#/swap.img none swap sw 0 0Период повторного TCP соединения
Для оптимизации сетевого взаимодействия между узлами кластера Elasticsearch дополнительно необходимо скорректировать параметры TCP.
Выполните следующую команду:
sudo sysctl -w net.ipv4.tcp_retries2=5Для того, чтобы изменения сохранились при перезагрузке системы отредактируем соответствующий конфигурационный файл:
sudo nano /etc/sysctl.d/99-sysctl.confДобавьте в файл вот такой параметр:
net.ipv4.tcp_retries2=5Сохраните внесенные изменения.
Установка первого узла Elasticsearch
1. Загрузить deb/rpm пакет с сайта или
Альтернативный вариант – использовать вот этот блок команд из документации.
2. Запускаем установку:
sudo dpkg -i elasticsearch-8.15.1-amd64.debSelecting previously unselected package elasticsearch.
(Reading database ... 132049 files and directories currently installed.)
Preparing to unpack elasticsearch-8.13.2-amd64.deb ...
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Unpacking elasticsearch (8.13.2) ...
Setting up elasticsearch (8.13.2) ...
--------------------------- Security autoconfiguration information ------------------------------
Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.
The generated password for the elastic built-in superuser is : 79_mvu-17RVcng_w6=BS
If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.
You can complete the following actions at any time:
Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.
Generate an enrollment token for Kibana instances with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.
Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.
-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
root@tst01:/home/roman# sudo systemctl daemon-reload- Сохраните пароль пользователя elastic.
4. Конфигурируем автоматический запуск:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service5. Запускаем сервис:
sudo systemctl start elasticsearch.service6. Проверяем статус сервиса:
sudo systemctl status elasticsearch.serviceПроверка после установки
1. Установим значение переменной окружения с паролем пользователя elastic:
export ELASTIC_PASSWORD="79_mvu-17RVcng_w6=BS"2. Выполним запрос к API Elasticsearch:
curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 {
"name" : "tst01",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "G7jnDzcxSV60bqxB2oSbJg",
"version" : {
"number" : "8.13.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf",
"build_date" : "2024-04-05T14:45:26.420424304Z",
"build_snapshot" : false,
"lucene_version" : "9.10.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}Настройки
1. Открываем на редактирование файл конфигурации:
sudo nano /etc/elasticsearch/jvm.options################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## and the min and max should be set to the same value. For
## example, to set the heap to 4 GB, create a new file in the
## jvm.options.d directory containing these lines:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################Если вы хотите уменьшить потребление оперативной памяти, то просто выставляете, например, такие значения:
-Xms512m
-Xmx512mЕсли же захочется увеличить, то вбиваем, например 4Гб:
-Xms4g
-Xmx4gПосле изменения настройки, перегрузите ES:
sudo service elasticsearch restartТеперь можете замерить потребление Elasticsearch'ом памяти и убедиться, что настройки были сохранены.
Установка Kibana
Установка Kibana
Установка выполняется следующим образом:
1. Загрузите deb/rpm пакет со страницы загрузки или
Вы также можете выполнить загрузку используя соответствующие шаги из руководства для Debian или RPM пакетов.
2. Запустите установку пакета:
sudo dpkg -i kibana-8.15.1-amd64.deb3. Включите автоматический запуск сервиса Kibana:
sudo systemctl daemon-reload
sudo systemctl enable kibana.serviceПервоначальная настройка Kibana
После установки Kibana необходимо выполнить её первоначальную настройку:
1. Сначала сгенерируем токен доступа на сервере с Elasticsearch:
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibanaroot@tst01:/home/roman# sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjEzLjIiLCJhZHIiOlsiMTkyLjE2OC41Ni40MDo5MjAwIl0sImZnciI6IjUwMGE5NjRiZTcxMjkwYjg0YmZkZTAxMjQ0ZTJkNDY5ZGMzZmM1NzFmOWFhNmRlMGVjYjljNjY0ZWUzZjMzYzQiLCJrZXkiOiJlVWJnNlk0QjF0TnFKMjQ5eGN2cTpUNlB1c01JcVF4Ml81ZjJzdTF4N3h3In0=2. Теперь нужно добавить адрес сервера Elastichsearch в конфигурационный файл сервиса Kibana:
sudo nano /etc/kibana/kibana.yml3. Раскомментируем параметр server.host и укажем в нем IP-адрес сервера Kibana. на котором будут прослушиваться входящие подключения:
server.host: "192.168.56.36"4. Сохраните внесенные изменения.
5. Запустите сервис Kibana:
sudo systemctl start kibana.service6. Проверим статус сервиса 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.8. Переходим по ссылке из сообщения статуса сервиса. В моем случае адрес следующий:
http://192.168.56.36:5601/?code=7739609. Теперь нужно указать токен доступа, которые мы сгенерировали в п. 1 и нажать на кнопку “Configure Elastic”:
10. Дождитесь окончания процесса инициализации настроек Kibana. В случае успешного заврешения инициализации настроек должна отобразиться форма с приглашение указания учетных данных для подключения:
11. Используйте учетную запись пользователя elastic, который был создан в процессе установки сервера Elasticsearch.
12. В случае успешной аутентификации должен отобразиться стартовый экран Kibana:
Настройка шифрования трафика
После установки Kibana работает по HTTP, что далеко не безопасно в современных реалиях. Необходимо настроить шифрование трафика между серверами Kibana и Elasticsearch, а также между клиентским браузером и серверов Kibana. После завершения инициализации наcтроек Kibana трафик до сервера Elasticsearch уже по умолчанию зашифрован:
sudo nano /etc/kibana/kibana.ymlelasticsearch.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]# 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]#2. Откройте на редактирование конфигурационный файл сервиса Kibana.
sudo nano /etc/kibana/kibana.yml3. Раскомментируйте следующие параметры и укажите расположений файла открытого и закрытого ключа сертификата:
server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/certs/cert.crt
server.ssl.key: /etc/kibana/certs/priv.key4. Сохраните изменения в файле конфигурации.
5. Перезапустите сервис Kibana:
sudo systemctl start kibana.service5. Проверим статус сервиса:
sudo systemctl status kibana.service[root@localhost]# 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.yml3. Добавьте параметр с указанием расположения сервиса 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.
Как видно из примера выше предупреждение больше не отображается.
Discussions about classic kits help fans connect modern football with older moments in the game because shirts can show how clubs balance heritage and modern style. Discussions about club colour traditions help explain why two shirts from the same club may appeal to different fans. When a shirt is chosen for a gift or collection, PSG football shirts is a phrase that sits comfortably in content about football identity. For supporters who follow kit launches, the paragraph can mention shirts without turning into direct advertising.