Supervision Zabbix / Grafana¶
Concepts de supervision¶
La supervision est le socle operationnel de toute infrastructure. Elle permet de detecter les incidents avant qu'ils n'impactent les utilisateurs et de planifier les evolutions de capacite.
Que superviser ?¶
| Domaine | Objectif | Exemples |
|---|---|---|
| Disponibilite | Verifier que chaque service repond | Ping ICMP, port TCP ouvert, reponse HTTP 200 |
| Performance | Mesurer les temps de reponse et debits | Latence disque, temps de requete SQL, debit reseau |
| Capacite | Anticiper les saturations | Tendance CPU sur 30 jours, remplissage disque, memoire |
| Securite | Detecter les comportements anormaux | Connexions SSH echouees, certificats expirant, processus inconnus |
Polling vs Trapping¶
graph LR
subgraph POLLING["Polling (mode actif)"]
SRV1["Zabbix Server"] -->|"Demande la valeur"| AGT1["Agent"]
AGT1 -->|"Reponse"| SRV1
end
subgraph TRAPPING["Trapping (mode passif)"]
AGT2["Agent / Sender"] -->|"Envoie la valeur"| SRV2["Zabbix Server"]
end
- Polling : le serveur interroge l'agent a intervalle regulier (par defaut 30s-60s). Simple a configurer, mais genere du trafic sortant depuis le serveur.
- Trapping : l'agent envoie la donnee de sa propre initiative (zabbix_sender, SNMP trap). Indispensable pour les evenements asynchrones (syslog, SNMP trap d'un switch).
Agent vs Agentless¶
| Methode | Protocole | Cas d'usage |
|---|---|---|
| Agent 2 (Go) | TCP 10050 | Serveurs Linux/Windows, metriques detaillees |
| SNMP v3 | UDP 161 | Switches, routeurs, imprimantes reseau |
| IPMI | UDP 623 | BMC/iLO/iDRAC, capteurs hardware |
| HTTP/API | TCP 443 | Applications web, API REST, endpoints sante |
| JMX | TCP 12345 | Applications Java (Tomcat, Kafka, Elasticsearch) |
Pourquoi Zabbix Agent 2 ?
Reecrit en Go (vs C pour l'Agent 1), il supporte nativement les plugins (Docker, PostgreSQL, MongoDB, certificats TLS) et maintient une connexion TCP persistante avec le serveur/proxy, reduisant la charge reseau et les temps de latence.
Architecture Zabbix¶
L'architecture de Zabbix repose sur trois niveaux : collecte, aggregation et traitement.
graph TB
subgraph AGENTS["Couche Collecte"]
A1["Agents Linux<br/>(15 VMs)"]
A2["Agents Windows<br/>(4 VMs)"]
A3["SNMP<br/>(Switches/FW)"]
A4["Docker Plugin<br/>(Conteneurs)"]
end
subgraph PROXIES["Couche Aggregation"]
P1["Proxy Infra<br/>(VLAN 101-105)"]
P2["Proxy SOC<br/>(VLAN 200)"]
end
subgraph CENTRAL["Couche Traitement"]
ZS["Zabbix Server<br/>INF-ASUP11A<br/>10.15.100.209"]
DB["PostgreSQL<br/>TimescaleDB"]
ZS --> DB
end
GRAFANA["Grafana<br/>Dashboards & Alertes"]
A1 -->|"TCP 10051"| P1
A2 -->|"TCP 10051"| P1
A3 -->|"SNMP v3"| P1
A4 -->|"TCP 10051"| P2
P1 -->|"TLS PSK<br/>compresse"| ZS
P2 -->|"TLS PSK<br/>compresse"| ZS
DB -->|"API Zabbix"| GRAFANA
GRAFANA -->|"HTTPS"| OPS["Equipe Ops"]
Zabbix Server¶
Le serveur central est le cerveau du systeme. Il remplit quatre fonctions principales :
- Traitement des donnees : reception des metriques, calcul des valeurs derivees (delta, moyenne mobile)
- Evaluation des triggers : comparaison en continu des valeurs aux seuils definis
- Notifications : envoi d'alertes par email, Telegram, webhook vers le SOC
- Configuration : stockage centralise des templates, hosts, macros
Zabbix Proxies¶
Les proxies sont des relais deployes dans chaque zone reseau. Ils apportent :
- Collection distribuee : reduisent la charge du serveur central en pre-traitant les donnees
- Buffering local : en cas de coupure reseau, les metriques sont stockees localement (SQLite) et reinjectees automatiquement a la reconnexion
- Reduction du trafic : compression des donnees avant envoi, une seule connexion TLS par proxy
Resilience des proxies
Un proxy peut bufferiser jusqu'a plusieurs heures de metriques localement. En cas de maintenance reseau planifiee, aucune donnee n'est perdue.
Zabbix Agent 2¶
| Caracteristique | Detail |
|---|---|
| Langage | Go (binaire statique, pas de dependances) |
| Connexion | TCP persistante (vs connexion par requete pour Agent 1) |
| Plugins natifs | Docker, PostgreSQL, MySQL, MongoDB, Redis, certificats X.509, systemd |
| Pre-traitement | JSONPath, XML XPath, regex, expressions arithmetiques cote agent |
| Securite | Chiffrement TLS PSK ou certificats, verification identite serveur |
Grafana¶
Grafana est la couche de visualisation et d'analyse de la plateforme de supervision.
Concepts Grafana¶
| Concept | Description |
|---|---|
| Datasource | Connecteur vers une source de donnees (Zabbix API, Prometheus, PostgreSQL, Loki) |
| Dashboard | Collection de panels organises pour un cas d'usage (vue infra, vue service) |
| Panel | Graphique individuel : time series, gauge, stat, table, heatmap, logs |
| Alerting | Regles d'alerte evaluees cote Grafana, independantes de Zabbix |
| Annotations | Marqueurs temporels sur les graphiques (deploiement, incident, maintenance) |
| Variables | Filtres dynamiques en haut du dashboard (host, groupe, template) |
Dashboards deployes¶
| Dashboard | Contenu | Audience |
|---|---|---|
| Vue Infrastructure | CPU, RAM, disque, reseau de toutes les VMs | Ops |
| Vue Services | Etat des services critiques (AD, DNS, Mail, Vault) | Ops + Management |
| Vue Securite | Connexions SSH, certificats, alertes Wazuh | SOC |
| Vue Capacite | Tendances 30/60/90 jours, projections | Architecture |
| Vue Docker | CPU/RAM/reseau par conteneur, restart count | DevOps |
Flux de supervision¶
Le cheminement complet d'une metrique, de la collecte a l'affichage :
sequenceDiagram
participant Agent as Agent 2
participant Proxy as Proxy
participant Server as Zabbix Server
participant DB as PostgreSQL
participant Grafana as Grafana
participant Ops as Equipe Ops
Agent->>Proxy: 1. Collecte metrique (TCP 10051)
Note over Proxy: Buffering local + pre-traitement
Proxy->>Server: 2. Envoi TLS compresse
Server->>Server: 3. Evaluation triggers
Server->>DB: 4. Persistence en base
alt Trigger declenche
Server->>Ops: 5a. Notification (email/Telegram)
end
Grafana->>DB: 5b. Requete periodique
Grafana->>Ops: 6. Dashboard temps reel (HTTPS)
Triggers et alertes¶
Les triggers sont des expressions logiques evaluees en continu par le serveur Zabbix.
Fonctionnement d'un trigger¶
Un trigger compare une valeur collectee a un seuil et change d'etat :
- OK : la condition n'est pas remplie (fonctionnement normal)
- PROBLEM : la condition est remplie (seuil depasse)
Exemple d'expression : avg(/host/system.cpu.util,5m) > 90 -- alerte si le CPU moyen depasse 90% sur 5 minutes.
Niveaux de severite¶
| Severite | Couleur | Exemple | Action |
|---|---|---|---|
| Not classified | Gris | Information de debug | Aucune |
| Information | Bleu | Service redemarre proprement | Log |
| Warning | Jaune | Disque a 80% | Notification equipe |
| Average | Orange | CPU > 85% depuis 10 min | Notification + ticket |
| High | Rouge | Service critique arrete | Alerte immediate |
| Disaster | Rouge vif | Serveur injoignable | Escalade + astreinte |
Escalade des alertes¶
graph TD
T["Trigger PROBLEM"] --> S1["Etape 1 : Email equipe Ops<br/>(immediat)"]
S1 -->|"15 min sans acquittement"| S2["Etape 2 : Notification Telegram<br/>(rappel)"]
S2 -->|"30 min sans acquittement"| S3["Etape 3 : Appel astreinte<br/>(escalade)"]
S3 -->|"60 min sans acquittement"| S4["Etape 4 : Alerte direction<br/>(crise)"]
Attention au bruit
Trop d'alertes non pertinentes desensibilisent les equipes (alert fatigue). Il faut calibrer les seuils progressivement et utiliser les dependances de triggers pour eviter les cascades (si le switch est down, ne pas alerter pour chaque VM derriere).
Elements supervises¶
| Categorie | Metriques | Methode |
|---|---|---|
| CPU | Utilisation %, load average, iowait, steal (VM) | Agent 2 |
| Memoire | Utilisation %, swap usage, cache/buffers | Agent 2 |
| Disque | Espace libre, IOPS, latence, prediction remplissage | Agent 2 |
| Reseau | Debit in/out, erreurs, drops, connexions etablies | Agent 2 / SNMP |
| Services | Etat systemd, port TCP, reponse HTTP, temps de reponse | Agent 2 |
| Certificats | Date expiration TLS, chaine de confiance, CN/SAN | Plugin certificats |
| Docker | CPU/RAM par conteneur, restart count, etat sante | Plugin Docker |
| Applications | Endpoints /health, metriques metier, files d'attente | HTTP Agent |
Supervision des certificats
Les certificats TLS emis par la PKI Vault ont des durees de vie courtes (30-90 jours). Un trigger Warning a J-14 et High a J-7 avant expiration evite les interruptions de service.
Lab¶
| VM | IP | VLAN | Specs | Role |
|---|---|---|---|---|
| INF-ASUP11A | 10.15.100.209 | 103 (Supervision) | 2 vCPU, 8 Go RAM | Zabbix Server + PostgreSQL |
Perimetre de supervision
Les agents Zabbix 2 sont deployes sur les 21 VMs de l'infrastructure. Chaque agent remonte en moyenne 150 a 300 items, soit environ 4500 a 6300 metriques collectees toutes les 30 a 60 secondes.
| Groupe de hosts | Nombre de VMs | Exemples |
|---|---|---|
| Serveurs Infra | 8 | AD, DNS, DHCP, NTP, Vault, GitLab |
| Serveurs Applicatifs | 5 | Mail, Nextcloud, Web, BDD |
| Serveurs SOC | 4 | Wazuh, ELK, TheHive, MISP |
| Serveurs Cloud | 3 | OpenStack controllers |
| Proxy / Reverse Proxy | 2 | Squid, HAProxy |