L'accès aux métriques via l'interface de Visualisation est par défaut disponible et ne demande pas de configuration de la part de l'utilisateur.
Les métriques sont accessibles de 2 manières différentes:
Par défaut, par mesure de sécurité Graphite est accessible seulement localement. 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:
Plus d'informations sont disponibles sur les possibilités de configuration d'Apache sur la page de documentation suivante: https://httpd.apache.org/docs/2.4/en/bind.html
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 checks et hôtes et dans le cas des renommages.
Pour se connecter au serveur Mongo, 2 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é.
La sécurisation de la base Mongo est bien sur toujours possible (voir Sécurisation des connexions aux bases MongoDB) mais bien plus complexe à mettre en place. La méthode de connexion par SSH est donc préférable pour des raisons pratiques et 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 de clé | Valeur par défaut | Description |
|---|---|---|
URI | mongodb://ADRESSE-SERVEUR-MONGO/?w=1&fsync=false | URI du serveur Mongo L'adresse de la base Mongo à utiliser est l'adresse de la machine qui contient la base la plus complète des SLAs ( généralement le broker central ) |
DATABASE | shinken | Nom de la base SLA sur le serveur Mongo |
| USE_SSH_TUNNEL | 0 | Activer la connexion à Mongo par Tunnel SSH |
| SSH_USER | shinken | User utilisé pour se connecter au serveur Mongo |
| SSH_KEYFILE | /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) |
| SSH_TUNNEL_TIMEOUT | 5 | Timeout utilisé pour tester le tunnel SSH avant de lancer la connexion mongo |
.
root@serveur_shinken # su - apacheshinken@serveur_shinken $ ssh-keygenshinken@serveur_shinken $ ssh-copy-id user_distant@serveur_mongo[...]shinken@serveur_shinken $ ssh user_distant@serveur_mongouser_distant@serveur_mongo $
Pour la lecture des métriques, Graphite se base sur Apache pour fournir un service Web facilement utilisable par d'autres logiciels. Pour avoir le droit de lire les métriques, il faut alors que le dossier de stockage des métriques /opt/graphite/storage/whisper et ses fils soient possédés par l'utilisateur et le groupe Apache (apache:apache).
Lors de manipulation manuelles sur ces emplacements disques parfois volumineux, il arrive que les droits de /opt/graphite/storage/whisper soient modifiés par le système, ce qui empêche la lecture des métriques par Graphite et par conséquent par Shinken (permission refusée par le système).
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.
Les logs de carbon-cache sont situés dans son espace de stockage /opt/graphite/storage/log/carbon-cache/carbon-cache-a. Il est composé 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
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 définis dans le fichier /etc/httpd/conf.d/graphite.conf (Attention, il ne faut pas modifier ce fichier qui est écrasé lors des mises à jours) et sont dans le répertoire /var/log/graphite: