⚠️ Disclaimer

La méthode que je présente ici correspond à ma propre démarche d’apprentissage. Elle peut contenir des approximations ou des erreurs, car j’apprends et je progresse chaque jour un peu plus. Ne prenez donc pas ce que je fais comme une référence absolue, mais plutôt comme un retour d’expérience personnel.

Contexte du Projet

Dans le cadre de mon infrastructure de monitoring basée sur Prometheus et Grafana, j’ai entrepris d’intégrer la surveillance de mon NAS Synology DS732+ via le protocole SNMP v2c. Ce choix s’est imposé naturellement car SNMP est nativement supporté par DSM sans nécessiter l’installation d’agents tiers.

Architecture Mise en Place

L’infrastructure repose sur une stack Docker déployée sur Mac M4 Pro :

┌─────────────────────────────────────────┐
│         Docker Network: monitoring      │
│                                         │
│  ┌────────────┐      ┌──────────────┐  │
│  │ Prometheus │◄─────┤   Grafana    │  │
│  │   :9090    │      │    :3000     │  │
│  └─────┬──────┘      └──────────────┘  │
│        │                                │
│  ┌─────▼──────┐                         │
│  │    SNMP    │                         │
│  │  Exporter  │                         │
│  │   :9116    │                         │
│  └─────┬──────┘                         │
└────────┼────────────────────────────────┘
         │
         │ SNMP (UDP 161)
         ▼
   ┌─────────────┐
   │  Synology   │
   │   DS732+    │
   │ 192.168.2.15│
   └─────────────┘

Le flux de données s’opère ainsi :

  1. SNMP Exporter interroge le NAS via SNMP (UDP port 161)
  2. Les réponses SNMP sont converties en métriques Prometheus
  3. Prometheus collecte ces métriques toutes les 30 secondes
  4. Grafana visualise les données stockées dans Prometheus

Configuration SNMP sur le NAS

Activation du Service

La configuration SNMP s’effectue directement dans l’interface DSM :

Panneau de configuration → Terminal & SNMP → Onglet SNMP

Paramètres appliqués :

☑ Activer le service SNMP
Version : ☑ SNMPv1, SNMPv2c service
Communauté : homelab-monitoring

Validation de la Configuration

Test de connectivité SNMP depuis le poste de travail :

1
snmpwalk -v2c -c homelab-monitoring 192.168.2.15 system

Résultat obtenu :

SNMPv2-MIB::sysDescr.0 = STRING: Linux DiskStation 4.4.302+ #69057 SMP
SNMPv2-MIB::sysUpTime.0 = Timeticks: (1234567) 3 days, 10:17:47.89
SNMPv2-MIB::sysName.0 = STRING: DiskStation

Déploiement de SNMP Exporter

Intégration Docker Compose

Ajout du service SNMP Exporter dans le fichier docker-compose.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
services:
  snmp-exporter:
    image: prom/snmp-exporter:latest
    container_name: snmp-exporter
    restart: unless-stopped
    ports:
      - "9116:9116"
    volumes:
      - ./prometheus/snmp-config/snmp.yml:/etc/snmp_exporter/snmp.yml:ro
    command:
      - '--config.file=/etc/snmp_exporter/snmp.yml'
    networks:
      - monitoring

Problème Rencontré : Configuration SNMP Personnalisée

Lors des premiers tests, SNMP Exporter retournait l’erreur Unknown auth 'homelab_monitoring'. La configuration par défaut de SNMP Exporter utilise la communauté public, or notre NAS était configuré avec homelab-monitoring, ce qui causait l’échec d’authentification.

Pour résoudre ça, j’ai créé un fichier de configuration personnalisé prometheus/snmp-config/snmp.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Configuration des authentifications SNMP
auths:
  homelab_monitoring:
    community: homelab-monitoring
    version: 2

# Configuration des modules
modules:
  if_mib:
    walk:
      - 1.3.6.1.2.1.2      # IF-MIB interfaces
      - 1.3.6.1.2.1.31     # IF-MIB compteurs additionnels

Cette configuration utilise la syntaxe moderne de SNMP Exporter v0.29.0+. Les anciennes syntaxes avec lookups et overrides ont été supprimées dans les versions récentes.

Après recréation du conteneur :

1
2
docker compose down snmp-exporter
docker compose up -d snmp-exporter

Le test de connectivité a réussi :

1
curl "http://localhost:9116/snmp?target=192.168.2.15&module=if_mib&auth=homelab_monitoring"

Configuration Prometheus

Job de Scraping SNMP

Configuration du job dans prometheus/prometheus.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
scrape_configs:
  - job_name: 'synology-nas'
    scrape_interval: 30s
    scrape_timeout: 10s
    
    static_configs:
      - targets:
          - '192.168.2.15'
        labels:
          hostname: 'nas-synology'
          device_type: 'nas'
          model: 'DS732+'
          location: 'homelab'
    
    metrics_path: /snmp
    params:
      module: [if_mib]
      auth: [homelab_monitoring]
    
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      
      - source_labels: [__param_target]
        target_label: instance
      
      - target_label: __address__
        replacement: snmp-exporter:9116

Problème Rencontré : Paramètre Auth Manquant

Le target apparaissait DOWN dans Prometheus avec l’erreur error scraping target. L’absence du paramètre auth dans la section params empêchait SNMP Exporter d’utiliser la bonne authentification.

J’ai résolu le problème en ajoutant explicitement la ligne :

1
2
3
params:
  module: [if_mib]
  auth: [homelab_monitoring]  # Paramètre critique

Ce paramètre doit correspondre exactement au nom défini dans auths du fichier snmp.yml de l’exporter.

Après rechargement de la configuration :

1
curl -X POST http://localhost:9090/-/reload

Le target est passé à l’état UP dans l’interface Prometheus.

Métriques Collectées

Métriques Réseau IF-MIB

Principales métriques disponibles via le module if_mib :

MétriqueTypeDescription
ifInOctetscounterOctets reçus (cumulatif)
ifOutOctetscounterOctets envoyés (cumulatif)
ifInErrorscounterErreurs en réception
ifOutErrorscounterErreurs en émission
ifInDiscardscounterPaquets reçus mais jetés
ifOutDiscardscounterPaquets émis mais jetés
ifOperStatusgaugeÉtat opérationnel (1=UP, 2=DOWN)

Requêtes PromQL Utilisées

Débit réseau entrant en Mbps :

1
rate(ifInOctets{instance="192.168.2.15", ifDescr=~"eth.*"}[5m]) * 8 / 1000 / 1000

Débit réseau sortant en Mbps :

1
rate(ifOutOctets{instance="192.168.2.15", ifDescr=~"eth.*"}[5m]) * 8 / 1000 / 1000

Taux d’erreurs réseau :

1
rate(ifInErrors{instance="192.168.2.15"}[5m])

État des interfaces :

1
ifOperStatus{instance="192.168.2.15"}

Dashboards Grafana

Dashboard Communautaire

Import du dashboard SNMP Stats (ID Grafana : 11207) pour une visualisation rapide des métriques standard.

Dashboard Personnalisé

J’ai créé un dashboard sur mesure avec trois panels principaux : une vue d’ensemble montrant l’uptime du NAS et le nombre d’interfaces actives, un graphique temporel du débit réseau entrant et sortant (avec les requêtes PromQL appropriées en Mbps), et enfin un dernier panel dédié aux erreurs réseau qui suit les quatre métriques clés (erreurs entrantes, erreurs sortantes, paquets jetés à la réception et à l’émission).

Configuration des Alertes

Règles d’Alerte Implémentées

Fichier prometheus/rules/nas-alerts.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
groups:
  - name: nas-synology-alerts
    interval: 30s
    rules:
      
      - alert: NasDown
        expr: up{job="synology-nas"} == 0
        for: 2m
        labels:
          severity: critical
          device: nas
        annotations:
          summary: "NAS Synology injoignable"
          description: "Le NAS {{ $labels.instance }} ne répond plus depuis 2 minutes."
      
      - alert: InterfaceDown
        expr: ifOperStatus{instance=~"192.168.2.15"} == 2
        for: 5m
        labels:
          severity: warning
          device: nas
        annotations:
          summary: "Interface réseau DOWN"
          description: "L'interface {{ $labels.ifDescr }} du NAS est désactivée depuis 5 minutes."
      
      - alert: NetworkErrorsHigh
        expr: rate(ifInErrors{instance=~"192.168.2.15"}[5m]) > 100
        for: 10m
        labels:
          severity: warning
          device: nas
        annotations:
          summary: "Erreurs réseau élevées"
          description: "L'interface {{ $labels.ifDescr }} enregistre {{ $value | humanize }} erreurs/sec depuis 10 minutes."
      
      - alert: NetworkTrafficAnomalouslyHigh
        expr: rate(ifOutOctets{instance=~"192.168.2.15"}[5m]) * 8 / 1000 / 1000 > 900
        for: 15m
        labels:
          severity: warning
          device: nas
        annotations:
          summary: "Débit sortant anormalement élevé"
          description: "Le NAS envoie {{ $value | humanize }}Mbps depuis 15 minutes."

Rechargement de Prometheus :

1
curl -X POST http://localhost:9090/-/reload

Vérification dans l’interface Prometheus (onglet Alerts) : les 4 règles apparaissent en état “Inactive”, confirmant leur bon chargement.

Problèmes Techniques Résolus

Configuration SNMP Exporter

La première difficulté majeure s’est présentée immédiatement : l’erreur « Unknown auth ». L’exporter utilise par défaut la communauté public, tandis que notre NAS avait une configuration spécifique. J’ai dû créer un fichier snmp.yml personnalisé. Cette première leçon a mis en évidence l’importance du cycle Docker complet : le volume doit être monté, et le conteneur doit être recréé plutôt que simplement redémarré.

Syntaxe de Configuration Moderne

La deuxième embûche venait de la documentation : de nombreux tutoriels en ligne utilisent les anciennes sections lookups et overrides, incompatibles avec SNMP Exporter v0.29.0+. J’ai dû adopter la syntaxe minimaliste actuelle. Cela m’a appris à toujours consulter la documentation officielle correspondant à la version exacte utilisée.

Paramètre Auth dans Prometheus

Même avec SNMP Exporter correctement configuré, le target restait DOWN dans Prometheus. Le paramètre auth: [homelab_monitoring] s’avérait obligatoire dans la section params de la configuration Prometheus. Cette subtilité de configuration m’a montré l’importance de la correspondance exacte entre les deux systèmes.

Relabel Configs

Comprendre le mécanisme de transformation des labels a nécessité du temps. Les relabel_configs opèrent en trois étapes pour achever le pattern multi-target exporter : transformer l’IP target en paramètre, préserver l’instance dans les métriques, et rediriger vers l’exporter plutôt que vers le target direct.

Résultats Obtenus

Métriques Opérationnelles

L’infrastructure de monitoring SNMP fournit désormais :

  • Collecte toutes les 30 secondes
  • 15+ métriques par interface réseau
  • Latence de scraping < 2 secondes
  • Rétention de 30 jours de données
  • 4 alertes actives

Dashboards Disponibles

  • Dashboard communautaire SNMP Stats (vue globale)
  • Dashboard personnalisé avec 3 panels (débit, erreurs, overview)
  • Toutes les métriques visualisables en temps réel

Points Techniques à Retenir

Architecture SNMP avec Prometheus

Le pattern utilisé (multi-target exporter) présente plusieurs avantages :

  • Un seul conteneur SNMP Exporter pour plusieurs équipements
  • Scalabilité horizontale simple
  • Configuration centralisée dans Prometheus
  • Isolation des protocoles (HTTP pour Prometheus, UDP pour SNMP)

Configuration Moderne de SNMP Exporter

La version 0.29.0+ a simplifié la configuration :

  • Suppression des sections lookups et overrides
  • Configuration minimaliste fonctionnelle
  • Moins de risques d’erreurs de syntaxe

Relabel Configs

Le mécanisme de relabeling permet de :

  1. Transformer l’IP target en paramètre URL
  2. Préserver l’instance dans les métriques
  3. Rediriger vers l’exporter au lieu du target

Cette technique s’applique à tous les exporters multi-target (Blackbox, SNMP, etc.).

Conclusion

La mise en place du monitoring SNMP du NAS Synology a nécessité la résolution de plusieurs problématiques techniques, principalement liées à l’authentification SNMP et à la configuration moderne de l’exporter. L’architecture repose sur cinq éléments clés : SNMP v2c activé directement sur le NAS, SNMP Exporter avec une configuration personnalisée adaptée à notre infrastructure, Prometheus avec les relabel configs permettant la redirection multi-target, Grafana avec des dashboards dédiés à la visualisation des métriques réseau, et enfin un système d’alerting robuste pour la détection rapide d’anomalies.

L’ensemble est opérationnel et collecte des métriques fiables toutes les 30 secondes. Cette base servira pour l’intégration d’autres équipements réseau (routeur pfSense, switch MikroTik) utilisant également SNMP.


Configuration testée avec :

  • Synology DS732+ (DSM 7.x)
  • SNMP Exporter v0.29.0
  • Prometheus v2.x
  • Grafana v10.x
  • Docker Compose v3.8