Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Scroll Ignore
scroll-pdftrue
scroll-officetrue
scroll-chmtrue
scroll-docbooktrue
scroll-eclipsehelptrue
scroll-epubtrue
scroll-htmltrue
Panel
titleSommaire

Table of Contents
stylenone

Introduction

Grafana est une plateforme permettant de créer des tableaux de bord de visualisation pour les métriques. Dans ces tableaux de bord, la création de différents types de widget et de nombreuses options sont disponibles pour la visualisation des métriques.

Plus de détails sont disponibles sur le site officiel: https://grafana.com/

Warning

Les versions suivantes comportent une failles de sécurité critique (CVE-2021-43798). Nous vous déconseillons de les installer :

  • 8.0.0 à 8.0.6
  • 8.1.0 à 8.1.7
  • 8.2.0 à 8.2.6
  • 8.3.0

Installation

L'installation de Grafana sous CentOS se fait via un paquet RPM. La version de Grafana testée avec Shinken Entreprise est la v7.4.2.

Pour l'installer, utiliser la commande suivante:

Code Block
yum install https://dl.grafana.com/enterprise/release/grafana-enterprise-8.3.2-1.x86_64.rpm

Une fois l'installation terminée, le lancement de Grafana dépend de la version de CentOS utilisée.

  • Sous CentOS 6

    Code Block
    chkconfig grafana-server on
    service grafana-server start
  • Sous CentOS 7

    Code Block
    systemctl enable grafana-server
    systemctl start grafana-server

Après avoir installé puis lancé Grafana, l'interface sera accessible sur le port 3000. Les identifiants par défaut sont admin/admin

Connexion avec Graphite

Pour pouvoir récupérer les métriques générées par Shinken et enregistrées dans Graphite. Grafana doit avoir accès à Graphite. Pour cela, il faut ajouter dans Grafana une source de données Graphite.

Dans l'interface, aller dans la catégorie Data Sources , puis ajouter une nouvelle source de type Graphite, qui sera paramétrée comme suivant:

  • URL: adresse du serveur hébergeant Graphite, sur le port 80. Par exemple: 

    Code Block
    http://localhost:80
  • Version: La version de Graphite utilisée, Shinken utilise la version 0.9.10 de Graphite. Il faut donc choisir 0.9.x


Panel



Si Grafana est installé sur un serveur différent du serveur Graphite, il faudra effectuer une étape de configuration supplémentaire. Par défaut, Graphite autorise seulement les connexions locales.

Pour permettre à des serveurs distants d'accéder à ses données, il faut le fichier de configuration Apache de Graphite /etc/httpd/conf.d/graphite.conf :

  • Changer la ligne :

    Code Block
    <VirtualHost 127.0.0.1:80>
  • En :

    Code Block
    <VirtualHost 0.0.0.0:80>

    Cette ligne permet de spécifier les interfaces réseau de la machine sur lesquelles effectuer l'écoute. Spécifier 0.0.0.0 ou * permettent d'écouter sur toutes les interfaces réseau. On peut mettre une seule interface à la place en spécifiant l'IP de l'interface réseau concernée.

  • Redémarrer Apache pour prendre en compte les modifications
    Sur CentOS 6:

    Code Block
    service httpd restart


    Sur CentOS 7:

    Code Block
    systemctl restart httpd

L'installation et la connexion de Grafana avec Graphite sont maintenant terminées.

Vous pouvez maintenant créer des tableaux de bord, ajouter des utilisateurs et permettre la visualisation des métriques de Shinken.

Intégration dans Shinken

Par défaut, cette version n'accepte pas d'être intégrée dans un widget page web (pour plus de détail sur la configuration du widget voir la page : Widget Page web).

Warning

Si l'authentification est activée dans Grafana et que vous souhaitez l'intégrer dans un widget web, il faut que Grafana soit accessible depuis la même adresse IP ou même le nom de domaine (exemple: shinken-solution.com est un nom de domaine) . Sans quoi le blocage CORS des navigateurs bloquera la connexion à Grafana.


Pour l'activer vous devez éditer le fichier de configuration Grafana /etc/grafana/grafana.ini dans la section "[security]":

Code Block
allow_embedding = true

Puis redémarrer Grafana


Sur CentOS 6:

Code Block
service grafana-server restart


Sur CentOS 7:

Code Block
systemctl restart grafana-server

Créer un tableau de bord (dashbord)

Pour créer un tableau de bord,

  1. Cliquer sur le "+", "Create", puis "Add new panel".



  2. Définir un nom dans le menu de droite et dans la partie basse de l'écran, vous avez la composition de la requête.
    Pour générer un graphe, il faut cliquer sur "select metric", puis ajouter la métrique souhaitée.



  3. Il faut sélectionner l’intervalle de visualisation.


Une fois terminé, le bouton "Save" en haut à droite, va sauvegarde le panneau dans le tableau de bord. Le nom inscrit sera le nom du tableau de bord qui peut être composé de plusieurs panneaux.

Récupération de l'URL à intégrer dans Shinken

Pour centraliser la visualisation des éléments supervisés par Shinken, il est possible d'intégrer les tableaux de bord Grafana dans un tableau de bord Shinken en utilisant la Widget Page web.

Par exemple :

Panel

  1. Allez sur votre panneau et cliquer sur share :



  2. Dans l'onglet "Embed", sélectionnez le line comme ci-dessous :



    Pour obtenir un graphique évolutif en temps réel, remplacer dans le lien, toute la partie "from=XXXX&to=XXXX" par "from=now-6h&to=now" pour avoir un intervalle de 6h de visualisation.

  3. Copier ce lien dans votre widget Page web.

    Exemple :




    Code Block
    http://adresse_serveur:3000/d-solo/sLWNXIsMk/synchronizer?orgId=1&from=now-6h&to=now&panelId=2


    Décomposition de l'adresse :

    ParamètreDéfinition
    adresse_serveurAdresse IP / Nom DNS du serveur
    3000Port par défaut de Grafana
    d-soloPermet de cacher les barres de navigation de Grafana pour n'afficher que les éléments visualisés 
    synchronizerNom du tableau de bord
    from=now-6hIntervalle d'affichage du graphes sur 6h
    to=nowIntervalle jusqu'à maintenant
    panelId=2Numéro du panneau dans le tableau de bord


Passage en HTTPS

Dans le fichier de configuration de Grafana ( /etc/grafana/grafana.ini ),

Ajoutez :

Code Block
protocol = https
cert_file = /chemin/vers/server.cert
cert_key = /chemin/vers/server.key


Puis redémarrer Grafana :

  • Sur CentOS 6 :

    Code Block
    service grafana-server restart
  • Sur CentOS 7:

    Code Block
    systemctl restart grafana-server

Lien vers la mapping nom→uuid nécessaire pour grafana, et suivi des requêtes

Lors de l'utilisation de Grafana, les requêtes vont arriver dans le serveur Apache de Graphite avec des noms et non pas des uuids comme dans l'interface de visualisation qui elle fonctionne avec des uuids.

Pour cela il faut que le serveur Apache ait accès à un mapping entre les noms et les uuids. Il faut le lier à la base SLA qui a en son sein ce mapping.

Cette configuration se fait au sein du fichier /opt/graphite/conf/mongodb.conf via le champ URI.

Code Block
title/opt/graphite/conf/mongodb.conf
URI=mongodb://localhost/?w=1&fsync=false
Warning
Lors de l'utilisation d'un cluster graphite, le serveur Carbon-Relay ainsi que tous les Carbon-Cache doivent lier leur serveur Apache à la base de données SLA


Les logs de cette connexion se font au sein du fichier /var/log/graphite/info.log

Les logs de mise à jour du cache seront activés. Si vous souhaitez suivre la mise à jour du mapping nom → uuid et les requêtes pour un hôte particulier, vous pouvez remplir le fichier /opt/graphite/storage/whisper/.apache_graphite_host_filter_log avec le nom de l'hôte. Vous verrez sa mise à jour dans le mapping, ainsi que les requêtes de recherches de métriques le concernant.


Anchor
GrafanaTunnelSSH
GrafanaTunnelSSH

Sécurisation de la connexion Graphite → MongoDB ( via un tunnel SSH )

Comme toutes les connexions vers MongoDB, il est possible, et même recommandé, de sécuriser la communication via un tunnel chiffré SSH.

Ceci se défini dans le fichier /opt/graphite/conf/mongodb.conf avec les paramètres :


NomTypeUnitéDéfautCommentaire
Code Block
URI
Texte---mongodb://localhost/?w=1&fsync=falseURI vers le serveur SLA, où tous les noms d’hôtes et de checks sont enregistrés pour la traduction uuid
Code Block
USE_SSH_TUNNEL
Booléen---0

Paramètre permettant d'activer ou non l'utilisation d'un tunnel SSH
Valeurs possibles :

  • 0
  • 1
Code Block
SSH_USER
Texte---shinkenNom distant de l'utilisateur de connexion
Code Block
SSH_KEYFILE
Texte---/opt/graphite/conf/id_rsaChemin vers la clé SSH privée utilisée
Code Block
SSH_TUNNEL_TIMEOUT
Nombreseconde
Durée du timeout au bout duquel on détermine si l'établissement du tunnel a échoué
Code Block
DATABASE
Texte---shinkenBase de données utilisée pour stocker les données SLA



Graphite étant hébergé par le service apache, il n'a donc pas accès au répertoire /var/lib/shinken et donc pas accès à la clé SSH /var/lib/shinken/.ssh/id_rsa. C'est pour cette raison que la clé SSH est situé dans /opt/graphite/conf/id_rsa.

Deux solutions s'offrent à vous :

  • Générer une nouvelle clé SSH pour apache / graphite à l'aide de la page suivante : 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.
    • Cette clé sera indépendante et non impacté 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
      languagebash
      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 apache n'a pas les droits d'aller lire le fichier originel.

Mise à jour d'une version supérieur à 5.4.0

Il faut simplement lancer la commande suivante :

Code Block
yum update https://dl.grafana.com/enterprise/release/grafana-enterprise-X.X.X.x86_64.rpm


Pour la partie intégration avec le widget web de Shinken, si le paramètre "allow_embedding" ne se trouve pas dans le fichier /etc/grafana/grafana.ini, vous pouvez l'ajouter dans la section "[security]" de ce fichier :

Code Block
[security]
allow_embedding = true


Vous pouvez redémarrer grafana :

Sur CentOS 6:

Code Block
service grafana-server restart


Sur CentOS 7:

Code Block
systemctl restart grafana-server


 Une fois Grafana mis à jour, il suffit de rafraîchir la page et de s'authentifier

Authentification avec le widget Page Web

Pour fonctionner avec le widget Page Web, Grafana va nécessiter un paramétrage spécifique. L'authentification se fait avec des cookies. Dans les dernières versions de Chrome/Internet Explorer/Edge ( Firefox n'est pas concerné ), l'utilisation de requête "cross-site" par un cookie n'est plus autorisé. Ça signifie que si l'application n'est pas installé sur le même serveur que la WebUI de Shinken, l'authentification depuis le widget Page Web ne fonctionnera pas.


Pour palier à ce problème, nous allons utiliser HAProxy ( Version 1.5.18 ) pour récupérer le flux de ce site et simuler sa présence sur le serveur où est installé la WebUI.

Configuration

Dans le cas ou vous souhaitez afficher des graphes d'un Grafana qui n'est pas installé sur le serveur ou se trouve la WebUI Shinken. Il faut installer HAProxy sur chacun des serveurs ou vous souhaitez afficher ces graphes dans le widget Page Web.

Code Block
yum install haproxy


Ajouter une exception dans SELinux pour HAProxy:

Code Block
setsebool -P haproxy_connect_any=1


Modifier le fichier de configuration /etc/haproxy/haproxy.cfg et le remplir avec ces informations :

Code Block
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

listen  grafana
  bind    SERVEUR_WEBUI:3000
  server    SERVEUR_GRAFANA SERVEUR_GRAFANA:3000
Warning

Il faut remplacer SERVEUR_WEBUI et SERVEUR_GRAFANA par le nom/ip des serveurs en questions


Démarrer HAProxy

Code Block
systemctl enable haproxy
systemctl start haproxy


Vous pouvez ajouter l'URL suivante dans le widget Page Web : http://SERVEUR_WEBUI:3000/XXXXXXX mais pas http://SERVEUR_GRAFANA:3000/XXXXXXX La première authentification est nécessaire.

Log HAProxy

Par défaut HAProxy n'a pas de fichier de log. Si vous souhaitez en générer un il faut :

Éditer le fichier /etc/rsyslog.conf et décommenter les lignes suivantes :

Code Block
$ModLoad imudp
$UDPServerRun 514


Créer et ajouter dans le fichier /etc/rsyslog.d/haproxy.conf :

Code Block
local2.* /var/log/haproxy.log


Redémarrer rsyslog et haproxy :

Code Block
systemctl restart rsyslog
systemctl restart haproxy