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