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 Source | Usage |
|---|---|
| Prometheus | Métriques time-series |
| Loki | Logs agrégés |
| Elasticsearch | Logs et search |
| PostgreSQL | Données relationnelles |
| CloudWatch | Métriques AWS |
| InfluxDB | Time-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"}) * 100Gauge
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
| Channel | Usage |
|---|---|
| Slack | Notifications équipe |
| PagerDuty | Astreinte, incidents critiques |
| Rapports, notifications non urgentes | |
| Webhook | Integration custom |
| OpsGenie | Gestion 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: trueDashboards recommandés
SRE Golden Signals
- Latence : P50, P95, P99 des temps de réponse
- Trafic : Requêtes par seconde
- Erreurs : Taux d'erreur 4xx et 5xx
- 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