documentation/outils/protocoles/snmp.md

6.9 KiB

SNMP

Le protocol SNMP est un protocol minimaliste pour communiquer avec un équipement mis en réseau. Il est implémenté sur de nombreux périphériques tel que des bornes WiFi, des commutateurs réseaux et des multiprises connectées.

SNMPv3 vs SNMPv1/v2

Pour des raisons de sécurité, vous devriez toujours utiliser SNMPv3 qui a un système d'authentification et de chiffrement. Si votre documentation parle de "communautés SNMP", c'est que c'est de la v1 ou v2 et que vous devriez mieux partir en courant.

Monitoring d'un APC Rack PDU avec Prometheus

Lors du déménagement de Cachan vers Saclay, le Crans a récupéré un APC Rack PDU 2G Metered-by-Outlet with Switching venant de l'ancien équipement de la DSI à Cachan. Ce Power Distribution Unit (PDU) est utilisé pour alimenter notre baie de serveur principale. Cette unité de distribution de courant est capable de monitorer chaque prise avec plusieurs métriques utiles. Par exemple, root@crans.org reçoit un courrier quand une prise surcharge la distribution.

Dans les sous-sections on va présenter comment mettre en place le monitoring en SNMPv3 de ce PDU vers la base de monitoring Prometheus.

Configuration du SNMPv3 et des droits d'accès

On a réalisé ces étapes sur le firmware AOS v6.1.3. Si vous vous sentez aventureux et mettez à jour le PDU, les menus et identifiants risquent de changer.

Connectez-vous à l'interface Web du PDU. Par défault il écoute en HTTP sur son port 80 et on peut s'identifier avec l'identifiant apc et le mot de passe apc. Néanmoins, pour sécuriser l'infrastructure, le mot de passe actuel est dans la bibliothèque de mots de passe du Crans.

Après connexion, allez dans Configuration > Network > SNMPv3 > Access et cochez Enable SNMPv3 access puis appliquez.

Le PDU va proposer de se redémarrer pour appliquer les changements. Déjà, redémarrer le PDU ne coupe pas les prises (heureusement!), mais on a d'autres changements à réaliser avant de le redémarrer.

On change les identifiants pour collecter les métriques en SNMPv3. Allez dans Configuration > Network > SNMPv3 > User Profiles et configurez un utilisateur Vous devriez utiliser SHA pour Authentication Protocol et AES pour Privacy Protocol (car MD5 et DES sont vraiment faibles).

Au Crans, le compte s'appelle crans.

Maintenant que le compte est configuré, il faut lui autoriser l'accès. Allez dans Configuration > Network > SNMPv3 > Access Control et choisissez l'utilisateur, puis activez l'accès et mettez l'adresse IPv4 de la machine qui contactera le PDU en SNMP.

Test de l'accès SNMP

La commande suivante devrait maintenant marcher (changer PDU_* avec les bonnes valeurs). Sur les dérivées de Debian, vous devriez installer snmp et snmp-mibs-downloader (optionnel, télécharge une base de données non libre de correspondance des valeurs SNMP, appelées MIBs).

Pour avoir les entrées associées au PDU, il faut télécharger le MIBs d'APC :

mkdir -p $HOME/.snmp/mibs
echo "mibdirs +$HOME/.snmp/mibs" >> $HOME/.snmp/snmp.conf
curl "https://download.schneider-electric.com/files?p_enDocType=Firmware&p_File_Name=powernet432.mib&p_Doc_Ref=APC_POWERNETMIB_432" -o $HOME/.snmp/mibs/powernet432.mib

Une fois cela effectué, la commande suivante devrait afficher les valeurs intéressantes :

# -m ALL: try to load all SNMP MIBs to output metrics name
snmpwalk -v3 -a SHA -A PDU_AUTH_PASSPHRASE -x AES -X PDU_PRIVACY_PASSPHRASE \
    -l authPriv -u PDU_SNMP_USERNAME -m ALL PDU_HOSTNAME_OR_IP

Si cette étape marche, vous pouvez aller plus loin et configurer Prometheus. Sinon, c'est le bon moment pour aller pinger erdnaxe@crans.org ou une autre personne habitué au SNMPv3.

À la recherche des métriques utiles

Tel un valeureux chevalier, vous partez à l'aventure pour retrouver les métriques utiles. Vous tombez devant un donjon qui vient de vous spammer plus de 2000 métriques, que faites-vous ?

snmpwalk devrez vous spammer de métriques toutes plus ou moins utiles. Si vous avez la base de données de MIBs installée, la sortie devrait être lisible et vous devriez rapidement trouver votre bonheur. Sinon vous êtes en quête soit pour deviner les identifiants des métriques intéressantes, soit pour aller chercher un fichier de définition MIB sur le site du constructeur.

Pour le PDU, après quelques observations, on a gardé :

  • rPDU2DeviceStatusLoadState

  • rPDU2DeviceStatusPower

  • rPDU2DeviceStatusPeakPower

  • rPDU2PhaseStatusPowerFactor

  • rPDU2OutletMeteredStatusPower

Configuration de l'exporteur Prometheus SNMP

C'est bien beau le SNMPv3, mais je ne vais pas snmpwalk dans un cron tout de même !

Prometheus SNMP exporter est livré avec un générateur de configuration. Cette étape de génération permet de créer la configuration de l'exporteur et lui permet de fonctionner sans nécessiter la base de données des MIBs du périphérique. Elle permet aussi de peaufiner la phase de traduction SNMP vers les gauges ou compteurs Prometheus.

Le generateur écrit la configuration de l'exporteur snmp.yml en utilisant les MIBs et un fichier generator.yml tel que :

modules:
  apc_pdu:
    walk:
      - rPDU2DeviceStatusLoadState
      - rPDU2DeviceStatusPower
      - rPDU2DeviceStatusPeakPower
      - rPDU2PhaseStatusPowerFactor
      - rPDU2OutletMeteredStatusPower
    version: 3
    auth:
      security_level: authPriv
      username: PDU_SNMP_USERNAME
      password: PDU_AUTH_PASSPHRASE
      auth_protocol: SHA
      priv_protocol: AES
      priv_password: PDU_PRIVACY_PASSPHRASE

Sur les dérivées de Debian, vous aurez à installer prometheus-snmp-exporter puis lancer prometheus-snmp-generator generate dans /etc/prometheus/ qui contient generator.yml.

Collecter l'exporteur avec Prometheus

Maintenant que l'exporteur est configuré, vous pouvez le démarrer. Il écoutera sur le port 9116 par défaut.

Dans la configuraiton de Prometheus, vous pouvez ajouter une section pour interroger cet exporteur en utilisant la définition apc_pdu définie dans la dernière section:

scrape_configs:
- job_name: apc_pdu_snmp
  static_configs:
  - targets:
    - PDU_HOSTNAME_OR_IP
  metrics_path: /snmp
  params:
    module:
    - apc_pdu
  relabel_configs:
  - source_labels:
    - __address__
    target_label: __param_target
  - source_labels:
    - __param_target
    target_label: instance
  - replacement: 127.0.0.1:9116
    target_label: __address__

La bidouille relabel_configs permet à Prometheus de query l'exporter avec le nom d'hôte ou adresse IP du périphérique afin de collecter les métriques SNMP tout en gardant le label instance propre dans sa base de données.

Vous devriez pouvoir redémarrer Prometheus et le PDU devrait être monitoré.

Voilà, vous brandissez Excalibur de fierté!