Ups-nut.sh works, but poller shows unknown

I’m trying to monitor a Cyberpower UPS attached to a freenas box. If I execute the ups-nut.sh script, it works as expected:

root@mediastore:/etc/snmp # ./ups-nut.sh
100
592
1380
53.8
48
120
122.0
57

Running upsc works as well:

root@mediastore:/etc/snmp # upsc ups
battery.charge: 100
battery.charge.low: 35
battery.charge.warning: 20
battery.mfr.date: CyberPower Systems
battery.runtime: 1380
battery.runtime.low: 592
battery.type: PbAcid
battery.voltage: 53.8
battery.voltage.nominal: 48
device.mfr: CyberPower Systems
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ugen0.6
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.transfer.high: 140
input.transfer.low: 80
input.voltage: 122.0
input.voltage.nominal: 120
output.voltage: 122.0
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.load: 56
ups.mfr: CyberPower Systems
ups.productid: 0601
ups.realpower.nominal: 700
ups.status: OL
ups.timer.shutdown: -60
ups.timer.start: -60
ups.vendorid: 0764

However when I try to query it via SNMP, it returns back "unknown for everything:

root@mediastore:/etc/snmp # snmpwalk -v2c -c secret 192.168.1.54 NET-SNMP-EXTEND-MIB::nsExtendObjects | grep ups-nut
NET-SNMP-EXTEND-MIB::nsExtendCommand."ups-nut" = STRING: /etc/snmp/ups-nut.sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."ups-nut" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."ups-nut" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."ups-nut" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."ups-nut" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."ups-nut" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."ups-nut" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."ups-nut" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."ups-nut" = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ups-nut" = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."ups-nut" = INTEGER: 8
NET-SNMP-EXTEND-MIB::nsExtendResult."ups-nut" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".1 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".2 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".3 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".4 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".5 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".6 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".7 = STRING: Unknown
NET-SNMP-EXTEND-MIB::nsExtendOutLine."ups-nut".8 = STRING: Unknown

I’m running librenms in a docker container, but validate looks ok:

root@f47df83609da:/# /opt/librenms/validate.php
====================================
Component | Version
--------- | -------
LibreNMS  | 1.34
DB Schema | 217
PHP       | 7.1.12-1+ubuntu16.04.1+deb.sury.org+1
MySQL     | 10.1.29-MariaDB-1~xenial
RRDTool   | 1.5.5
SNMP      | NET-SNMP 5.7.3
====================================

[OK]    Database connection successful
[OK]    Database schema correct
[WARN]  IPv6 is disabled on your server, you will not be able to add IPv6 devices.
[WARN]  Your install is over 24 hours out of date, last update: Sat, 25 Nov 2017 11:48:49 +0000
        [FIX] Make sure your daily.sh cron is running and run ./daily.sh by hand to see if there are any errors.
[WARN]  Your local git branch is not master, this will prevent automatic updates.
        [FIX] You can switch back to master with git checkout master
[WARN]  Your local git contains modified files, this could prevent automatic updates.
        [FIX] You can fix this with ./scripts/github-remove
        Modified Files:
         logs/.gitignore
         rrd/.gitignore

poller -m unix-agent,applications output: pastebin output

I’ve tried changing the path to bash in case that was it, but I’m not too experienced with SNMP so not sure where to begin troubleshooting this.

Maybe it’s the user snmpd is running as? Try running the script manually using the same user?

snmp runs as root on freenas.

root@mediastore:/etc/snmp # ps aux |grep snmp
root       27721   1.4  0.2  51188  27716  -  S    Mon12      47:50.97 /usr/local/bin/python /usr/local/bin/snmp-agent.py (python3.6)
root       27720   0.0  0.0   6344   1820  -  Is   Mon12       0:00.00 daemon: /usr/local/bin/snmp-agent.py[27721] (daemon)
root       28020   0.0  0.2 820504  33420  -  S    Mon12       4:10.39 /usr/local/sbin/snmpd -p /var/run/net_snmpd.pid -c /etc/local/snmpd.conf -Ls3d
root       46626   0.0  0.0   6696   2548  0  S+   21:53       0:00.00 grep snmp

^^ This still

I wasn’t clear? The script/snmpd runs as root. The VERY first post in my OP was:

root@mediastore:/etc/snmp # ./ups-nut.sh
100
592
1380
53.8
48
120
122.0
57

running it via the user. SNMPd runs as root, the script output above runs as root.

root@mediastore:/etc/snmp # ps aux |grep snmp
root       27721   1.4  0.2  51188  27716  -  S    Mon12      47:50.97 /usr/local/bin/python /usr/local/bin/snmp-agent.py (python3.6)
root       27720   0.0  0.0   6344   1820  -  Is   Mon12       0:00.00 daemon: /usr/local/bin/snmp-agent.py[27721] (daemon)
root       28020   0.0  0.2 820504  33420  -  S    Mon12       4:10.39 /usr/local/sbin/snmpd -p /var/run/net_snmpd.pid -c /etc/local/snmpd.conf -Ls3d
root       46626   0.0  0.0   6696   2548  0  S+   21:53       0:00.00 grep snmp

It would have been just a bit more helpful to have mentioned that in your response rather than expect me to then go back to the original post and match that up. Hope you get it sorted.

still trying to get this sorted.

running a capture on the poller yields the following:

SNMP[/usr/bin/snmpget -v2c -c COMMUNITY -Oqv -M /opt/librenms/mibs udp:HOSTNAME:161 .1.3.6.1.4.1.8072.1.3.2.3.1.2.7.117.112.115.45.110.117.116]
"Unknown
Unknown
Unknown
Unknown
Unknown
Unknown
Unknown
Unknown"

 ups-nutRRD[last 192.168.1.54/app-ups-nut-39.rrd  --daemon unix:/var/run/rrdcached/rrdcached.sock]
RRD[update 192.168.1.54/app-ups-nut-39.rrd N:U:U:0:U:U:U:U:U --daemon unix:/var/run/rrdcached/rrdcached.sock]
[RRD Disabled]SQL[UPDATE `applications` set `app_state` ='OK',`app_status` ='',`timestamp` =NOW() WHERE `app_id` = '39'] 

not super helpful, running snmpget on the server itself also doesn’t seem helpful:

 snmpget -v2c -c secret udp:192.168.1.54:161 .1.3.6.1.4.1.8072.1.3.2.3.1.2.7.117.112.115.45.110.117.116
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ups-nut" = STRING: Unknown
Unknown
Unknown
Unknown
Unknown
Unknown
Unknown
Unknown

however once I edited the script, to specifically point to “upsc” location, it worked

snmpget -v2c -c secret udp:192.168.1.54:161 .1.3.6.1.4.1.8072.1.3.2.3.1.2.7.117.112.115.45.110.117.116
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."ups-nut" = STRING: 100
592
2220
53.8
48
120
123.0
41

had to change this:
TMP=$(/usr/local/bin/upsc $UPS_NAME 2>/dev/null)

1 Like