Translate

субота, 9 липня 2016 р.

Marvel. Monitoring Plugin for Elasticsearch

Півроку тому я писав статтю про Elasticsearch, його кластеризацію, основи роботи. Сьогодні ж поговоримо про способи його моніторингу, а саме установку Marvel. Одразу скажу, що він коштує достатньо космічних сум (проте безкоштовний для використання в DEV-середовищах) і не кожен бізнес може його дозволити собі.

Враховуючи ці ціни, можливо, краще спробувати відкриті альтернативи на кшталт Kopf чи Elasticsearch-head, про котрі я також згадував у власній статті. Проте, ймовірно, вони менш функціональні і призначені скоріше для моніторингу кластерних ресурсів: шардів, реплік, стану кластеру.

Опишу трохи майбутню тестову архітектуру. Розробники з Elastic рекомендують для Prod-середовищ виділяти окремий сервер для Marvel, адже останній логує свої сервісні дані та проводить певні розрахунки, котрі можуть впливати на завантаження самого Elasticsearch. Тому наша інсталяція складатиметься з вузлу Elasticsearch + Marvel-agent, котрий надсилатиме необхідні сервісні дані до іншого вузлу Elasticsearch, котрий буде зберігати їх локально, а Kibana та Marvel plugin, що будуть встановлені тут же, відображатимуть це все.


Установимо oracle-java8-jdk на обидва вузла кластера:

# add-apt-repository ppa:webupd8team/java
# aptitude update
# aptitude install oracle-java8-installer
# update-java-alternatives -s java-8-oracle

# java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

Та Elasticsearch:

# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

# aptitude update
# aptitude install elasticsearch

Додаємо Elasticsearch в автозавантаження:

# update-rc.d elaticsearch defaults 95 10

MONITORED HOST


Установимо marvel-agent на хості, котрий будемо моніторити:

# cd /usr/share/elasticsearch
# bin/plugin install license
# bin/plugin install marvel-agent

Редагуємо elasticsearch.yml, де указуємо на який сервер відправляти дані для Marvel:

# vim /etc/elasticsearch/elasticsearch.yml

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
...
#----------- Marvel ------

marvel.agent.exporters:

  id1:
   type: http
   host: ["http://10.0.3.108:9200"]

Де 10.0.3.108 адреса хосту, на котрому буде зберігатись і відображатись статистика.

У разі, якщо Marvel хост буде представлений кластером Elasticsearch з декількох нод, то в список host варто додати їх адреси, щось на кшталт:

host: ["http://ip1:9200", "http://ip2:9200", "http://ip3:9200"]

Після цього необхідно перевантажити Elasticsearch.

MONITORING HOST


Налаштуємо хост, що прийматиме і відображатиме сервісні дані.

Установимо та додамо в автостарт панель Kibana, адже Marvel - це її розширення:

# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list

# apt-get update 
# apt-get install kibana

# update-rc.d kibana defaults 95 10

Трішки відредагуємо конфігураційний файл Kibana для роботи на всіх інтерфейсах та укажемо адресу локального Elasticsearch:

# vim /opt/kibana/config/kibana.yml

# Kibana is served by a back end server. This controls which port to use.
server.port: 5601

# The host to bind the server to.
server.host: "0.0.0.0"

elasticsearch_url: "http://localhost:9200"
....

Установимо Marvel плагін до Kibana:

# /opt/kibana/bin/kibana plugin --install elasticsearch/marvel/2.3.4

Версія Marvel має співпадати з версією установленого Elasticsearch. Взагалі всі компоненти, що випускає компанія Elastic, потребують коректних версій для спільної роботи. Скажімо, найновіша версія Elasticsearch не зможе працювати із старішою версією Kibana і, аналогічно, з Logstash. Тобто компоненти необхідно оновлювати всі разом і бажано до останніх версій. Більш того, Elastic не особливо переймається зворотною сумісністю між версіями: підтримку попередніх протоколів прибирають, попередні конфігураційні файли не підходять до новіших версій програм і т.п. І це відбувається без жодних попереджень. Більш того, часом, їхня документація неточна чи неоднозначна, хоча варто визнати, що вона досить якісна.

Усі метрики Marvel також зберігає в Elasticsearch. Відредагуємо конфігураційний файл останнього для роботи на всіх інтерфейсах:

# vim /etc/elasticsearch/elasticsearch.yml

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
...

Перезавантажуємо Kibana та Elasticsearch:

# service elasticsearch restart
# service kibana restart

Налаштуємо через браузер перегляд індексів Marvel в Kibana


Статистика Marvel в Kibana:


Та і сам Marvel:



Для підвищення відмовостійкості Elasticsearch, в котрий пише Marvel, також можна кластеризувати. А панель Kibana можна винести на окремий вузол для зручності, проте також включити в кластер задля балансування запитів. Elasticsearch, що працює на вузлі з Kibana, варто сконфігурувати як вузол без корисних даних (nodata) і без можливості голосу в кластері, для запобігання Split Brain. У такому разі elasticsearch_url в kibana.yml буде також дивитись на localhost.

Ось також стаття про хороші альтернативи Marvel, про котрі я трохи згадав на початку https://blog.codecentric.de/en/2014/03/elasticsearch-monitoring-and-management-plugins/

Посилання:
https://www.elastic.co/guide/en/marvel/current/installing-marvel.html
https://www.elastic.co/guide/en/marvel/current/configuration.html
https://www.elastic.co/guide/en/kibana/current/setup.html
https://www.reddit.com/r/elasticsearch/comments/306eex/elastic_marvel_worth_it/

Немає коментарів:

Дописати коментар