Grafana

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Plateforme de visualisation de métriques et de logs (tableaux de bord)
Licence Open source (AGPL), avec offres Cloud/Enterprise
Sources de données Prometheus, Elasticsearch/Loki, InfluxDB, MySQL...
Voir aussi Syslog · Grok · Octopussy · LOGZILLA

Grafana est une plateforme open source de visualisation de métriques et de logs sous forme de tableaux de bord (dashboards). Elle ne stocke pas les données elle-même : elle se connecte à une ou plusieurs sources de données (Prometheus pour des métriques, Elasticsearch ou Loki pour des logs, bases relationnelles...) et construit des graphiques, jauges et alertes à partir de requêtes exécutées sur ces sources. Dans une chaîne de journalisation, elle se positionne comme outil de visualisation, en complément d'un backend syslog (Rsyslog, Syslog-ng) qui reste chargé de la collecte proprement dite.

Installation (Debian/Ubuntu)

# apt-get install -y software-properties-common
# add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
# wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
# apt-get update
# apt-get install grafana

L'utilisation de apt-key est dépréciée depuis Debian 11/Ubuntu 22.04 (à vérifier selon la version cible) : préférer un trousseau de clés dédié avec l'option signed-by dans le fichier de dépôt plutôt que d'ajouter la clé au trousseau système global.

Démarrage du service :

# systemctl start grafana-server
# systemctl enable grafana-server

Installation (RHEL/CentOS)

tee /etc/yum.repos.d/grafana.repo << EOF
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF

# dnf install -y grafana
# systemctl daemon-reload
# systemctl start grafana-server
# systemctl enable grafana-server
# systemctl status grafana-server

Grafana écoute par défaut sur le port TCP 3000 ; penser à l'ouvrir dans le pare-feu si nécessaire :

# firewall-cmd --permanent --add-port=3000/tcp
# firewall-cmd --reload

Provisionner une source de données et un tableau de bord

Grafana peut être configuré as code : les sources de données et les tableaux de bord se déclarent dans des fichiers YAML/JSON déposés dans /etc/grafana/provisioning/, lus au démarrage du service plutôt que saisis manuellement dans l'interface.

Déclaration d'une source de données Prometheus :

# /etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://localhost:9090
    isDefault: true
    editable: false

Déclaration d'un fournisseur de tableaux de bord (les fichiers JSON de dashboard sont alors simplement déposés dans le répertoire indiqué) :

# /etc/grafana/provisioning/dashboards/app.yaml
apiVersion: 1
providers:
  - name: 'App monitoring'
    orgId: 1
    type: file
    updateIntervalSeconds: 10
    options:
      path: /etc/grafana/dashboards

Exemple de panneaux type pour un tableau de bord de supervision d'un pipeline de traitement asynchrone (file de messages + workers), à titre d'illustration du principe plutôt qu'à copier tel quel :

{
  "dashboard": {
    "title": "Pipeline de traitement — vue d'ensemble",
    "panels": [
      { "title": "Taux de succès",       "type": "stat",
        "targets": [{ "expr": "avg(rate(app_messages_total{status=\"success\"}[5m])) * 100" }] },
      { "title": "Taille des files",     "type": "bargauge",
        "targets": [{ "expr": "app_queue_size" }] },
      { "title": "Débit par file",       "type": "timeseries",
        "targets": [{ "expr": "rate(app_messages_total[1m])" }] },
      { "title": "Taux d'erreur",        "type": "timeseries",
        "targets": [{ "expr": "rate(app_errors_total[5m])" }] },
      { "title": "Messages en échec (DLQ)", "type": "stat",
        "targets": [{ "expr": "sum(app_queue_size{queue=~\"dlq.*\"})" }] }
    ],
    "refresh": "10s",
    "time": { "from": "now-6h", "to": "now" }
  }
}

Après dépôt des fichiers de provisioning, un redémarrage du service applique la configuration :

# systemctl restart grafana-server

Alerting par e-mail

Configuration du relais SMTP utilisé pour l'envoi des notifications d'alerte, dans /etc/grafana/grafana.ini :

[smtp]
enabled = true
host = smtp.example.com:587
user = alerting@example.com
password = <mot-de-passe-application>
from_address = alerting@example.com
from_name = Grafana Alert System

Les règles d'alerte elles-mêmes (seuils, durée avant déclenchement) peuvent également être provisionnées en YAML au même titre que les sources de données et les dashboards.

Voir aussi

  • Syslog — les backends syslog restent la source de collecte, Grafana n'en est que la vitrine
  • Grok — extraction de champs structurés en amont, avant visualisation
  • Octopussy · LOGZILLA — alternatives orientées analyse de logs syslog