Les services de supervision propose de plus en plus nativement d’obtenir des graphes par rapport aux données de supervision collectées.
Malheureusement, Nagios n’enregistre pas ces données dans le temps (il ne permet donc ne permet pas d’avoir ces informations) et par conséquent, il ne permet pas de visualisé ces données.
Mon but (et donc celui de ce tutoriel), est donc d’enregistrer les données de performances de Nagios dans une base de données et de les afficher sous forme de graphe.
Pour cela, on va stocker les données Nagios dans une base de données InfluxDB (avec Nagflux). Ensuite, on va retranscrire ces données en forme de graphe sur Grafana (avec Histou).
Pour résumer, voici donc les éléments qu’on va installé :
InfluxDB : Base de données optimisée pour le stockage de données horodatées (TSDB)
Nagflux : Connecteur qui stocke les données Nagios dans une base de données (ici InfluxDB)
Grafana : Outil de visualisation des données (métriques) sous forme de graphe (courbe, jauge,…)
Histou : Outil de création dynamique de graphe pour Grafana
Installation des services
Prérequis
On met à jour notre dépôt et on installe les utilitaires nécessaire à la poursuite du tutoriel :
Nagflux s’installe manuellement en téléchargeant les éléments et en les copiant dans le dossier /opt (selon la hiérarchie du système de fichiers Linux).
On télécharge l’archive et on décompresse dans notre dossier d’application Web :
1
2
3
4
5
6
7
8
9
cd /tmp
wget -O histou.tar.gz https://github.com/Griesbacher/histou/archive/v0.4.3.tar.gz
mkdir -p /srv/http/histou
cd /srv/http/histou
tar xzf /tmp/histou.tar.gz --strip-components 1cp histou.ini.example histou.ini
cp histou.js /usr/share/grafana/public/dashboards/
Si vous lisez un peu (au lieu de faire des copier-coller !), vous remarquerez que j’effectue une configuration d’Histou. Celle-ci étant simple (on prend les éléments par défaut), je l’a met dans la partie d’installation.
Configuration
Maintenant que tout est installé, on va pouvoir passez à la partie inintéressante du tutoriel : la configuration.
Nagflux
On va créer le fichier de configuration “config.gcfg”.
Pour cela, copier-coller le code suivant :
Par défaut, Nagios ne traite pas les données de performances. Il faut donc lui dire de le faire et adapter sa configuration dans ce sens.
Pour cela, on procède à gros coup de sed :
1
2
3
4
5
6
7
8
9
10
11
sudo sh -c "sed -i 's/^process_performance_data=0/process_performance_data=1/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#host_perfdata_file=/host_perfdata_file=/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#host_perfdata_file_template=.*/host_perfdata_file_template=DATATYPE::HOSTPERFDATA\\\\tTIMET::\$TIMET\$\\\\tHOSTNAME::\$HOSTNAME\$\\\\tHOSTPERFDATA::\$HOSTPERFDATA\$\\\\tHOSTCHECKCOMMAND::\$HOSTCHECKCOMMAND\$/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#host_perfdata_file_mode=/host_perfdata_file_mode=/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#host_perfdata_file_processing_interval=.*/host_perfdata_file_processing_interval=15/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#host_perfdata_file_processing_command=.*/host_perfdata_file_processing_command=process-host-perfdata-file-nagflux/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#service_perfdata_file=/service_perfdata_file=/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#service_perfdata_file_template=.*/service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\\\\tTIMET::\$TIMET\$\\\\tHOSTNAME::\$HOSTNAME\$\\\\tSERVICEDESC::\$SERVICEDESC\$\\\\tSERVICEPERFDATA::\$SERVICEPERFDATA\$\\\\tSERVICECHECKCOMMAND::\$SERVICECHECKCOMMAND\$/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#service_perfdata_file_mode=/service_perfdata_file_mode=/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#service_perfdata_file_processing_interval=.*/service_perfdata_file_processing_interval=15/g' /usr/local/nagios/etc/nagios.cfg"sudo sh -c "sed -i 's/^#service_perfdata_file_processing_command=.*/service_perfdata_file_processing_command=process-service-perfdata-file-nagflux/g' /usr/local/nagios/etc/nagios.cfg"
Ensuite, on va inscrire les commandes de données de performance dans le fichiers de commande /usr/local/nagios/etc/objects/commands.cfg :
On va alors vérifié que Nagflux récupère bien des données (toujours avec cURL). Il faut attendre que Nagios fasse quelques “check” pour avoir un résultat. C’est un bon moment pour prendre un café ou un chocolat chaud si vous êtes nocturne.
Pour la configuration de Grafana, on quitte le CLI pour aller sur son interface Web sur le port 3000.
Si cela ne fonctionne pas (pour ma part, cela a fonctionné), c’est surement a cause de votre pare-feux. Voici les commandes ufw (désolé, je n’ai jamais été expert iptables) :
1
2
sudo ufw allow 3000/tcp
sudo ufw reload
On se connecte avec le nom d’utilisateur “admin” et la même chose pour le mot de passe. On est alors inviter à le changer (faite le s’il vous plait).
On va donc maintenant ajouté notre base de données InfluxDB en sélectionnant “Add data source”. Vous l’aurez compris, il faut ensuite cliqué sur “InfluxDB”. On remplace le nom par “nagflux”, on remplis le champs “URL” par ce qui est proposé et le champs “Database” par “naglfux”. On valide ensuite notre ajout via le bouton “Save & Test”.
Histou
Histou doit-être configuré avec l’adresse IP ou le nom de domaine de votre serveur. On remplace donc “localhost” de la variable “var url” du fichier /usr/share/grafana/public/dashboards/histou.js en adaptant la commande d’exemple suivante :
1
sudo sh -c "sed -i 's/localhost/trucbidule.scrample.xyz/g' /usr/share/grafana/public/dashboards/histou.js"
Tester Histou avec la commande suivante (en admettant que vous avez toujours le service “PING” en check sur le localhost) :
Si votre écran est remplit de données, c’est qu’Histou fonctionne. Reste à voir maintenant si Histou fonctionne bien sur Grafana. Pour cela, on va consulté directement un graphe de données.
Aller donc à l’adresse suivante sur votre navigateur en remplaçant bien sur le nom de domaine par le votre (ou adresse IP de votre serveur) : http://trucbidule.scrample.xyz:3000/dashboard/script/histou.js?orgId=1&host=localhost&service=PING
Voila ! Grafana est bien installé est fonctionnel ! Cependant, modifier manuellement l’URL pour voir les données de chaque service de chaque hôte est vraiment pas pratique. On va donc voir dans la partie suivante comment intégré les URL pour chaque hôte et service.
Intégration dans Nagios
Pour cela, on va créer deux templates que l’on va incorporer dans nos définitions d’hôtes et services.
On adapte et on ajoute donc les templates suivante dans le fichier /usr/local/nagios/etc/objects/templates.cfg :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
################################################################################
#
# TEMPLATES GRAFANA
#
################################################################################
define host {
name host-grafana
action_url http://trucbidule.scrample.xyz:3000/dashboard/script/histou.js?host=$HOSTNAME$
register 0
}
define service {
name service-grafana
action_url http://trucbidule.scrample.xyz:3000/dashboard/script/histou.js?host=$HOSTNAME$&service=$SERVICEDESC$
register 0
}
Ainsi en ajoutant “use host-grafana” ou “use service-grafana” dans la définition d’un template, on obtient un lien cliquable vers Grafana pour l’hôte ou le service.
On peut aussi ajouter simplement la ligne action_url individuellement à chaque hôtes et/ou services.
Pour ma part, j’ai intégré la template “host-grafana” à la template “generic-host” qui est à l’origine de toutes mes définitions d’hôtes.
Pour les services, j’ai ajouté une template “generic-service-with-perf” qui hérite de “generic-service”. J’utilise donc l’une ou l’autre en fonction de mes besoins.
1
2
3
4
5
6
7
define service { name generic-service-with-perf
use generic-service
use service-grafana
process_perf_data 1 register 0}
Maintenant que cela est fait, je peux aller dormir… Bonne nuit à moi !