Hoe de USB UPS-status te controleren via SNMP
Hoe de USB UPS-status te controleren via SNMP
Er zijn verschillende computers met een via USB aangesloten UPS. Alle computers gebruiken het programma apcupsd. Stel dat u informatie over de toestand van de voeding voor elke unit op één plaats wilt samenvoegen. Aangezien snmpd daar al draait, zou het logisch zijn om de functionaliteit uit te breiden.
De onderstaande oplossing, met dank aan de Beheerdersblog, verzamelt de gegevens van alle snmpd-eenheden tegelijk.
Om de USB UPS-status via SNMP te controleren, moeten we eerst de snmp-daemonconfiguratie wijzigen.
Voorbereidende werkzaamheden
Voegt het volgende toe aan de config snmpd.conf.
# APC-UPS
pass .1.3.6.1.4.1.318.1.1.1 /bin/sh /etc/snmp/apcupsd.sh
De inhoud van het /etc/snmp/apcupsd.sh script is als volgt.
#!/bin/sh -f # Controleer of apcupsd online is. apcaccess > /dev/null 2>&1 || exit 0 PLACE=".1.3.6.1.4.1.318.1.1.1" REQ="$2" # Aangevraagde OID # # Verwerk SET-verzoeken door simpelweg de toegewezen waarde te loggen. # Merk op dat dergelijke "toewijzingen" niet blijvend zijn, # noch is de syntaxis of de gevraagde waarde gevalideerd. # if [ "$1" = "-s"]; dan. echo $* >> /tmp/passtest.log. uitgang 0. fi # # GETNEXT-verzoeken - bepaal de volgende geldige instantie. # if [ "$1" = "-n" ]; dan. geval "$REQ" in. $PLAATS| \ $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*| \ $PLAATS.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;; *) uitgang 0;; esac. anders. # # GET-verzoeken - controleer op geldige instantie. # geval "$REQ" in. $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;; *) uitgang 0;; esac. fi # # "Process" GET*-verzoeken - hardgecodeerde waarde retourneren. # echo "$RET" geval "$RET" in. $PLACE.1.1.1.0) echo "string"; apcaccess -u -p MODEL; uitgang 0;; $PLACE.2.2.1.0) echo "Gauge32"; apcaccess -u -p BCHARGE; uitgang 0;; $PLACE.2.2.2.0) echo "Gauge32"; apcaccess -u -p ITEMP; uitgang 0;; $PLACE.2.2.3.0) echo "Timeticks"; echo $(($(LC_ALL=C printf "%.*f" 0 $(apcaccess -u -p TIMELEFT)) * 6000)); uitgang 0;; $PLACE.2.2.4.0) echo "string"; apcaccess -u -p BATTDATE; uitgang 0;; $PLACE.3.2.1.0) echo "Gauge32"; apcaccess -u -p LINEV; uitgang 0;; $PLACE.3.2.4.0) echo "Gauge32"; apcaccess -u -p LIJNFREQ; uitgang 0;; $PLACE.3.2.5.0) echo "string"; apcaccess -u -p LASTXFER; uitgang 0;; $PLACE.4.2.1.0) echo "Gauge32"; apcaccess -u -p OUTPUTV; uitgang 0;; $PLACE.4.2.2.0) echo "Gauge32"; apcaccess -u -p LIJNFREQ; uitgang 0;; $PLACE.4.2.3.0) echo "Gauge32"; apcaccess -u -p LOADPCT; uitgang 0;; $PLACE.4.2.4.0) echo "Gauge32"; apcaccess -u -p LOADPCT; uitgang 0;; $PLACE.7.2.3.0) echo "string"; apcaccess -u -p ZELFTEST; uitgang 0;; $PLACE.7.2.4.0) echo "string"; apcaccess -u -p ZELFTEST; uitgang 0;; $PLACE.8.1.0) echo "Gauge32"; echo 1; uitgang 0;; *) echo "tekenreeks"; echo "Ak... $RET $VERZOEK"; uitgang 0;; # Mag niet gebeuren. esac.
Als je je afvraagt over OID's, kun je ze vinden HIER. Houd er rekening mee dat sommige UPS-modellen niet alle parameters of in het verkeerde formaat retourneren, dus de code kan onnauwkeurigheden en steekjes bevatten.
Nu ben je klaar.
Hoe de USB UPS-status te controleren via SNMP
Voer de volgende opdracht uit om de USB UPS-status via SNMP te controleren: snmpwalk -v 1 -c openbaar 127.0.0.1 .1.3.6.1.4.1.318.1.1.1
. De uitvoer zal als volgt zijn:
SNMPv2-SMI:: enterprise.318.1.1.1.1.1.1.0 = STRING: "Smart-UPS 750"
SNMPv2-SMI:: ondernemingen.318.1.1.1.2.2.1.0 = Gauge32: 100
SNMPv2-SMI:: ondernemingen.318.1.1.1.2.2.2.0 = Spoor32: 36
SNMPv2-SMI:: ondernemingen.318.1.1.1.2.2.3.0 = Tijdslimieten: (432000) 1:12:00.00
SNMPv2-SMI:: ondernemingen.318.1.1.1.2.2.4.0 = STRING: "2020-05-14"
SNMPv2-SMI:: ondernemingen.318.1.1.1.3.2.1.0 = Spoor32: 227
SNMPv2-SMI:: ondernemingen.318.1.1.1.3.2.4.0 = Spoor32: 50
SNMPv2-SMI:: enterprise.318.1.1.1.3.2.5.0 = STRING: "Automatische of expliciete zelftest"
SNMPv2-SMI:: ondernemingen.318.1.1.1.4.2.1.0 = Spoor32: 227
SNMPv2-SMI:: ondernemingen.318.1.1.1.4.2.2.0 = Spoor32: 50
SNMPv2-SMI:: ondernemingen.318.1.1.1.4.2.3.0 = Spoor32: 13
SNMPv2-SMI:: ondernemingen.318.1.1.1.4.2.4.0 = Spoor32: 13
SNMPv2-SMI:: ondernemingen.318.1.1.1.7.2.3.0 = STRING: "NEE"
SNMPv2-SMI:: ondernemingen.318.1.1.1.7.2.4.0 = STRING: "NEE"
SNMPv2-SMI:: ondernemingen.318.1.1.1.8.1.0 = Gauge32: 1
Als u het monitoringscript verder configureert, kunt u deze handige grafieken krijgen: