[tools/snmp] J'ai trouvé Excalibur

ceph
Alexandre Iooss 2021-07-28 16:16:30 +02:00
parent 7e25e819df
commit 14712ece70
No known key found for this signature in database
GPG Key ID: 6C79278F3FCDCC02
1 changed files with 172 additions and 0 deletions

172
tools/snmp.md 100644
View File

@ -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, <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`).
```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 <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 :
```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é!*