Como monitorar o status do UPS USB via SNMP
Como monitorar o status do UPS USB via SNMP
Existem vários computadores com no-break conectado por USB. Todos os computadores usam o programa apcupsd. Digamos que você queira agregar informações sobre o estado da fonte de alimentação de cada unidade em um só lugar. Como o snmpd já está em execução lá, seria lógico expandir sua funcionalidade.
Propaganda
A solução abaixo, cortesia do Blog do administrador, irá coletar os dados de todas as unidades snmpd de uma vez.
Para monitorar o status do UPS USB via SNMP, precisamos primeiro modificar a configuração do daemon snmp.
Preparativos
Adiciona o seguinte ao config snmpd.conf.
# APC UPS
passar .1.3.6.1.4.1.318.1.1.1 / bin / sh /etc/snmp/apcupsd.sh
O conteúdo do script /etc/snmp/apcupsd.sh é o seguinte.
#! / bin / sh -f # Verifique se o apcupsd está online. apcaccess> / dev / null 2> & 1 || sair 0 PLACE = ". 1.3.6.1.4.1.318.1.1.1" REQ = "$ 2" # OID solicitado # # Processa solicitações SET simplesmente registrando o valor atribuído. # Observe que tais "atribuições" não são persistentes, # nem a sintaxe ou o valor solicitado são validados. # if ["$ 1" = "-s"]; então. echo $ * >> /tmp/passtest.log. saída 0. fi # # Solicitações GETNEXT - determina a próxima instância válida. # if ["$ 1" = "-n"]; então. case "$ REQ" em. $ 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;; *) saída 0;; esac. outro. # # Solicitações GET - verifique a instância válida. # case "$ REQ" em. $ 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;; *) saída 0;; esac. fi # # Solicitações GET * de "processo" - retorna o valor embutido em código. # eco "$ RET" caso "$ RET" em. $ PLACE.1.1.1.0) echo "string"; apcaccess -u -p MODEL; saída 0;; $ PLACE.2.2.1.0) echo "Gauge32"; apcaccess -u -p BCHARGE; saída 0;; $ PLACE.2.2.2.0) echo "Gauge32"; apcaccess -u -p ITEMP; saída 0;; $ PLACE.2.2.3.0) echo "Timeticks"; echo $ (($ (LC_ALL = C printf "%. * f" 0 $ (apcaccess -u -p TIMELEFT)) * 6000)); saída 0;; $ PLACE.2.2.4.0) echo "string"; apcaccess -u -p BATTDATE; saída 0;; $ PLACE.3.2.1.0) echo "Gauge32"; apcaccess -u -p LINEV; saída 0;; $ PLACE.3.2.4.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; saída 0;; $ PLACE.3.2.5.0) echo "string"; apcaccess -u -p LASTXFER; saída 0;; $ PLACE.4.2.1.0) echo "Gauge32"; apcaccess -u -p OUTPUTV; saída 0;; $ PLACE.4.2.2.0) echo "Gauge32"; apcaccess -u -p LINEFREQ; saída 0;; $ PLACE.4.2.3.0) echo "Gauge32"; apcaccess -u -p LOADPCT; saída 0;; $ PLACE.4.2.4.0) echo "Gauge32"; apcaccess -u -p LOADPCT; saída 0;; $ PLACE.7.2.3.0) echo "string"; apcaccess -u -p SELFTEST; saída 0;; $ PLACE.7.2.4.0) echo "string"; apcaccess -u -p SELFTEST; saída 0;; $ PLACE.8.1.0) echo "Gauge32"; echo 1; saída 0;; *) echo "string"; echo "ack... $ RET $ REQ "; saída 0;; # Não deveria acontecer. esac.
Se você está se perguntando sobre OIDs, pode encontrá-los AQUI. Observe que alguns modelos de UPS não retornam todos os parâmetros ou estão no formato errado, então o código pode conter imprecisões e stubs.
Agora você está pronto.
Como monitorar o status do UPS USB via SNMP
Para monitorar o status do UPS USB via SNMP, execute o seguinte comando: snmpwalk -v 1 -c public 127.0.0.1 .1.3.6.1.4.1.318.1.1.1
. A saída será assim:
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:: enterprises.318.1.1.1.2.2.2.0 = Gauge32: 36
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.3.0 = Horários: (432000) 1: 12: 00.00
SNMPv2-SMI:: enterprises.318.1.1.1.2.2.4.0 = STRING: "2020-05-14"
SNMPv2-SMI:: enterprises.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: "Autoteste automático ou explícito"
SNMPv2-SMI:: enterprises.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: "NÃO"
SNMPv2-SMI:: enterprises.318.1.1.1.7.2.4.0 = STRING: "NÃO"
SNMPv2-SMI:: enterprises.318.1.1.1.8.1.0 = Gauge32: 1
Se você configurar ainda mais o script de monitoramento, poderá obter estes gráficos interessantes: