Monitoring Infrastructure (Roadmap)¶
Vue d'ensemble¶
Stack de monitoring avancé et observabilité complète pour l'infrastructure.
Statut : Non implémenté. Le monitoring de base est opérationnel (voir ci-dessous) ; cette roadmap couvre uniquement la couche avancée (métriques time-series, logs centralisés, dashboards).
État actuel — Monitoring simple (opérationnel)¶
Le monitoring de base est assuré par Uptime Kuma (LXC 101) avec alertes email sur tous les incidents.
| Groupe | Ce qui est surveillé |
|---|---|
| Réseau | Freebox (ping), DNS Cloudflare, DNS Google |
| Proxmox VE | WebUI, node status, statut des 6 LXC via API Proxmox |
| LXC 100 – Média | Jellyfin, Sonarr, Radarr, Prowlarr, Bazarr, SABnzbd, Seerr, Torznab Proxy, Tdarr |
| LXC 101 – Management | Homepage, Portainer, Zensical, CoolerControl, Uptime Kuma |
| LXC 102 – PBS | PBS WebUI |
| LXC 103 – Network Gateway | Caddy (HTTP/HTTPS ports), Authelia |
| LXC 104 – Services | Endurain, FreshRSS, Romm |
| LXC 105 – Web | WP nliautaud.fr, WP alicesuretcanale.fr, WP lmdp.ncls.ltd |
| Domaines HTTPS publics | 17 domaines (ncls.ltd, *.ncls.ltd, nliautaud.fr, alicesuretcanale.fr) avec vérification expiry SSL |
| Espaces Disques | root, lxc-data, scratch, media, storage, pbs-secondary, ZFS rpool/data, ZFS rpool/pbs (seuils configurés, push toutes les 3 min) |
| Températures & Ventilateurs | CPU Package, carte mère, ventilateurs 1 & 2, HDD sdc (HGST 4TB), HDD sdd (IronWolf 4TB) via Glances/smartctl |
En complément, Glances tourne sur le host (:61208) pour les métriques système temps réel.
Ce que ce monitoring ne couvre pas (justification de la roadmap)¶
- Pas d'historique de métriques (CPU, RAM, réseau) — Uptime Kuma ne fait que du up/down
- Pas de métriques détaillées Caddy (requêtes/s, latences, status codes, upstreams)
- Pas de logs centralisés — impossible de corréler un incident avec les logs Caddy ou Docker
- Pas de métriques containers Docker (RAM/CPU par container)
- Pas de dashboards agrégés pour visualiser les tendances sur plusieurs jours/semaines
Stack cible¶
┌─────────────────────────────────────────────────────────┐
│ Grafana Dashboards │
│ https://monitoring.ncls.ltd │
└────────────────────┬────────────────────────────────────┘
│
┌───────┴────────┐
│ │
┌────▼───┐ ┌───▼────┐
│Prometheus│ │ Loki │
│(Metrics)│ │ (Logs) │
└────┬───┘ └───┬────┘
│ │
┌─────────┼───────┐ ┌───┴──────┐
│ │ │ │ │
┌──▼──┐ ┌───▼──┐ ┌──▼──┐ ┌────────▼─┐
│Caddy│ │ PVE │ │cAdv.│ │ Promtail │
│Exp. │ │ Exp. │ │ │ │(caddy, │
└─────┘ └──────┘ └─────┘ │ docker) │
└──────────┘
Composants¶
1. Prometheus (Métriques)¶
Image: prom/prometheus:latest
Port: 9090
Fonction: Collecte et stockage métriques time-series
Exporters à ajouter :
- Caddy via admin API (
localhost:2019/metrics) — métriques natives Prometheus node_exporter- Métriques système (CPU, RAM, Disk, Network)cadvisor- Métriques conteneurs Dockerpve_exporter- Métriques Proxmox VE
Métriques Caddy (native Prometheus) :
# Via http://caddy:2019/metrics (format Prometheus natif)
caddy_http_requests_total
caddy_http_request_duration_seconds
caddy_http_response_size_bytes
caddy_reverse_proxy_upstreams_healthy
2. Grafana (Visualisation)¶
Image: grafana/grafana:latest
Port: 3001
Fonction: Dashboards et alerting
Dashboards recommandés :
- Caddy Metrics (custom ou Grafana community)
- Docker & System Monitoring (ID: 893)
- Proxmox VE Cluster (ID: 10347)
- Authelia SSO Stats (custom)
3. Loki (Logs)¶
Image: grafana/loki:latest
Port: 3100
Fonction: Agrégation logs
Sources :
- Logs Caddy (
/var/log/caddy/*.log) - Logs Docker (
docker logs) - Logs système LXC
4. Promtail (Agent Loki)¶
Image: grafana/promtail:latest
Fonction: Collecte et envoi logs vers Loki
Configuration Caddy pour monitoring¶
Caddy expose nativement des métriques Prometheus via son admin API. Il suffit d'activer le endpoint dans le Caddyfile global :
Les métriques sont accessibles à http://127.0.0.1:2019/metrics (admin API, interne au container uniquement).
Configurer le scrape Prometheus :
# prometheus.yml
scrape_configs:
- job_name: "caddy"
static_configs:
- targets: ["caddy:2019"]
labels:
instance: "lxc-103-caddy"
Docker Compose complet (futur)¶
version: "3.8"
services:
# Existing services (caddy, authelia, wireguard)
# ...
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=30d"
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./monitoring/prometheus/data:/prometheus
networks:
- proxy
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
- GF_SERVER_ROOT_URL=https://monitoring.ncls.ltd
volumes:
- ./monitoring/grafana/data:/var/lib/grafana
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning
networks:
- proxy
depends_on:
- prometheus
- loki
loki:
image: grafana/loki:latest
container_name: loki
restart: unless-stopped
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ./monitoring/loki/data:/loki
- ./monitoring/loki/config.yaml:/etc/loki/local-config.yaml:ro
networks:
- proxy
promtail:
image: grafana/promtail:latest
container_name: promtail
restart: unless-stopped
volumes:
- ./monitoring/promtail/config.yaml:/etc/promtail/config.yaml:ro
- ./caddy/logs:/var/log/caddy:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
command: -config.file=/etc/promtail/config.yaml
networks:
- proxy
depends_on:
- loki
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
command:
- "--path.rootfs=/host"
ports:
- "9100:9100"
volumes:
- /:/host:ro,rslave
networks:
- proxy
Proxy host Grafana¶
Ajouter dans le Caddyfile (LXC 103) :
Alerting (exemples)¶
Prometheus alerting rules¶
Fichier : monitoring/prometheus/alerts.yml
groups:
- name: caddy_alerts
interval: 30s
rules:
- alert: CaddyDown
expr: up{job="caddy"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Caddy is down"
- alert: HighErrorRate
expr: rate(caddy_http_requests_total{code=~"5.."}[5m]) > 0.05
for: 5m
labels:
severity: warning
annotations:
summary: "High 5xx error rate on {{ $labels.host }}"
- alert: SSLCertExpiringSoon
expr: (caddy_tls_certificates_expiry_seconds < 86400 * 7)
for: 1h
labels:
severity: warning
annotations:
summary: "SSL certificate expiring in < 7 days"
Métriques business (exemples)¶
# Top 5 services les plus utilisés
topk(5, sum by (host) (rate(caddy_http_requests_total[1h])))
# Temps de réponse moyen par service
avg by (host) (caddy_http_request_duration_seconds)
# Taux d'erreur Authelia
rate(caddy_http_requests_total{host="auth.ncls.ltd", code=~"5.."}[5m])
# Bande passante par service
sum by (host) (rate(caddy_http_response_size_bytes[5m]))
Prochaines étapes¶
L'alerting de base (services up/down, disques, températures, SSL) est déjà couvert par Uptime Kuma. Les phases suivantes apportent la couche métriques historiques et logs centralisés, orthogonale à Uptime Kuma.
-
Phase 1 : Métriques Caddy (priorité haute)
- Activer métriques Prometheus dans le Caddyfile (
servers { metrics }) → déployer Prometheus - Dashboard Grafana : requêtes/s par domaine, latences p95, taux d'erreur 5xx
- Activer métriques Prometheus dans le Caddyfile (
-
Phase 2 : Logs centralisés
- Ajouter Loki + Promtail (logs Caddy + Docker)
- Corrélation logs ↔ métriques dans Grafana
-
Phase 3 : Infrastructure complète
cadvisorpour métriques RAM/CPU par container Dockerpve_exporterpour métriques Proxmox VE (CPU/RAM des LXC dans le temps)node_exportersi besoin de métriques réseau/IO granulaires au niveau host
-
Phase 4 : Alerting avancé (optionnel — Uptime Kuma couvre déjà l'essentiel)
- Alertmanager pour règles PromQL (taux d'erreur, latence)
- Notifications Discord en complément de l'email existant
Ressources¶
Estimation ressources¶
Déploiement dans LXC 103 (Caddy co-location) :
- RAM : +1,5 GB (Prometheus 512MB, Grafana 512MB, Loki 512MB) — LXC 103 actuellement à 2GB
- Disk : +20 GB (rétention métriques 30j)
- Solution simple si LXC 103 est upgradé à 4GB RAM
Ou LXC dédié :
- Nouveau LXC 106 "monitoring"
- 4 GB RAM, 40 GB disk, 2 cores
- Séparation des préoccupations, n'impacte pas le gateway réseau