Site icon Eolya Consulting

Monitoring SolrCloud avec Prometheus et Grafana

Le monitoring d’un environnement SolrCloud en production est essentiel afin d’anticiper les problèmes de performances et le cas échéant en comprendre l’origine. Cet article décrit comment mettre en place un monitoring de SolrCloud au moyen de Prometheus et Grafana. 

Principe et architecture de Prometheus

Prometheus est un logiciel open source (https://prometheus.io/). Il collecte des métriques auprès de tous logiciels pouvant les fournir via des exporters (et la liste est longue https://prometheus.io/docs/instrumenting/exporters/), afin de surveiller le fonctionnement des applications et mettre en place une gestion d’alerte selon des seuils. 

Les tâches principales de Prometheus sont:

Les trois étapes de la mise en place d’un système de monitoring sont:

Pour le monitoring d’un environnement Solrcloud, nous utilisons les « exporters » suivants:

Le schéma suivant synthétise l’architecture et le fonctionnement du monitoring de SolrCloud avec de Prometheus et Grafana.

Installation des exporter sur les serveurs à monitorer

J’indique ici très synthétiquement comment procéder aux installations sur des serveurs Centos 8.0. Si ces procédures ne fonctionnent pas pour votre environnement, il faudra lire les documentations.

Node exporter

L’exporter est disponible dans le repository github suivant : https://github.com/prometheus/node_exporter

A installer sur les serveurs Zookeeper et Solr.

# useradd -d /home/prometheus prometheus
# mkdir /opt/prometheus
# cd /opt/prometheus
# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
# tar xzf node_exporter-0.18.1.linux-amd64.tar.gz
# ln -s node_exporter-0.18.1.linux-amd64 node_exporter
# rm node_exporter-0.18.1.linux-amd64.tar.gz
# chown -R prometheus: /opt/prometheus
[Unit]
Description=Prometheus Node Exporter
After=network-online.target

[Service]
User=prometheus
Restart=on-failure
ExecStart=/opt/prometheus/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start node-exporter
# systemctl enable node-exporter

JMX exporter

L’exporter est disponible dans le repository github suivant : https://github.com/prometheus/jmx_exporter

A installer sur les serveurs Zookeeper et Solr. L’exporter est exécuté dans le contexte des JVM de Solr et Zookeeper. Il est invoqué dans les paramètres de Solr (fichier solr.in.sh) et Zookeeper (fichier zookeeper-env.sh).

Serveur Zookeeper

# mkdir /opt/zookeeper/jmx-exporter
# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.9/jmx_prometheus_javaagent-0.9.jar
# mv /jmx_prometheus_javaagent-0.9.jar /opt/zookeeper/jmx-exporter/.
# touch /opt/zookeeper/conf/zookeeper-jmx-exporter.yml
SERVER_JVMFLAGS="-Xmx512m -javaagent:/opt/zookeeper/jmx-exporter/jmx_prometheus_javaagent-0.12.0.jar=7070:/opt/zookeeper/conf/zookeeper-jmx-exporter.yml"

Serveur Solr

# mkdir /opt/solr/jmx-exporter
# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar
# mv jmx_prometheus_javaagent-0.12.0.jar /opt/solr/jmx-exporter/.
# touch /opt/solr/jmx-exporter/solr-jmx-exporter.yml
SOLR_OPTS="$SOLR_OPTS -javaagent:/opt/solr/jmx-exporter/jmx_prometheus_javaagent-0.12.0.jar=7070:/opt/solr/jmx-exporter/solr-jmx-exporter.yml"

Solr exporter

A installer sur les serveurs Solr uniquement.

L’exporter est fourni avec Solr. On suppose que Solr est installé dans le répertoire « /opt/solr/ » et qu’un utilisateur « solr » existe.

[Unit]
Description=Prometheus Solr Exporter
After=network-online.target

[Service]
User=solr
Restart=on-failure
ExecStart=/opt/solr/contrib/prometheus-exporter/bin/solr-exporter -p 9854 -z zk1:2181,zk2:2181,zk3:2181 -f /opt/solr/contrib/prometheus-exporter/conf/solr-exporter-config.xml -n 16

[Install]
WantedBy=multi-user.target
# chmod +x /opt/solr/contrib/prometheus-exporter/bin/solr-exporter
# systemctl daemon-reload
# systemctl start solr-exporter
# systemctl enable solr-exporter

Zookeeper exporter

A installer sur les serveurs Zookeeper uniquement.

L’exporter est disponible dans le repository github suivant : https://github.com/lucianjon/zk-exporter
L’installation se fait au moyen de go et git qu’il faut donc installer au préalable

# yum install git.x86_64
# wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.13.linux-amd64.tar.gz
# echo "PATH=$PATH:$HOME/bin:/usr/local/go/bin" >> /root/.bash_profile
# source ~/.bash_profile
# rm go1.13.linux-amd64.tar.gz
# go get -u github.com/lucianjon/zk-exporter
# mkdir /opt/zookeeper/zk-exporter
# mv /root/go/bin/zk-exporter /opt/zookeeper/zk-exporter/.
[Unit]
Description=Prometheus Zookeeper Exporter
After=network-online.target

[Service]
User=zk
Restart=on-failure
ExecStart=/opt/zookeeper/zk-exporter/zk-exporter -port 7080 -servers localhost:2181 -pollinterval 15s

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable zk-exporter
# systemctl start zk-exporter

Installation du serveur de monitoring

Cette installation a été faite sur un serveur Centos 8.0. La procédure décrite ici est au plus simple. Pour plus de détails de configuration, il faut se référer à la documentation de chaque produit.

Installation de Prometheus

Site : https://prometheus.io/

# useradd -d /home/prometheus prometheus
# mkdir /opt/prometheus
# cd /opt/prometheus
# wget https://github.com/prometheus/prometheus/releases/download/v2.13.0/prometheus-2.13.0.linux-amd64.tar.gz
# tar xzf prometheus-2.13.0.linux-amd64.tar.gz
# ln -s prometheus-2.13.0.linux-amd64 prometheus
# mv prometheus/prometheus.yml /etc/default/.
# rm prometheus-2.13.0.linux-amd64.tar.gz
# chown -R prometheus: /opt/prometheus
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
User=prometheus
Restart=on-failure
ExecStart=/opt/prometheus/prometheus/prometheus --config.file=/etc/default/prometheus.yml --storage.tsdb.path=/opt/prometheus/data

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable prometheus
# systemctl start prometheus

Après démarrage, Prometheus est accessible à l’adresse http://<serveur_de_monitoring>:9090/

Dans /etc/default/prometheus.yml, ajouter pour chaque serveur Zookeeper et Solr les sections job_name.

Le paramètre targets indique les noms des serveurs et les ports pour les exporters

Les ports par défaut des exporters sont :

Pour notre environnement Solrcloud constitué de 3 serveurs Zookeeper (zk1, zk2, zk3) et 5 serveurs Solr (solr1, solr2, solr3, solr4 et solr5), nous avons ceci :

- job_name: 'solr_1'
static_configs:
- targets: ['solr1:9100', 'solr1:9854', 'solr2:7070']

- job_name: 'solr_2'
static_configs:
- targets: ['solr2:9100', 'solr2:9854', 'solr2:7070']

- job_name: 'solr_3'
static_configs:
- targets: ['solr3:9100', 'solr3:9854', 'solr2:7070']

- job_name: 'solr_4'
static_configs:
- targets: ['solr4:9100', 'solr4:9854', 'solr2:7070']

- job_name: 'solr_5'
static_configs:
- targets: ['solr5:9100', 'solr5:9854', 'solr2:7070']

- job_name: 'zk_1'
static_configs:
- targets: ['zk1:9100', 'zk1:7070', 'zk1:7080']

- job_name: 'zk_2'
static_configs:
- targets: ['zk2:9100', 'zk2:7070', 'zk2:7080']

- job_name: 'zk_3'
static_configs:
- targets: ['zk3:9100', 'zk3:7070', 'zk3:7080']

Installation de Grafana

Site : https://grafana.com/

# wget https://dl.grafana.com/oss/release/grafana-6.4.2-1.x86_64.rpm
# yum install initscripts urw-fonts
# yum localinstall grafana-6.4.2-1.x86_64.rpm
# rm grafana-6.4.2-1.x86_64.rpm
# systemctl enable grafana-server
# systemctl start grafana-server

Après démarrage, Grafana est accessible à l’adresse http://<serveur_de_monitoring>:3000/ (login admin / admin par défaut)

Dans le menu « Configuration », sélectionner « Data Sources »

Cliquer sur « Add dada source »

Sélectionner un data source Prometheus

Configurer le datasource pour se connecter au serveur Prometheus localisé sur le même serveur (localhost).

Pour visualiser les différents métriques, il faut créer et configurer des dashboards. Il existe des dashboard pré-configurés comme point de départ à la création de dashboards sur mesure. Ils sont disponibles ici https://grafana.com/grafana/dashboards. Le plus simple est de chercher directement dans Google, afin d’en trouver l’identifiant, par exemple « grafana dashboard jmx zookeeper ».

Les identifiants des dashboards que j’ai sélectionné sont :

Pour Solr, un dashboard est fourni sous la forme d’un fichier json dans le répertoire « contrib/prometheus-exporter/conf/grafana-solr-dashboard.json »

Pour ajouter les dashboards dans Grafana

Puis cliquer sur « New dashboard »

Une fois les dashboards en place, il convient de les personnaliser à vos propres besoins. Cette étape est plutôt fastidieuse et il faut prendre en main la syntaxe des requêtes PromQL de Prometheus.

Voici un exemple basique de dashboard où sont monitorés  principalement le load CPU de Zookeeper, le load et la charge CPU, les I/O disque et les GC de Solr.

Pour tester les requêtes PromQL lors de la configuration dans Grafana, Prometheus fournie une interface Web simpliste.

Et l’équivalent dans la configuration de Grafana

Conclusion

Dans cet article est décrit l’installation d’un environnement de monitoring Prometheus / Grafana dans le cadre de SolrCloud. L’installation en elle même est simple et rapide, par contre la configuration de Grafana peut être longue et cet aspect pourra faire l’objet d’un article séparé.

Vous souhaitez bénéficier d’une expertise Solr ou intégrer une ressource ponctuelle à vos projets ? Rendez vous sur la page Contact

Quitter la version mobile