Monitoring

Grafana

Cheatsheet Grafana — dashboards, panels, alerting et data sources

grafanadashboardsvisualisationmonitoringalerting

Architecture

Grafana est la couche de visualisation. Il se connecte à des data sources pour afficher des dashboards.

┌────────────┐     ┌────────────┐     ┌────────────┐
│ Prometheus  │     │   Loki      │     │ PostgreSQL  │
└──────┬─────┘     └──────┬─────┘     └──────┬─────┘
       │                  │                  │
       └──────────────────┴──────────────────┘
                          │
                   ┌──────┴──────┐
                   │   Grafana    │
                   │  Dashboards  │
                   └─────────────┘

Data sources courantes

Data SourceUsage
PrometheusMétriques time-series
LokiLogs agrégés
ElasticsearchLogs et search
PostgreSQLDonnées relationnelles
CloudWatchMétriques AWS
InfluxDBTime-series IoT

Panels essentiels

Time series

Le panel le plus utilisé. Affiche des métriques au fil du temps.

# Requêtes par seconde
sum(rate(http_requests_total[5m])) by (handler)

Stat

Affiche une valeur unique avec un trend.

# Uptime
avg(up{job="api"}) * 100

Gauge

Affiche une valeur avec des seuils colorés.

# Utilisation CPU
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Table

Données tabulaires, utile pour les tops et inventaires.

# Top endpoints par latence P99
topk(10,
  histogram_quantile(0.99,
    sum by (handler, le) (rate(http_request_duration_seconds_bucket[5m]))
  )
)

Heatmap

Distribution de latence dans le temps.

sum by (le) (rate(http_request_duration_seconds_bucket[5m]))

Logs panel

Affiche les logs depuis Loki ou Elasticsearch.

{app="api"} |= "error" | json | level="error"

Variables de dashboard

Les variables rendent les dashboards dynamiques et réutilisables.

# Variable "instance" depuis Prometheus
label_values(up{job="api"}, instance)

# Variable "environment"
label_values(up, environment)

# Utilisation dans une requête
rate(http_requests_total{instance="$instance"}[5m])

Alerting Grafana

# Alert rule dans Grafana
Condition: WHEN avg() OF query(A, 5m, now) IS ABOVE 0.95
For: 10m
Labels:
  severity: critical
  team: platform
Annotations:
  summary: "CPU usage above 95% for {{ $labels.instance }}"

Notification channels

ChannelUsage
SlackNotifications équipe
PagerDutyAstreinte, incidents critiques
EmailRapports, notifications non urgentes
WebhookIntegration custom
OpsGenieGestion d'incidents

Dashboard as Code

Grafana supporte le provisioning de dashboards via JSON.

{
  "dashboard": {
    "title": "API Overview",
    "panels": [
      {
        "title": "Request Rate",
        "type": "timeseries",
        "targets": [
          {
            "expr": "sum(rate(http_requests_total[5m])) by (status)"
          }
        ]
      }
    ]
  }
}

Provisioning automatique

# provisioning/dashboards/dashboards.yml
apiVersion: 1
providers:
  - name: default
    folder: ''
    type: file
    options:
      path: /var/lib/grafana/dashboards
      foldersFromFilesStructure: true

Dashboards recommandés

SRE Golden Signals

  1. Latence : P50, P95, P99 des temps de réponse
  2. Trafic : Requêtes par seconde
  3. Erreurs : Taux d'erreur 4xx et 5xx
  4. Saturation : CPU, mémoire, connections DB

Infrastructure

  • Node Exporter : CPU, mémoire, disque, réseau par node
  • Container metrics : CPU/mémoire par pod (cAdvisor)
  • Kubernetes : pods, deployments, nodes, events

Bonnes pratiques

  • Un dashboard par service : pas de mega-dashboard
  • Variables : rendre les dashboards paramétrables
  • Annotations : marquer les déploiements et incidents
  • Seuils : vert/jaune/rouge pour chaque métrique
  • Dashboard as Code : versionner les dashboards en Git
  • Folders : organiser par équipe ou domaine