Zabbix template & script to monitor APC UPS through apcupsd daemon.
It gathers data directly from the apcupsd using TCP, no apcaccess needed.
Single Python script that emits all information needed for discovery & data gathering in a single JSON.
All items are defined as Dependent and extract relevant data using JSONPath queries.
Click to expand JSON example
{
"ALARMDEL": "No alarm",
"APC": "001,047,1135",
"BATTDATE": "2017-08-07",
"BATTV": 13.6,
"BCHARGE": 100.0,
"CABLE": "USB Cable",
"CUMONBATT": 30,
"DATE": "2021-02-03 18:04:34 +0300",
"DRIVER": "USB UPS Driver",
"DSHUTD": 0,
"DWAKE": 0,
"END APC": "2021-02-03 18:04:34 +0300",
"FIRMWARE": "817.v9.I USB FW:v9",
"HITRANS": 256.0,
"HOSTNAME": "foobar",
"ITEMP": 29.2,
"LASTSTEST": "2021-01-22 20:30:45 +0300",
"LASTXFER": "Low line voltage",
"LINEFREQ": 50.0,
"LINEV": 218.0,
"LOADPCT": 9.0,
"LOTRANS": 196.0,
"MANDATE": "2012-06-18",
"MAXTIME": 0,
"MBATTCHG": 5,
"MINTIMEL": 180,
"MODEL": "Back-UPS CS 650",
"NOMBATTV": 12.0,
"NOMINV": 230,
"NOMOUTV": 230,
"NOMPOWER": 400,
"NUMXFERS": 4,
"OUTPUTV": 230.0,
"RETPCT": 0.0,
"SELFTEST": "NO",
"SENSE": "High",
"SERIALNO": "4B1225P01343",
"STARTTIME": "2021-01-21 21:20:13 +0300",
"STATFLAG": "0x05000008",
"STATUS": "ONLINE",
"STESTI": "None",
"TIMELEFT": 1950.0,
"TONBATT": 0,
"UPSMODE": "Stand Alone",
"UPSNAME": "apc",
"VERSION": "3.14.14 (31 May 2016) debian",
"XOFFBATT": "2021-02-03 12:40:22 +0300",
"XONBATT": "2021-02-03 12:40:04 +0300"
}- Items:
- Line voltage & frequency
- Battery charge & voltage
- UPS status
- Temperature
- Model, serial, firmware
- Triggers:
- UPS is not online
- Self Test is running
- Temperature
- Overload
- Zabbix agent passive checks. Can be converted to active if needed.
{$APCUPSD_CHARGE_CRIT}- Battery charge crit threshold{$APCUPSD_CHARGE_LOW}- Battery charge low threshold{$APCUPSD_HOST}- Host to query{$APCUPSD_PORT}- Port to query{$APCUPSD_LOAD_CRIT}- UPS load crit threshold{$APCUPSD_LOAD_HIGH}- UPS load high threshold{$APCUPSD_TEMP_CRIT}- Temperature crit threshold{$APCUPSD_TEMP_HIGH}- Temperature high threshold
- Tested on Zabbix 5.0, but should work on 4.2+
- Python3
- Place
apc.confin/etc/zabbix/zabbix_agentd.d - Place
apc.pyin/etc/zabbix/scripts- You can put it into any other place, but then you'll have to adjust
apc.conf
- You can put it into any other place, but then you'll have to adjust
- Restart
zabbix-agentd - Import
template_apcupsd.xml - Adjust
{$APCUPSD_HOST}and{$APCUPSD_PORT}macros if needed - You're good to go