Cómo monitorear el estado del UPS USB a través de SNMP
Cómo monitorear el estado del UPS USB a través de SNMP
Hay varias computadoras con UPS conectado por USB. Todas las computadoras usan el programa apcupsd. Supongamos que desea agregar información sobre el estado de la fuente de alimentación para cada unidad en un solo lugar. Dado que snmpd ya se está ejecutando allí, sería lógico ampliar su funcionalidad.
Anuncio publicitario
La siguiente solución, cortesía del Blog del administrador, recopilará los datos de todas las unidades snmpd a la vez.
Para monitorear el estado del UPS USB a través de SNMP, primero debemos modificar la configuración del demonio snmp.
Preparativos
Agrega lo siguiente a la configuración snmpd.conf.
# APC UPS
pasar .1.3.6.1.4.1.318.1.1.1 / bin / sh /etc/snmp/apcupsd.sh
El contenido del script /etc/snmp/apcupsd.sh es el siguiente.
#! / bin / sh -f # Compruebe que apcupsd esté en línea. apcaccess> / dev / null 2> & 1 || salir 0 LUGAR = ". 1.3.6.1.4.1.318.1.1.1" REQ = "$ 2" # OID solicitado # # Procese las solicitudes SET simplemente registrando el valor asignado. # Tenga en cuenta que tales "asignaciones" no son persistentes, # ni se valida la sintaxis o el valor solicitado. # si ["$ 1" = "-s"]; luego. echo $ * >> /tmp/passtest.log. salir 0. fi # # Solicitudes GETNEXT: determina la siguiente instancia válida. # si ["$ 1" = "-n"]; luego. caso "$ REQ" en. $ PLACE | \ $ PLACE.0 | \ $ LUGAR.0. * | \ $ PLACE.1 | \ $ LUGAR.1.1.0 *) RET = $ LUGAR.1.1.1.0;; $ PLACE.1 * | \ $ PLACE.2.0 | \ $ LUGAR.2.0. * | \ $ PLACE.2.1 | \ $ LUGAR.2.2.0 *) RET = $ LUGAR.2.2.1.0;; $ LUGAR.2.2.1 *) RET = $ LUGAR.2.2.2.0;; $ LUGAR.2.2.2 *) RET = $ LUGAR.2.2.3.0;; $ LUGAR.2.2.3 *) RET = $ LUGAR.2.2.4.0;; $ PLACE.2 * | \ $ PLACE.3.0 * | \ $ PLACE.3.1 * | \ $ LUGAR.3.2.0 *) RET = $ LUGAR.3.2.1.0;; $ PLACE.3.2.1 * | \ $ PLACE.3.2.2 * | \ $ LUGAR.3.2.3 *) RET = $ LUGAR.3.2.4.0;; $ LUGAR.3.2.4 *) RET = $ LUGAR.3.2.5.0;; $ PLACE.3.2 * | \ $ PLACE.4.0 * | \ $ PLACE.4.1 * | \ $ LUGAR.4.2.0 *) RET = $ LUGAR.4.2.1.0;; $ LUGAR.4.2.1 *) RET = $ LUGAR.4.2.2.0;; $ LUGAR.4.2.2 *) RET = $ LUGAR.4.2.3.0;; $ LUGAR.4.2.3 *) RET = $ LUGAR.4.2.4.0;; $ LUGAR.4.2. * | \ $ PLACE.5 * | \ $ PLACE.6 * | \ $ PLACE.7.0 * | \ $ PLACE.7.1 * | \ $ PLACE.7.2.0 * | \ $ PLACE.7.2.1 * | \ $ LUGAR.7.2.2 *) RET = $ LUGAR.7.2.3.0;; $ LUGAR.7.2.3 *) RET = $ LUGAR.7.2.4.0;; $ PLACE.7 * | \ $ LUGAR.8.0 *) RET = $ LUGAR.8.1.0;; *) salir 0;; esac. demás. # # Solicitudes GET: verifique una instancia válida. # caso "$ REQ" en. $ 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 | \ $ LUGAR.8.1.0) RET = $ REQ;; *) salir 0;; esac. fi # # "Procesar" solicitudes GET *: devuelve un valor codificado. # echo "$ RET" caso "$ RET" en. $ PLACE.1.1.1.0) echo "cadena"; apcaccess -u -p MODELO; salir 0;; $ PLACE.2.2.1.0) echo "Gauge32"; apcaccess -u -p BCHARGE; salir 0;; $ PLACE.2.2.2.0) echo "Gauge32"; apcaccess -u -p ARTÍCULO; salir 0;; $ PLACE.2.2.3.0) echo "Timeticks"; echo $ (($ (LC_ALL = C printf "%. * f" 0 $ (apcaccess -u -p TIMELEFT)) * 6000)); salir 0;; $ PLACE.2.2.4.0) echo "cadena"; apcaccess -u -p BATTDATE; salir 0;; $ PLACE.3.2.1.0) echo "Gauge32"; apcaccess -u -p LINEV; salir 0;; $ PLACE.3.2.4.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; salir 0;; $ PLACE.3.2.5.0) echo "cadena"; apcaccess -u -p LASTXFER; salir 0;; $ PLACE.4.2.1.0) echo "Gauge32"; apcaccess -u -p SALIDAV; salir 0;; $ PLACE.4.2.2.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; salir 0;; $ PLACE.4.2.3.0) echo "Gauge32"; apcaccess -u -p LOADPCT; salir 0;; $ PLACE.4.2.4.0) echo "Gauge32"; apcaccess -u -p LOADPCT; salir 0;; $ PLACE.7.2.3.0) echo "cadena"; apcaccess -u -p SELFTEST; salir 0;; $ PLACE.7.2.4.0) echo "cadena"; apcaccess -u -p SELFTEST; salir 0;; $ PLACE.8.1.0) echo "Gauge32"; echo 1; salir 0;; *) echo "cadena"; echo "ack... $ RET $ REQ "; salir 0;; # No debería suceder. esac.
Si se está preguntando acerca de los OID, puede encontrarlos AQUÍ. Tenga en cuenta que algunos modelos de UPS no devuelven todos los parámetros o en el formato incorrecto, por lo que el código puede contener inexactitudes y talones.
Ahora estás listo.
Cómo monitorear el estado del UPS USB a través de SNMP
Para monitorear el estado del UPS USB a través de SNMP, ejecute el siguiente comando: snmpwalk -v 1 -c público 127.0.0.1 .1.3.6.1.4.1.318.1.1.1
. La salida será así:
SNMPv2-SMI:: enterprises.318.1.1.1.1.1.1.0 = STRING: "Smart-UPS 750"
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.1.0 = Gauge32: 100
SNMPv2-SMI:: empresas.318.1.1.1.2.2.2.0 = Calibre32: 36
SNMPv2-SMI:: empresas.318.1.1.1.2.2.3.0 = Timeticks: (432000) 1: 12: 00.00
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.4.0 = STRING: "2020-05-14"
SNMPv2-SMI:: empresas.318.1.1.1.3.2.1.0 = Gauge32: 227
SNMPv2-SMI:: enterprises.318.1.1.1.3.2.4.0 = Gauge32: 50
SNMPv2-SMI:: enterprises.318.1.1.1.3.2.5.0 = STRING: "Autoprueba automática o explícita"
SNMPv2-SMI:: empresas.318.1.1.1.4.2.1.0 = Gauge32: 227
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.2.0 = Gauge32: 50
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.3.0 = Gauge32: 13
SNMPv2-SMI:: enterprises.318.1.1.1.4.2.4.0 = Gauge32: 13
SNMPv2-SMI:: enterprises.318.1.1.1.7.2.3.0 = STRING: "NO"
SNMPv2-SMI:: enterprises.318.1.1.1.7.2.4.0 = STRING: "NO"
SNMPv2-SMI:: enterprises.318.1.1.1.8.1.0 = Gauge32: 1
Si configura aún más el script de monitoreo, puede obtener estos ingeniosos gráficos: