Merge branch 'snmp' into 'master'
[tools/snmp] J'ai trouvé Excalibur See merge request nounous/documentation!4ceph
commit
957625fd09
|
@ -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é!*
|
Loading…
Reference in New Issue