1. Импорт ключа GPG Elasticsearch
    sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. Добавление репозитория
    sudo vim /etc/yum.repos.d/elasticsearch.repo
    
    [elasticsearch] 
    name=Elasticsearch repository for  7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=0
    autorefresh=1
    type=rpm-md
    
  3. Устанавливаем Kibana
    sudo dnf install --enablerepo=elasticsearch kibana -y
    
  4. Активируем сервис Kibana
    sudo systemctl enable kibana 
    
  5. Устанавливаем java. Совместимость версий можно проверить тут
    sudo dnf install java-1.8.0-openjdk -y
    

Конфигурация Kibana

Правим файл конфигурации по стандартному пути /etc/kibana/kibana.yml.

  1. Добавляем доменное имя и порт, который будет слушать kibana
    server.host: elk-kibana.my.lan 
    server.port: 5601
    
  2. Указываем имя сервера (должно совпадать с именем хоста)
    server.name: "elk-kibana"
    
  3. Указываем хосты кластера elasticsearch
    elasticsearch.hosts: ["http://elk-node1.my.lan:9122", "http://elk-node2.my.lan:9122", "http://elk-node3.my.lan:9122" ]
    
  4. Стартуем kibana
    sudo systemctl start kibana
    sudo systemctl status kibana 
    
  5. Получаем доступ к по url

Включаем TLS

Если нужно использовать htpps, то выполняем следующее

  1. Получаем сами сертификаты ( у меня в формате pfx)
  2. Экспортируем публичный сертификат
     openssl pkcs12 -in /tmp/elk-kibana.my.lan.pfx -clcerts -nokeys -out /tmp/elk-kibana.my.lan.crt
    
  3. Экспортируем приватный ключ
    openssl pkcs12 -in /tmp/elk-kibana.my.lan.pfx -nocerts -nodes -out /tmp/elk-kibana.my.lan.key
    
  4. Копируем сертификаты в директорию конфигураций kibana.
    sudo cp /tmp/elk-kibana.my.lan.crt /etc/kibana/elk-kibana.my.lan.crt
    sudo cp /tmp/elk-kibana.my.lan.key /etc/kibana/elk-kibana.my.lan.key
    sudo cp /etc/pki/ca-trust/source/anchors/root-ca.crt /etc/kibana/root-ca.crt
    sudo chmod 660  /etc/kibana/elk-kibana.my.lan.crt /etc/kibana/elk-kibana.my.lan.key
    
  5. Настраиваем TLS
     sudo vim /etc/kibana/kibana.yml
    
    server.ssl.enabled: true
    server.ssl.certificate: /etc/kibana/elk-kibana.my.lan.crt
    server.ssl.key: /etc/kibana/elk-kibana.my.lan.key
    
  6. Перезапускаем kibana
     sudo systemctl restart kibana
    
  7. Получаем доступ к по url

Авторизация в кластере Elasticsearch

Если у вас требуется аутентификация на узлах elasticsearch, то указываем логин и пароль для авторизации. Как задавать пароли стандартным пользователям кластера я уже писал ранее.

  1. Назначаем логин и пароль
     sudo vim /etc/kibana/kibana.yml
    
    elasticsearch.username: kibana_system
    elasticsearch.password: pwd
    
  2. Если кластер с использованием ssl
     sudo vim /etc/kibana/kibana.yml
    
    elasticsearch.ssl.certificateAuthorities: /etc/kibana/root-ca.crt
    
  3. Перезапускаем kibana
     sudo systemctl restart kibana
    
  4. Получаем доступ к по url и авторизуемся под elastic, который является пользователем кластера.

Балансировка нагрузки между несколькими узлами Elasticsearch

Для снижения нагрузки на узлы кластера, которые являются хранилищами данных рекомендуется использовать узел с ролью сoordinating only вместе с kibana. Узлы с ролью сoordinating only - это, по сути, интеллектуальные балансировщики нагрузки, которые являются частью кластера и находятся между kibana и кластером elasticsearch.

  1. Устанавливаем elasticsearch на ноду с kibana
    sudo dnf install elasticsearch -y
    
  2. Устанавливаем роль только сoordinating only
    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    node.master: false
    node.data: false
    node.ingest: false
    
  3. Назначаем имя кластера и другие базовые параметры
    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    cluster.name: my-cluster
    http.port: 9122
    transport.tcp.port: 9322
    discovery.zen.ping.unicast.hosts: ["elk-node3.my.lan", "elk-node2.my.lan","elk-node1.my.lan","elk-kibana.my.lan"]
    
  4. Естественно список хостов в discovery.zen.ping.unicast.hosts нужно привести к одному виду на всех узлах elasticsearch. Чтобы понять о чём речь можно прочитать мои предыдущие статьи.

  5. Перезапускаем все ноды elastcisearch в кластере
    sudo systemctl restart elasticsearch
    
  6. Проверяем статус кластера elastcisearch (должно стать на одну ноду больше)
    sudo curl http://elk-node3.my.lan:9122/_cluster/health 
    
    {"cluster_name":"my-cluster","status":"green","timed_out":false,"number_of_nodes":4,"number_of_data_nodes":3,"active_primary_shards":8,"active_shards":16,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0
    
  7. Теперь меняем elasticsearch.hosts для kibana (elk-kibana.my.lan потому, что нода с ролью сoordinating only на том же хосте что и kibana)
    sudo vim /etc/kibana/kibana.yml
    
    elasticsearch.hosts: ["https://elk-kibana.my.lan:9122:9122"]
    
  8. Перезапускаем kibana
    sudo systemctl restart kibana