From 14712ece709faa758ecb3c641b5a4f10cbbc0f3f Mon Sep 17 00:00:00 2001 From: Alexandre Iooss Date: Wed, 28 Jul 2021 16:16:30 +0200 Subject: [PATCH] =?UTF-8?q?[tools/snmp]=20J'ai=20trouv=C3=A9=20Excalibur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/snmp.md | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 tools/snmp.md diff --git a/tools/snmp.md b/tools/snmp.md new file mode 100644 index 0000000..351a9a3 --- /dev/null +++ b/tools/snmp.md @@ -0,0 +1,172 @@ +# 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érer un +[APC Rack PDU 2G Metered-by-Outlet with Switching](https://www.apc.com/shop/th/en/products/Rack-PDU-2G-Metered-by-Outlet-with-Switching-ZeroU-20A-208V-16A-230V-21-C13-3-C19/P-AP8659) +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, 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`). + +```bash +# -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 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 : + +```YAML +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: + +```YAML +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é!*