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