Les vérifications faites lors de la supervision de vos équipements peuvent fournir des mesures en plus de l'état. Ces mesures ( ou donnée de performance, métriques ) peuvent être de tout type.
Par exemple :
Ces mesures sont fournies selon un format définit par le format de sortie des sondes ( voir la page Les Sondes ).
À chaque vérification d'état d'un élément, le module Graphite-Perfdata ( module de Broker ) enregistre les mesures dans la base de données Graphite.
Graphite est une base de données "time series" ce qui va permettre d'associer une date à chaque mesure et de permettre la consultation de ces données sous forme de courbe dans l'interface de Shinken.
Shinken Entreprise utilise par défaut la base de données Graphite ( https://graphiteapp.org/ ) pour stocker les métriques.
Cette base est constituée de deux éléments :
Le répertoire de stockage des données de graphite est "/opt/graphite/storage/whisper" par défaut.
Nous vous conseillons de superviser l'utilisation du disque qui contient la partition où sont les données de Graphite. Vu que chaque check de chaque hôte peut écrire des métriques, on arrive rapidement à écrire beaucoup de métrique donc il pourrait être judicieux de dédier un disque pour ces données et d'utiliser un disque avec un bon débit d'écriture ( comme un SSD ).
La base est en version 1.1.8.
Il est possible de consulter les métriques depuis l'Interface de Visualisation depuis deux pages différentes :
Par mesure de sécurité Graphite est accessible par défaut seulement localement, cela implique qu'un serveur externe qui envoie une requête à Graphite se verra refuser l'accès.
Pour autoriser des serveurs externes à accéder à Graphite, il faut modifier la configuration d'Apache qui est responsable de la mise à disposition de Graphite au monde extérieur :
<VirtualHost 127.0.0.1:80> à remplacer par Listen PORT <VirtualHost IP_INTERFACE:PORT> |
avec :
|
Cette action ouvre publiquement l'accès à l'interface graphique de Graphite. Pour bloquer cet accès vous pouvez refuser les connections ou les rediriger. Pour ce faire, éditez le fichier /etc/httpd/conf.d/graphite.conf et entre les balises <VirtualHost> </VirtualHost> ajoutez les lignes suivantes, selon votre préférence:
OU
N'oubliez pas de modifier l'url Vous pouvez mettre cette configuration juste avant la balise </VirtualHost>, après les autres instructions. |
Pour que les changements soient pris en compte, il faut redémarrer le service d'Apache ( httpd ).
service httpd restart |
Si la base n'est pas sur le même serveur que le module Graphite-Perfdata ( module de Broker ), c'est à dire que la valeur du paramètre host est différente de localhost, 127.0.0.1, de l'IP ou nom de la machine du le Broke, il faut autoriser les connexions du module vers la base.
Par exemple si vous utiliser firewalld, depuis la machine avec la base ( carbon-cache ) vous pouvez utiliser les commandes suivantes :
firewall-cmd --add-port=2003/tcp firewall-cmd --runtime-to-permanent |
Pour changer le port de graphite, il faut modifier deux fichiers :
Par défaut, Graphite écoute sur le port 80, pour changer ce port, il faut aller voir dans le fichier /etc/httpd/conf.d/graphite.conf, là où se trouve la partie "VirtualHost".
Par défaut, le VirtualHost de ce fichier ressemblera à ça :
[ ... ] <VirtualHost 127.0.0.1:80> [ ... ] |
Pour ouvrir un autre port, il suffit de changer 80 par le port souhaité ( par exemple 8080 ).
[ ... ] <VirtualHost 127.0.0.1:8080> [ ... ] |
Plus d'informations sur l'adresse IP du VirtualHost dans ce chapitre : Ouvrir l'accès à Graphite aux outils externes |
Pour que les changements soient pris en compte, il faut redémarrer le service d'Apache ( httpd ).
service httpd restart |
Avant de redémarrer Apache, nous vous conseillons de changer aussi le port d'Apache afin de ne pas le redémarrer deux fois ( voir le chapitre Changer le port dans la configuration d'Apache ). |
Par défaut Apache écoute uniquement sur le port 80, pour changer le port par défaut ou en ajouter d'autres, il faut aller modifier le fichier /etc/httpd/conf/httpd.conf.
Dans ce fichier, trouvez la partie où est écrit Listen 80 :
[ ... ] Listen 80 [ ... ] |
Pour changer le port, il suffit donc de modifier le port d'écoute. Par exemple pour écouter sur le port 8080 :
[ ... ] Listen 8080 [ ... ] |
Il est aussi possible d'ouvrir plusieurs ports dans ce fichier, mais seul celui défini dans votre VirtualHost sera accessible depuis l'extérieur du serveur ( voir le chapitre Changer le port dans la configuration de Graphite ).
[ ... ] Listen 80 Listen 8080 [ ... ] |
Pour que les changements soient pris en compte, il faut redémarrer le service d'Apache ( httpd ).
service httpd restart |
Avant de redémarrer Apache, nous vous conseillons de changer aussi le port de Graphite afin de ne pas redémarrer Apache deux fois ( voir le chapitre Changer le port dans la configuration de Graphite ). |
Après avoir changé les ports dans les fichiers de configuration et redémarrer Apache, il est possible que vous aillez une erreur du type "Permission denied".
Il est possible que ce soit SELinux ( ou votre pare-feu si vous en avez un ) qui bloque le port que vous ayez choisi.
Dans le cas où ça serait SELinux, deux choix s'offrent à vous :
Pour avoir la liste complète des ports acceptés par les règles de SELinux pour vous pouvez lancer cette commande :
semanage port -l |
Si vous voulez filtrer ces résultats pour les règles http, vous pouvez utiliser grep :
semanage port -l | grep http |
Si vous voulez changer le port que vous avez mis pour Graphite, vous pouvez choisir parmi ceux listés par la commande précédente.
Avant de continuer et ajouter une exception dans une règle de SELinux, il faut prendre en compte deux choses :
|
Si vous souhaitez ajouter un port pour la règle http_port_t vous pouvez lancer cette commande :
semanage port -a -t http_port_t -p tcp VOTRE_PORT |
Pour que les changements soient pris en compte, il faut redémarrer le serveur.
reboot |
Pour plus d'informations, référez-vous à la documentation de SELinux : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-top_three_causes_of_problems-how_are_confined_services_running
Shinken utilise l'UUID de l'élément ( hôte/cluster/check ) pour l'identification des métriques. Cette identification par un ID unique permet de conserver les métriques lors d'un renommage de l'élément.
Graphite a besoin de mettre à jour sa table de correspondance des noms pour les nouveaux éléments et ceux qui ont été renommés.
|
| Nom | Type | Unité | Défaut | Commentaire | |
|---|---|---|---|---|---|
| Booléen | --- | 1 | Permets d'activer ou désactiver la recherche des correspondances entre les ID et les noms ( 1 pour activer, 0 pour désactiver ). | |
| Liste d'URI | --- | http://localhost:52000/inventory/ | URL séparées par des virgules.
Exemple : https://ip-broker01:52000/inventory/,https://ip-broker02:52000/inventory/,https://ip-broker03:52000/inventory/ | |
| Numérique | --- | 10 | Timeout général, utilisé pour les opérations bloquantes comme les tentatives de connexion à un serveur d'inventaire, par exemple. ( secondes ). |
Après tous changements du fichier de configuration, penser à redémarrer Apache pour que Graphite prenne les modifications en compte
|
Si le serveur Graphite et les Brokers avec les modules de métrologie Graphite sont sur des machines différentes, il faut configurer le serveur d'inventaire des modules de métrologie Graphite pour écouter sur les IP publiques de leur machine.
Pour cela, sur le serveur de l'Arbiter, éditer les fichiers de configuration des modules Graphite et décommenter la ligne du paramètre
broker__module_graphite_perfdata__inventory_server__address 0.0.0.0 |
( pour passer sa valeur de 127.0.0.1 à 0.0.0.0 )
Redémarrer l'Arbiter pour appliquer le changement de configuration |
Si le serveur d'un Broker qui fait tourner le module de métrologie Graphite dispose d'un firewall ( firewalld par défaut sur les systèmes Redhat et dérivés ), la commande suivante permet d'obtenir la liste des ports autorisés
firewall-cmd --list-ports |
80/tcp 7763/tcp 7765/tcp 7766/tcp 7767/tcp 7768/tcp 7769/tcp 7770/tcp 7771/tcp 7772/tcp 7773/tcp 7777/tcp 7780/tcp 50000/tcp |
Dans cet exemple, le port 52000/tcp ( port par défaut du serveur d'inventaire du module de métrologie Graphite ) n'est pas listé, il est donc bloqué par défaut
Les commandes suivantes, à lancer sur le serveur du Broker, permettent d'autoriser les connexions :
firewall-cmd --add-port=52000/tcp firewall-cmd --runtime-to-permanent |
En cas d'impossibilité d'accès au serveur d'inventaire des modules de métrologie ( ports bloqués, paramètres par défaut incompatibles avec votre configuration, ... ), Graphite peut utiliser l'ancienne méthode que Shinken avait déployé pour fournir ces informations avec MongoDB.
L'accès via Mongo est déprécié et est voué à disparaître.
En effet, Graphite ne peut consulter qu'une seule base Mongo pour obtenir les correspondances de noms, il est ainsi obligé d'utiliser la base centrale, qui est souvent aussi la plus chargée.
Pour se connecter au serveur Mongo, deux méthodes sont disponibles:
Par défaut, Graphite se connecte de manière directe au serveur Mongo pour y lire et écrire sa table de correspondance.
Dans la configuration de Graphite , on sait que la connexion se fait de manière directe lorsque le paramètre "USE_SSH_TUNNEL" est à 0.
Cette méthode de connexion a pour avantage d'être facile à configurer au niveau de Shinken. Par contre, elle oblige à permettre l'accès à la base Mongo au monde extérieur, et donc s'exposer à des problèmes de sécurité.
Graphite peut également se connecter au serveur mongo par tunnel SSH ( pour des raisons de sécurité ).
bind_ip= 127.0 . 0.1| Nom | Type | Unité | Défaut | Commentaire | |
|---|---|---|---|---|---|
| Texte | --- | mongodb://ADRESSE-SERVEUR-MONGO/?w=1&fsync=false | URI du serveur Mongo | |
| Texte | --- | shinken | Nom de la base contenant les données d'inventaire sur le serveur Mongo | |
| Texte | --- | metrology_inventory | Nom de la collection contenant les données d'inventaire | |
| Booléen | --- | 0 | Activer la connexion à Mongo par Tunnel SSH | |
| Texte | --- | shinken | Utilisateur sur le serveur Mongo à contacter pour établir la connexion | |
| Texte | --- | /opt/graphite/conf/id_rsa | Doit pointer vers la clé ssh privée sur le serveur Shinken. Attention : Apache n'ayant pas les droits d'accès au répertoire ~shinken, il vous faut copier la clé dans /opt/graphite/conf/id_rsa et la rendre accessible par l'utilisateur apache ( chown apache:apache /opt/graphite/conf/id_rsa ) | |
| Entier | --- | 5 | Timeout utilisé pour tester le tunnel SSH avant de lancer la connexion mongo |
Après tous changements du fichier de configuration, penser à redémarrer Apache pour que Graphite prenne les modifications en compte
|
Graphite étant hébergé par le service apache, il n'a pas accès au répertoire /var/lib/shinken et il n'a donc pas accès à la clé SSH /var/lib/shinken/.ssh/id_rsa.
C'est pour cette raison que la clé SSH utilisée pour le tunnel est situé dans /opt/graphite/conf/id_rsa.
Deux solutions sont disponibles :
Il faut copier la clé privée et changer les droits pour l'utiliser et la maintenir à jour en cas de changement.
cp /var/lib/shinken/.ssh/id_rsa* /opt/graphite/conf/ chown apache:apache /opt/graphite/conf/id_rsa |
| Attention : un lien symbolique entre les deux fichiers ne fonctionnera pas, car l'utilisateur apache n'a pas les droits suffisants pour lire le fichier originel, et SSH refusera d'utiliser une clé dont les droits d'accès sont trop permissifs. |
Pour la lecture des métriques, Graphite se base sur Apache pour fournir un service Web facilement utilisable par d'autres logiciels.
Les commandes suivantes permettent de rétablir les droits nécessaires:
chmod -R 0755 /opt/graphite/storage/ /var/log/graphite chown -R apache:apache /opt/graphite/storage/ /var/log/graphite |
Pour vérifier que le démon carbon-cache fonctionne, la première vérification est l’existence de son processus:
$ ps axjf | grep carbon-cache 1 21989 21988 21988 ? -1 Sl 48 1202:07 /usr/bin/python /opt/graphite/bin/carbon-cache.py start --config=/opt/graphite/conf/carbon.conf --pidfile=/opt/graphite/storage/carbon-cache-a.pid |
S'il n'existe pas, il faut bien évidement le relancer, en tant que root:
/etc/init.d/carbon-cache start |
S'il fonctionne, vérifiez qu'il écoute bien sur le port 2003:
$ netstat -laputen | grep 2003 tcp 0 0 0.0.0.0:2003 0.0.0.0:* LISTEN 0 300518846 21989/python |
Le numéro de processus ( ici 21989 ) doit correspondre à celui du démon, dans le cas contraire, un autre processus a réservé le port et carbon-cache ne peux pas le prendre.
Si vous n'arrivez toujours pas à vous connecter au carbon-cache vérifier que le port est ouvert dans votre firewall.
Les logs de carbon-cache sont situés dans son espace de stockage /opt/graphite/storage/log/carbon-cache/carbon-cache-a.
Ils sont composés de 3 fichiers de logs:
16/06/2020 14:13:24 :: 49.235.118.98:46670 connected : connexion d'un démon se connectant au cache de données, typiquement grafana
16/06/2020 14:13:24 :: 49.235.118.98:46670 disconnected : déconnexion du cache de données
16/06/2020 08:09:16 :: MetricPickleReceiver connection with 185.209.0.165:2791 established : connexion d'un nouveau écrivain
16/06/2020 08:09:16 :: MetricPickleReceiver connection with 185.209.0.165:2791 closed cleanly : déconnexion d'un écrivain
Si vous n'arrivez toujours pas à vous connecter au carbon-cache vérifier que le port est ouvert dans votre firewall.
Si firewalld est activé sur la machine qui fait tourner le serveur de métrologie et si le serveur de métrologie ne tourne pas sur la machine du Broker ( c'est à dire que la valeur du paramètre host est différente de localhost, 127.0.0.1, de l'IP ou nom de la machine qui fait tourner le Broker ), il faut autoriser les connexions vers le serveur de métrologie.
Sur la machine qui fait tourner le serveur de métrologie ( carbon-cache ), vérifiez que le port est ouvert dans votre firewall :
firewall-cmd --list-ports |
80/tcp 7763/tcp 7765/tcp 7766/tcp 7767/tcp 7768/tcp 7769/tcp 7770/tcp 7771/tcp 7772/tcp 7773/tcp 7777/tcp 7780/tcp 50000/tcp |
Dans cet exemple, le port 2003/tcp n'est pas listé, il est donc bloqué par défaut
Il faut modifier le firewall pour autoriser les connexions:
firewall-cmd --add-port=2003/tcp firewall-cmd --runtime-to-permanent |
C'est le démon Apache qui héberge l'application répondant aux requêtes de lecture. Il faut des processus httpd ainsi que wsgi:graphite pour avoir le bon fonctionnement d'apache:
ps -fu apache |egrep 'httpd|wsgi' apache 2194 31002 0 15:07 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 6144 31002 1 15:09 ? 00:00:00 (wsgi:graphite) -DFOREGROUND apache 31003 31002 0 15:06 ? 00:00:00 (wsgi:graphite) -DFOREGROUND apache 31004 31002 0 15:06 ? 00:00:00 (wsgi:graphite) -DFOREGROUND apache 31005 31002 0 15:06 ? 00:00:00 (wsgi:graphite) -DFOREGROUND apache 31007 31002 0 15:06 ? 00:00:00 (wsgi:graphite) -DFOREGROUND apache 31008 31002 0 15:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 31009 31002 0 15:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 31011 31002 0 15:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 31012 31002 0 15:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 31013 31002 0 15:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND |
Si ce n'est pas lancé, il faut lancer:
service httpd start |
Les logs d'apache pour graphite sont dans les répertoires /var/log/graphite et /opt/graphite/storage/log/webapp :
Ces fichiers sont définis dans le fichier /etc/httpd/conf.d/graphite.conf
( Attention, il ne faut pas modifier le graphite.conf car il est écrasé a chaque mises à jours ).