Comment surveiller l'état de l'UPS USB via SNMP
Comment surveiller l'état de l'UPS USB via SNMP
Il existe plusieurs ordinateurs avec un onduleur connecté par USB. Tous les ordinateurs utilisent le programme apcupsd. Supposons que vous souhaitiez regrouper des informations sur l'état de l'alimentation pour chaque unité en un seul endroit. Étant donné que snmpd y est déjà exécuté, il serait logique d'étendre ses fonctionnalités.
Publicité
La solution ci-dessous, gracieuseté de la Blog de l'administrateur, collectera les données de toutes les unités snmpd à la fois.
Afin de surveiller l'état de l'UPS USB via SNMP, nous devons d'abord modifier la configuration du démon snmp.
Les préparatifs
Ajoute ce qui suit à la configuration snmpd.conf.
# APC APC
passer .1.3.6.1.4.1.318.1.1.1 /bin/sh /etc/snmp/apcupsd.sh
Le contenu du script /etc/snmp/apcupsd.sh est le suivant.
#!/bin/sh -f # Vérifie que apcupsd est en ligne. apcaccess > /dev/null 2>&1 || sortie 0 PLACE=".1.3.6.1.4.1.318.1.1.1" REQ="$2" # OID demandé # # Traiter les requêtes SET en enregistrant simplement la valeur attribuée. # Notez que de telles "affectations" ne sont pas persistantes, # la syntaxe ou la valeur demandée n'est pas non plus validée. # if [ "$1" = "-s" ]; alors. echo $* >> /tmp/passtest.log. sortie 0. Fi # # requêtes GETNEXT - détermine la prochaine instance valide. # if [ "$1" = "-n" ]; alors. cas "$REQ" dans. $PLACE| \ $PLACE.0| \ $PLACE.0.*| \ $PLACE.1| \ $PLACE.1.1.0*) RET=$PLACE.1.1.1.0;; $PLACE.1*| \ $PLACE.2.0| \ $PLACE.2.0.*| \ $PLACE.2.1| \ $PLACE.2.2.0*) RET=$PLACE.2.2.1.0;; $PLACE.2.2.1*) RET=$PLACE.2.2.2.0;; $PLACE.2.2.2*) RET=$PLACE.2.2.3.0;; $PLACE.2.2.3*) RET=$PLACE.2.2.4.0;; $PLACE.2*| \ $PLACE.3.0*| \ $PLACE.3.1*| \ $PLACE.3.2.0*) RET=$PLACE.3.2.1.0;; $PLACE.3.2.1*| \ $PLACE.3.2.2*| \ $PLACE.3.2.3*) RET=$PLACE.3.2.4.0;; $PLACE.3.2.4*) RET=$PLACE.3.2.5.0;; $PLACE.3.2*| \ $PLACE.4.0*| \ $PLACE.4.1*| \ $PLACE.4.2.0*) RET=$PLACE.4.2.1.0;; $PLACE.4.2.1*) RET=$PLACE.4.2.2.0;; $PLACE.4.2.2*) RET=$PLACE.4.2.3.0;; $PLACE.4.2.3.*) RET=$PLACE.4.2.4.0;; $PLACE.4.2.*| \ $PLACE.5*| \ $PLACE.6*| \ $PLACE.7.0*| \ $PLACE.7.1*| \ $PLACE.7.2.0*| \ $PLACE.7.2.1*| \ $PLACE.7.2.2*) RET=$PLACE.7.2.3.0;; $PLACE.7.2.3*) RET=$PLACE.7.2.4.0;; $PLACE.7*| \ $PLACE.8.0*) RET=$PLACE.8.1.0;; *) sortie 0;; esac. autre. # # requêtes GET - vérifiez l'instance valide. # cas "$REQ" dans. $PLACE.1.1.1.0| \ $PLACE.2.2.1.0| \ $PLACE.2.2.2.0| \ $PLACE.2.2.3.0| \ $PLACE.2.2.4.0| \ $PLACE.3.2.1.0| \ $PLACE.3.2.4.0| \ $PLACE.3.2.5.0| \ $PLACE.4.2.1.0| \ $PLACE.4.2.2.0| \ $PLACE.4.2.3.0| \ $PLACE.4.2.4.0| \ $PLACE.7.2.3.0| \ $PLACE.7.2.4.0| \ $PLACE.8.1.0) RET=$REQ;; *) sortie 0;; esac. Fi # # "Traiter" les requêtes GET* - renvoient une valeur codée en dur. # echo "$RET" cas "$RET" dans. $PLACE.1.1.1.0) echo "chaîne"; apcaccess -u -p MODÈLE; sortie 0;; $PLACE.2.2.1.0) echo "Gauge32"; apcaccess -u -p BCHARGE; sortie 0;; $PLACE.2.2.2.0) echo "Gauge32"; apcaccess -u -p ITEMP; sortie 0;; $PLACE.2.2.3.0) echo "Timeticks"; echo $(($(LC_ALL=C printf "%.*f" 0 $(apcaccess -u -p TIMELEFT)) * 6000)); sortie 0;; $PLACE.2.2.4.0) echo "chaîne"; apcaccess -u -p BATTDATE; sortie 0;; $PLACE.3.2.1.0) echo "Gauge32"; apcaccess -u -p LINEV; sortie 0;; $PLACE.3.2.4.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; sortie 0;; $PLACE.3.2.5.0) echo "chaîne"; apcaccess -u -p LASTXFER; sortie 0;; $PLACE.4.2.1.0) echo "Gauge32"; apcaccess -u -p OUTPUTV; sortie 0;; $PLACE.4.2.2.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; sortie 0;; $PLACE.4.2.3.0) echo "Gauge32"; apcaccess -u -p LOADPCT; sortie 0;; $PLACE.4.2.4.0) echo "Gauge32"; apcaccess -u -p LOADPCT; sortie 0;; $PLACE.7.2.3.0) echo "chaîne"; apcaccess -u -p AUTOTEST; sortie 0;; $PLACE.7.2.4.0) echo "chaîne"; apcaccess -u -p AUTOTEST; sortie 0;; $PLACE.8.1.0) echo "Gauge32"; écho 1; sortie 0;; *) echo "chaîne"; echo "ack... $RET $REQ"; sortie 0;; # Ne devrait pas arriver. esac.
Si vous vous posez des questions sur les OID, vous pouvez les trouver ICI. Notez que certains modèles d'onduleurs ne renvoient pas tous les paramètres ou dans le mauvais format, de sorte que le code peut contenir des inexactitudes et des talons.
Maintenant, vous êtes prêt.
Comment surveiller l'état de l'UPS USB via SNMP
Pour surveiller l'état de l'UPS USB via SNMP, exécutez la commande suivante: snmpwalk -v 1 -c public 127.0.0.1 .1.3.6.1.4.1.318.1.1.1
. La sortie sera comme ça :
SNMPv2-SMI:: entreprises.318.1.1.1.1.1.1.0 = CHAINE: " Smart-UPS 750 "
SNMPv2-SMI:: entreprises.318.1.1.1.2.2.1.0 = Gauge32: 100
SNMPv2-SMI:: entreprises.318.1.1.1.2.2.2.0 = Gauge32: 36
SNMPv2-SMI:: entreprises.318.1.1.1.2.2.3.0 = Timeticks: (432000) 1:12:00.00
SNMPv2-SMI:: entreprises.318.1.1.1.2.2.4.0 = CHAINE: « 2020-05-14 »
SNMPv2-SMI:: entreprises.318.1.1.1.3.2.1.0 = Gauge32: 227
SNMPv2-SMI:: entreprises.318.1.1.1.3.2.4.0 = Gauge32: 50
SNMPv2-SMI:: entreprises.318.1.1.1.3.2.5.0 = STRING: « Autotest automatique ou explicite »
SNMPv2-SMI:: entreprises.318.1.1.1.4.2.1.0 = Gauge32: 227
SNMPv2-SMI:: entreprises.318.1.1.1.4.2.2.0 = Gauge32: 50
SNMPv2-SMI:: entreprises.318.1.1.1.4.2.3.0 = Gauge32: 13
SNMPv2-SMI:: entreprises.318.1.1.1.4.2.4.0 = Gauge32: 13
SNMPv2-SMI:: entreprises.318.1.1.1.7.2.3.0 = CHAINE: "NON"
SNMPv2-SMI:: entreprises.318.1.1.1.7.2.4.0 = CHAINE: "NON"
SNMPv2-SMI:: entreprises.318.1.1.1.8.1.0 = Gauge32: 1
Si vous configurez davantage le script de surveillance, vous pouvez obtenir ces graphiques astucieux :