Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Make by tools (01.00.01) - action=same_as_next_version
Scroll Ignore
scroll-pdftrue
scroll-officetrue
scroll-chmtrue
scroll-docbooktrue
scroll-eclipsehelptrue
scroll-epubtrue
scroll-htmltrue
Panel
titleSommaire

Table of Contents
stylenone

Les métriques dans Shinken

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 : Shinken Entreprise effectue un certain nombre de vérifications sur des hôtes et clusters, appelées "checks". Chaque check peut lors de son exécution extraire une donnée de performance qui est ensuite traitée par Shinken. Ces données peuvent être de tous types:

  • Un check "Memory" sur une machine Linux
peut par exemple remonter des métriques comme
  • pourra donner la quantité de mémoire utilisée, de mémoire libre et de mémoire totale.
  • Un check sur un switch
peut remonter
  • pourra donner les statistiques de transfert des différentes interfaces réseau.
  • Un check sur une application
peut par exemple remonter
  • pourra donner le nombre d'utilisateurs actuellement sur l'application, le nombre de nouveaux utilisateurs sur la journée, etc...

Les métriques sont présentées par des nombres flottants, qui pourront être ensuite consultés sous forme de graphes dans une interface.

Stockage des métriques

Dans Shinken Entreprise, les métriques sont stockées dans une base de données Graphite (https://graphiteapp.org/). 

Les données de métrologie sont enregistrées dans Graphite par l'intermédiaire du module "Graphite-Perfdata", placé sur le Broker. Le Broker envoie les données au démon carbon (partie de Graphite), qui gère le stockage de ces données.

Les métriques sont physiquement rangés dans le répertoire "/opt/graphite/storage/whisper"

Consultation des métriques

Interface de visualisation

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:

Pour accéder aux métriques stockées dans Graphite, Shinken utilise Apache. Lorsqu'un utilisateur dans l'interface de Visualisation demande la visualisation d'une métrique, l'interface Web requête Graphite via Apache pour récupérer la métrique demandée.

Panel

Image Removed

Dans le cas d'une architecture complexe avec plusieurs royaumes, il peut y avoir plusieurs serveurs de stockage des métriques. Dans ce cas, l'interface de Visualisation trouve automatiquement le serveur Graphite à interroger pour renvoyer les métriques demandées.


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.

Stockage des métriques

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 :

  • carbon-cache : le démon qui gère l'écriture et le stockage des données.
  • graphite ( graphite-web ) : le module d'Apache qui permet de lire les données.


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.

Consultation des métriques

Depuis l'Interface de Visualisation

Il est possible de consulter les métriques depuis l'Interface de Visualisation depuis deux pages différentes :

  • Dans les tableau de bord, via le widget graphique ( voir la page Widget Graphique ).
  • Dans le détail d'un hôte/cluster via l'onglet graphique ( voir la page Onglet Graphiques  ).

Lorsqu'un utilisateur veux consulter une métrique dans l'Interface de Visualisation, l'interface requête Graphite via Apache pour récupérer la métrique demandée.

Panel

Image Added

Dans le cas d'une architecture complexe avec plusieurs royaumes, il peut y avoir plusieurs serveurs de stockage des métriques. Dans ce cas, l'Interface de Visualisation trouve automatiquement le serveur Graphite à interroger pour renvoyer les métriques demandées.

Panel

Image Added

Outils externes

Anchor
openGraphite
openGraphite

Autoriser les appels externes ( non localhost ) à Graphite 

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 :

Code Block
languagejs
themeConfluence
title/etc/httpd/conf.d/graphite.conf
<VirtualHost 127.0.0.1:80>


à remplacer par


Listen PORT
<VirtualHost IP_INTERFACE:PORT>

avec :

  • IP_INTERFACE : à remplacer par l'adresse de l'interface sur laquelle faire l'écoute. Par défaut l'écoute n'est faite que sur l'interface locale ( 127.0.0.1 ). Utilisez * pour écouter sur toutes les interfaces
  • PORT : Port d'écoute à utiliser. La directive "Listen" n'est pas obligatoire si le port par défaut 80 est utilisé.


Panel

Image Removed

Outils externes

Ouvrir l'accès à Graphite aux outils externes

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:

Code Block
title/etc/httpd/conf.d/graphite.conf
<VirtualHost 127.0.0.1:80>


à remplacer par


Listen PORT
<VirtualHost ip_interface:PORT>

avec:

  • ip_interface à remplacer par l'adresse de l'interface sur laquelle faire l'écoute. Par défaut l'écoute n'est faite que sur l'interface locale (127.0.0.1). Utiliser * pour écouter sur toutes les interfaces
  • PORT: Port d'écoute à utiliser. La directive "Listen" n'est pas obligatoire si le port par défaut 80 est utilisé.
Plus d'informations sont disponibles sur les possibilités de configuration d'Apache sur la page de documentation suivante: 
Info
  • Pour plus d'information sur les possibilités de configuration d'Apache, vous pouvez consulter la page suivante :

Correspondance ID → Nom de l'élément

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.

  • Mais les outils externes accédant à Graphite ( par exemple Grafana ) ne sont pas tous capables de comprendre la correspondance NOM→ID.
  • Pour résoudre ce problème, Shinken a mis une passerelle pour ne pas perturber les outils externes.
    • Par défaut les appels à Graphite renvoient les noms comme clef des métriques au monde extérieur.
    • Le broker et ses modules interrogent graphite avec un paramètre additionnel qui permet d'accéder aux métriques via les UIID.

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.

  • Cette correspondance est contenue dans la base de données Mongo , dont l’accès est configuré dans Graphite dans le fichier /opt/graphite/conf/mongodb.conf.
  • Cette recherche n'est faite que si une requête par nom est demandée à graphite et que la table n'est plus à jour.
  • Afin de gérer le cas où des hôtes sont renommés vers de noms d'hôte qui existaient précédemment, Graphite vide son cache lors d'une nouvelle mise en production
    • afin que tous les processus de Graphite/Apache soient mis au courant, le fichier /opt/graphite/storage/whisper/.cacheinvalidation est mis à jour
      • ce fichier ne doit pas être modifié
      • en cas de problème, il est recréé, et le cache vidé

Configuration de l'accès à MongDB

Pour se connecter au serveur Mongo, 2 méthodes sont disponibles:

  • Connexion directe: Par défaut, mais non sécurisée.
  • Tunnel SSH: Shinken se connecte au serveur Mongo au travers d'un module SSH pour plus de sécurité
Connexion directe au serveur Mongo

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é.

Connexion par SSH au serveur Mongo

Graphite peut également se connecter au serveur mongo par tunnel SSH (pour des raisons de sécurité).

  • En effet, le paramétrage de mongoDB (/etc/mongod.conf) permet de définir sur quelle adresse ce dernier écoute les requêtes.
    • En n'autorisant seulement l'adresse 127.0.0.1, cela évite d'ouvrir la base au monde extérieur.
      • Dans la configuration du serveur Mongo (/etc/mongod.conf), assurez-vous que le paramètre "bind_ip" est positionné pour n'écouter que sur l'interface locale:
        bind_ip=
        127.0.0.1
Pour que graphite cré le tunnel, il faut activer les options suivantes ( dans /opt/graphite/conf/mongodb.conf ):
Nom de cléValeur par défautDescription

URI

mongodb://ADRESSE-SERVEUR-MONGO/?w=1&fsync=falseURI 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

shinkenNom de la base SLA sur le serveur MongoUSE_SSH_TUNNEL0Activer la connexion à Mongo par Tunnel SSHSSH_USERshinkenUser utilisé pour se connecter au serveur MongoSSH_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)

.

Le tunnel SSH va permettre au module de se connecter comme si ses requêtes étaient local au serveur mongo ( en 127.0.0.1 ).
  • Depuis le serveur hébergeant Graphite, assurez-vous que les clés publiques SSH de l'utilisateur lançant le démon Apache (par défaut "apache") sont autorisées sur le serveur hébergeant Mongo :
    • Connectez-vous avec le user lançant le démon sur le serveur Shinken
    • Générez la paire de clés SSH si nécessaire
    • Copiez la clé publique sur le serveur mongo

root@serveur_shinken # su - apache
shinken@serveur_shinken $ ssh-keygen
shinken@serveur_shinken $ ssh-copy-id user_distant@serveur_mongo
[...]
shinken@serveur_shinken $ ssh user_distant@serveur_mongo
user_distant@serveur_mongo $

Vous pouvez également utiliser la clé ssh du user "shinken" ; dans ce cas il vous faut copier la clé privé du user shinken (/var/lib/shinken/.ssh/id_rsa) à un emplacement accessible par le démon Apache, avec les droits d'accès permettant au user "apache" de lire ce fichier.
  • Cette manipulation est aussi nécessaire dans le cas où la base mongoDB est sur le même serveur que le module SLA, même si le tunnel est ouvert localement.
  • Droits d'accès aux métriques

    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:

    Code Block
    chmod -R 0755 /opt/graphite/storage/ /var/log/graphite
    chown -R apache:apache /opt/graphite/storage/ /var/log/graphite
    Warning
    titleActivation de l'interface graphique de Graphite

    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:

    Code Block
    languagetext
    themeEmacs
    titleBloquer l'accès
    <LocationMatch "^/?$">
            Deny from all                                        
    </LocationMatch>

    OU

    Code Block
    languagetext
    themeEmacs
    titleRediriger vers une URL
    <LocationMatch "^/?$">
            Redirect / http://www.votre-redirection.com/           
    </LocationMatch>

    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 ).

    Code Block
    languagetext
    themeEmacs
    service httpd restart
    Base de métrologie ( Graphite )

    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 :

    Code Block
    languagetext
    themeEmacs
    firewall-cmd --add-port=2003/tcp
    firewall-cmd --runtime-to-permanent

    Changer le port de Graphite

    Pour changer le port de graphite, il faut modifier deux fichiers :

    • Le fichier de configuration de Graphite : /etc/httpd/conf.d/graphite.conf
    • Le fichier de configuration d'Apache : /etc/httpd/conf/httpd.conf
    Anchor
    changeGraphitePort
    changeGraphitePort
    Changer le port dans la configuration de Graphite

    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 :

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf.d/graphite.conf
    [ ... ]
    <VirtualHost 127.0.0.1:80>
    [ ... ]

    Pour ouvrir un autre port, il suffit de changer 80 par le port souhaité ( par exemple 8080 ).

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf.d/graphite.conf
    [ ... ]
    <VirtualHost 127.0.0.1:8080>
    [ ... ]
    Info

    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 ).

    Code Block
    languagetext
    themeEmacs
    service httpd restart
    Warning

    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 ).

    Anchor
    changeApachePort
    changeApachePort
    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 :

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf/httpd.conf
    [ ... ]
    Listen 80
    [ ... ]

    Pour changer le port, il suffit donc de modifier le port d'écoute. Par exemple pour écouter sur le port 8080 :

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf/httpd.conf
    [ ... ]
    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 ).

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf/httpd.conf
    [ ... ]
    Listen 80
    Listen 8080
    [ ... ]

    Pour que les changements soient pris en compte, il faut redémarrer le service d'Apache ( httpd ).

    Code Block
    languagetext
    themeEmacs
    service httpd restart
    Warning

    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  ).

    Erreur lors du démarrage d'Apache

    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 :

    • changer de port;
    • dire à SELinux d'accepter le port que vous avez choisi.

    Pour avoir la liste complète des ports acceptés par les règles de SELinux pour vous pouvez lancer cette commande : 

    Code Block
    languagetext
    themeEmacs
    semanage port -l

    Si vous voulez filtrer ces résultats pour les règles http, vous pouvez utiliser grep :

    Code Block
    languagetext
    themeEmacs
    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.

    Warning

    Avant de continuer et ajouter une exception dans une règle de SELinux, il faut prendre en compte deux choses : 

    • cela va demander de redémarrer tout le système;
    • cela peut comporter des risques en termes de sécurité. Vous pouvez toujours changer le port que vous avez choisi par ceux listés par les commandes précédentes.

    Si vous souhaitez ajouter un port pour la règle http_port_t vous pouvez lancer cette commande :

    Code Block
    languagetext
    themeEmacs
    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.

    Code Block
    languagetext
    themeEmacs
    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

    Activation de HTTPS pour Graphite

    Par défaut, Graphite utilise le protocole HTTP. Si vous souhaitez activer HTTPS, il faut aller modifier le fichier /etc/httpd/conf.d/graphite.conf, là où se trouve la partie "VirtualHost". De plus il peut être nécessaire d'activer HTTPS sur Apache si ce n'est pas déjà le cas.


    Ouvrir le port 443 d'Apache


    Pour vérifier si Apache écoute sur le port 443 :

    Code Block
    languagetext
    themeEmacs
    netstat -laputen | grep 443

    Exemple  :

    Code Block
    languagetext
    themeEmacs
    titleApache accepte les connexions HTTPS
    netstat -laputen | grep 443
    tcp6       0      0 :::443                  :::*                    LISTEN      0          114741     15195/httpd



    Si le port 443 n'est pas ouvert sur Apache, il est nécessaire d'installer le module mod_ssl et de redémarrer Apache.


    Code Block
    languagetext
    themeEmacs
    yum install -y mod_ssl
    service httpd restart


    Si Apache n'écoute toujours pas en 443 :


    • il faut modifier /etc/httpd/conf.d/graphite.conf pour qu'il importe le module SSL en ajoutant la ligne suivante en début de du fichier
    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf.d/graphite.conf
    LoadModule ssl_module modules/mod_ssl.so


    • Ajouter le port d'écoute à Apache dans le fichier /etc/httpd/conf/httpd.conf
    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf/httpd.conf
    [ ... ]
    Listen 443
    [ ... ]


    • Pour que les changements soient pris en compte, il faut redémarrer le service d'Apache ( httpd ).
    Code Block
    languagetext
    themeEmacs
    service httpd restart
    Activer le HTTPS de Graphite


    Pour activer le HTTPS de Graphite il faut modifier la partie "VirtualHost" du fichier  /etc/httpd/conf.d/graphite.conf.


    Par défaut, le VirtualHost de ce fichier ressemblera à ça :

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf.d/graphite.conf
    [ ... ]
    <VirtualHost 127.0.0.1:80>
    		ServerName graphite
            DocumentRoot "/opt/graphite/webapp"
            ErrorLog /var/log/graphite/graphite-webapp.error.log
            CustomLog /var/log/graphite/graphite-webapp.access.log common
    
     [ ... ]



    Pour activer HTTPS il faut modifier le fichier de configuration de la manière suivante :

    Code Block
    languagejs
    themeConfluence
    title/etc/httpd/conf.d/graphite.conf
    [ ... ]
    <VirtualHost 127.0.0.1:443>
    		ServerName graphite
            DocumentRoot "/opt/graphite/webapp"
            ErrorLog /var/log/graphite/graphite-webapp.error.log
            CustomLog /var/log/graphite/graphite-webapp.access.log common
    	    SSLEngine on
            SSLCertificateFile "/path/to/www.example.com.cert"
            SSLCertificateKeyFile "/path/to/www.example.com.key"
    [ ... ]


    Pour que les changements soient pris en compte, il faut redémarrer le service d'Apache ( httpd ).

    Code Block
    languagetext
    themeEmacs
    service httpd restart
    Warning

    Ne pas oublier de modifier le fichier de la configuration

    • de la WebUI pour prendre en compte l'activation du HTTPS de Graphite par Shinken. 
    Code Block
    languagejs
    themeConfluence
    title/etc/shinken/modules/webui.cfg
    [ ... ]
    
    graphite_backends                                   *=https://ADRESS_SERVER_GRAPHITE:443
    
    [ ... ]
    • du module Graphite-Perfdata du Broker, en modifiant l'url d'envoi de l'inventaire, si nécessaire ( c'est à dire, si vous utilisez des outils externes comme Grafana pour consulter les métriques )
    Code Block
    languagejs
    themeConfluence
    title/etc/shinken/modules/graphite.cfg
    [ ... ]
    
      broker__module_graphite_perfdata__inventory_push__url                                   https://ADRESS_SERVER_GRAPHITE:443/migrate
    
    [ ... ]

    Il faudra ensuite redémarrer l'Arbiter.

    Dans le cas d'un cluster Graphite, l'adresse du serveur à mettre correspond à la machine où se trouve le carbon-relay.

    Supervision par Shinken de Graphite en HTTPS

    Shinken fournit le modèle d'hôte shinken-graphite pour la supervision de l'état de la base Graphite. Le check Shinken Graphite Status livré dans ce modèle interroge l'état de la base en utilisant l'adresse de l'hôte Graphite ( Clé d'import : address ). Il est donc important de s'assurer que le certificat SSL/TLS de Graphite est émis pour correspondre à cette adresse. Par exemple, si l'adresse de l'hôte dans Shinken est 'localhost' mais que le certificat est émis pour '127.0.0.1', le check de supervision échouera.

    Anchor
    Correspondance ID
    Correspondance ID
    Correspondance UUID → Nom de l'élément

    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.

    • Mais les outils externes accédant à Graphite ( par exemple Grafana ) ne sont pas tous capables de comprendre la correspondance NOM→UUID.
    • Pour résoudre ce problème, Shinken a mis une passerelle pour les outils externes.
      • Par défaut les appels à Graphite renvoient les noms comme clef des métriques pour les outils externes.
      • Le Broker et ses modules interrogent Graphite avec un paramètre additionnel qui permet d'accéder aux métriques via les UUID.


    Graphite a besoin de mettre à jour sa table de correspondance des noms pour les nouveaux éléments et ceux qui ont été renommés.

    Panel

    Image Added



    • Cette correspondance est fournie par le serveur d'inventaire associé aux modules de métrologie de Shinken.
      • Graphite obtient les paramètres d'accès à ces serveurs via le fichier /opt/graphite/conf/shinken_inventory.conf  
    • Cette recherche n'est faite que si une requête par nom est demandée à Graphite et que la table n'est plus à jour.
    • Afin de gérer le cas où des hôtes sont renommés vers de noms d'hôte qui existaient précédemment, Graphite vide son cache lors d'une nouvelle mise en production
      • afin que tous les processus de Graphite/Apache soient mis au courant, le fichier /opt/graphite/storage/whisper/.cacheinvalidation est mis à jour
        • ce fichier ne doit pas être modifié
        • en cas de problème, il est recréé, et le cache vidé
    Paramètres de connexion aux serveurs d'inventaire
    • Graphite se base sur les informations du fichier /opt/graphite/conf/shinken_inventory.conf pour aller chercher les informations qui lui permettront d'assurer la correspondance entre les noms et les ID
    NomTypeUnitéDéfautCommentaire
    No Format
    ENABLE
    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 ).

    No Format
    URI
    Liste d'URI--- http://localhost:52000/inventory/

    URL séparées par des virgules.

    • Permet de contacter chacun des modules de métrologie qui fournit des métriques à ce serveur Graphite.
    • Si le serveur d'inventaire utilise SSL, il faudra utiliser https au lieu de http.


    Exemple : https://ip-broker01:52000/inventory/,https://ip-broker02:52000/inventory/,https://ip-broker03:52000/inventory/

    No Format
    TIMEOUT
    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  ).

    Info

    Après tous changements du fichier de configuration, penser à redémarrer Apache pour que Graphite prenne les modifications en compte

    Code Block
    languagetext
    themeEmacs
    titleCommande pour prendre en compte les changements de configuration dans Graphite :
    service httpd restart
    Autoriser les connexions aux serveurs d'inventaire
    Configurer les modules de métrologie Graphite

    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

    Code Block
    languagejs
    themeConfluence
    title/etc/shinken/modules/graphite.cfg
    broker__module_graphite_perfdata__inventory_server__address  0.0.0.0

    ( pour passer sa valeur de 127.0.0.1 à 0.0.0.0 )

    • définir à qui envoyer les modifications de l'inventaire si besoin (  uniquement si vous utilisez des outils externes comme Grafana pour consulter les métriques
    Code Block
    languagejs
    themeConfluence
    title/etc/shinken/modules/graphite.cfg
    broker__module_graphite_perfdata__inventory_push__url  http://IP_GRAPHITE/migrate
    Info

    Redémarrer l'Arbiter pour appliquer le changement de configuration

    Ouvrir le port du serveur d'inventaire sur le firewall ( firewalld )

    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

    Code Block
    languagetext
    themeEmacs
    firewall-cmd --list-ports
    Code Block
    languagetext
    themeEmacs
    titleExemple de résultat
    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 :

    Code Block
    languagetext
    themeEmacs
    firewall-cmd --add-port=52000/tcp
    firewall-cmd --runtime-to-permanent
    Compatibilité historique

    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 est configuré dans Graphite dans le fichier /opt/graphite/conf/mongodb.conf.

    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.

    Configuration de l'accès à MongoDB

    Pour se connecter au serveur Mongo, deux méthodes sont disponibles:

    • Connexion directe: Par défaut, mais non sécurisée.
    • Tunnel SSH: Shinken se connecte au serveur Mongo au travers d'un module SSH pour plus de sécurité
    Connexion directe au serveur Mongo

    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 la page 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é.
    Connexion par SSH au serveur Mongo

    Graphite peut également se connecter au serveur mongo par tunnel SSH ( pour des raisons de sécurité ).

    • En effet, le paramétrage de MongoDB ( /etc/mongod.conf ) permet de définir sur quelle adresse ce dernier écoute les requêtes.
      • En n'autorisant seulement l'adresse 127.0.0.1, cela évite d'ouvrir la base au monde extérieur.
        • Dans la configuration du serveur MongoDB ( /etc/mongod.conf ), assurez-vous que le paramètre "bind_ip " est positionné pour n'écouter que sur l'interface locale:
        • bind_ip= 127.0 . 0.1


    • Pour paramétrer la connexion à MongoDB depuis Graphite, il faut éditer les options suivantes ( dans /opt/graphite/conf/mongodb.conf ):

    NomTypeUnitéDéfautCommentaire
    No Format
    URI
    Texte--- mongodb://ADRESSE-SERVEUR-MONGO/?w=1&fsync=false

    URI du serveur Mongo
    L'adresse de la base Mongo à utiliser est celle configurée dans le module Graphite-Perfdata ( voir la page Module Graphite-Perfdata ).

    No Format
    DATABASE
    Texte--- shinken

    Nom de la base contenant les données d'inventaire sur le serveur Mongo

    No Format
    COLLECTION
    Texte--- metrology_inventory Nom de la collection contenant les données d'inventaire
    No Format
    USE_SSH_TUNNEL
    Booléen--- 0

    Activer la connexion à Mongo par Tunnel SSH

    No Format
    SSH_USER
    Texte--- shinken Utilisateur sur le serveur Mongo à contacter pour établir la connexion
    No Format
    SSH_KEYFILE
    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 )

    No Format
    SSH_TUNNEL_TIMEOUT
    Entier--- 5 Timeout utilisé pour tester le tunnel SSH avant de lancer la connexion mongo
    Info

    Après tous changements du fichier de configuration, penser à redémarrer Apache pour que Graphite prenne les modifications en compte

    Code Block
    languagetext
    themeEmacs
    titleCommande pour prendre en compte les changements de configuration dans Graphite :
    service httpd restart

    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 :

    • Générer une nouvelle clé SSH pour apache / graphite ( voir la page Création automatique et gestion de la clé SSH de l'utilisateur shinken )
      • Lors de la génération de la clé, il est possible de spécifier directement le chemin suivant : /opt/graphite/conf/id_rsa
      • Il faudra ajouter cette nouvelle clé publique ( /opt/graphite/conf/id_rsa.pub ) sur le/les serveurs MongoDB ( dans le fichier ~shinken/.ssh/authorized_keys   )
      • Cette clé sera indépendante et non impactée par un changement de clé SSH sur l'utilisateur "shinken".

    • Utiliser la clé SSH de l'utilisateur "shinken" présent sur le serveur.
      • La clé publique est sûrement déjà présente sur les serveurs MongoDB.
      • Il faut copier la clé privée et changer les droits pour l'utiliser et la maintenir à jour en cas de changement.

        Code Block
        languagetext
        themeEmacs
        cp /var/lib/shinken/.ssh/id_rsa* /opt/graphite/conf/
        chown apache:apache /opt/graphite/conf/id_rsa
    Warning
    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.

    Droits d'accès aux métriques

    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:

    Code Block
    languagetext
    themeEmacs
    chmod -R 0755 /opt/graphite/storage/ /var/log/graphite
    chown -R apache:apache /opt/graphite/storage/ /var/log/graphite

    Vérification du bon fonctionnement de graphite

    Vérification de carbon-cache, le demon écrivain

    Pour vérifier que le démon carbon-cache fonctionne, la première vérification est l’existence de son processus:


    Code Block
    languagetext
    themeEmacs
    $ 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:

    Code Block
    languagetext
    themeEmacs
    /etc/init.d/carbon-cache start


    S'il fonctionne, vérifiez qu'il écoute bien sur le port 2003:


    Code Block
    languagetext
    themeEmacs
    $ 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:

    • console.log: log principal du daemon
      • 16/06/2020 14:58:34 :: Log opened.  : démarrage du daemon
      • 16/06/2020 14:58:30 :: Sorted 378 cache queues in 0.000253 seconds : fonctionnement normal du démon qui toute les secondes vérifie son cache de données
      • 16/06/2020 14:58:33 :: Server Shut Down. : arrêt du daemon
    • query.log: log listant les connexions entrantes
      • 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

    • listener.log: log listant les connexions entrantes:
      • 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


    Vérification du firewall ( est ce que vous avez accès )

    Si vous n'arrivez toujours pas à vous connecter au carbon-cache vérifier que le port est ouvert dans votre firewall.

    Si vous avez firewalld ( firewall par défaut de la Redhat )

    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 :

    Code Block
    languagetext
    themeEmacs
    firewall-cmd --list-ports

     

    Code Block
    languagetext
    themeEmacs
    titleExemple de résultat
    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:

    Code Block
    languagetext
    themeEmacs
    firewall-cmd --add-port=2003/tcp
    firewall-cmd --runtime-to-permanent

    Vérification d'Apache, démon répondant aux requêtes de lectures

    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:


    Code Block
    languagetext
    themeEmacs
    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:

    Code Block
    languagetext
    themeEmacs
    service httpd start


    Les logs d'apache pour graphite sont dans les répertoires /var/log/graphite et /opt/graphite/storage/log/webapp :

    • exception.log : doit être vide, dans le cas contraire une erreur majeure est survenue
    • info.log : log principal d'activité de la partie application de graphite, avec notamment les mises à jour du mapping entre nom→uuids nécessaire par grafana
    • graphite-webapp.error.log: toutes les erreurs d'accès aux pages, équivalent des erreurs 404 ou 500 dans apache
    • graphite-webapp.access.log: log des accès réussis aux pages, équivalent des logs 200 d'apache

    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 )

    Migration des données entre la version 2.04.00 et 2.05.00

    Stockage des métriques en 2.04.00 et 2.05.00 (et plus)

    La différence principale entre les versions 2.04.00 et les versions suivantes (2.05.00 et plus) se situent dans ce qui est envoyé/enregistré par le daemon Graphite:

    • nom d'hôtes / nom de Checks / nom de métriques pour la 2.04.00
    • uuids d'hôtes / uuids de checks / nom de métriques pour la version 2.05.00

    La raison de ce changement concerne la possibilité depuis la 2.05.00 de renommer les hôtes et/ou les checks sans perdre les métriques associés aux éléments, ce qui n'était pas faisable en 2.04.00.

    Migration automatique

    En version 2.05.00 et supérieures, le module d'envoi des métriques (sur le broker ) vers Graphite s'assure à son démarrage ( avant d'envoyer les métriques donc ) que le daemon graphite a bien migré les données si besoin de leur anciens noms vers le nouveau (en uuids).

    • Pour cela, il contacte Graphite (via son application Web, donc sur le port HTTP/80 de Graphite via Apache )
    • et lui envoie une table de correspondante: nom (hôte ou check) → uuid.

    Graphite vérifie alors que s'il a encore de données répertoriées avec le nom, il les renomme en tant qu'uuids (il n'y a pas de copie de données, seuls les répertoires sont renommés via le processus de graphite ).

    Le module s'assure de cela à chaque démarrage au cas où:

    • un ancien backup de métrologie était restauré;
    • si un hôte/check était désactivé lors du premier lancement de la version 2.05.00 mais qu'il a été réactivé depuis

    Cette opération reposant uniquement sur un listing et un déplacement de répertoire, elle est extrêmement rapide et n'impacte pas les performances du serveur Graphite.