Recently I acquired a second hand APC Smart-UPS 3000. With the cheap addition of a network module SNMP V2/V3 support is easily added to this unit.

The next step is setting up monitoring. To do this I’m going to use parts of the TICK stack, primarily Telegraf (for polling and data collection) and Influxdb (for backend database) – Here’s a short introduction on those modules. Continue reading to see the tasks required to set this up.

https://www.influxdata.com/blog/introduction-to-influxdatas-influxdb-and-tick-stack/

Overview of the setup required for Telegraf SNMP V2 polling and Grafana graphing of an APC UPS



These install instructions assume you are going to be using a newer version of Ubuntu, or another Debian based Linux distribution. I’m also making the assumption you already have InfluxDB installed and configured.

Install the Telegraf agent

sudo apt-get install telegraf 1 sudo apt - get install telegraf

Install NET-SNMP and some basic SNMP MIB’s.

sudo apt-get install snmp-mibs-downloader sudo download-mibs 1 2 sudo apt - get install snmp - mibs - downloader sudo download - mibs

Modify your SNMP.conf to import MIB’s we will be downloading

sudo bash -c 'echo "mibs +ALL" > /etc/snmp/snmp.conf' 1 sudo bash - c 'echo "mibs +ALL" > /etc/snmp/snmp.conf'

Download the PowerNet MIB Files from APC

Place the downloaded files in your home folder under “.snmp”. The directory structure should look like this –

.snmp └── mibs └── powernet426.mib 1 2 3 . snmp └── mibs └── powernet426 . mib

By default NET-SNMP will look in several locations for MIB files, including the folder shown above.

At this point, you should be able to run “snmpwalk” and attempt to grab some data from the device. snmpwalk is like nmap, but for scanning SNMP. It should looks like this –

slim@grafana:/etc/snmp$ snmpwalk -v 2c -c public 192.168.99.138 PowerNet-MIB::upsAdvBatteryRunTimeRemaining.0 PowerNet-MIB::upsAdvBatteryRunTimeRemaining.0 = Timeticks: (114000) 0:19:00.00 1 2 3 slim @ grafana : / etc / snmp $ snmpwalk - v 2c - c public 192.168.99.138 PowerNet - MIB :: upsAdvBatteryRunTimeRemaining . 0 PowerNet - MIB :: upsAdvBatteryRunTimeRemaining . 0 = Timeticks : ( 114000 ) 0 : 19 : 00.00

The result above shows us the Battery Run time remaining in ticks. If you encounter any kind of error, check to make sure all the above packages are installed, and you have everything in the right directories. If you got a result, great, Let’s move on!

Configure the Telegraf conf file for grabbing data from our APC unit with SNMP.

The Telegraf agent requires a conf file with the input information for your device to be queried. By default, it includes telegraf.conf. You can add to this, but I recommend creating a new conf file, 1 per device or group of devices. First, let’s modify the default telegraf.conf file to change some needed variables. This includes

Default collection interval – Set to 30 seconds

Influx DB Host

Influx DB UserName/Password

InfluxDB Database

You can grab the below example telegraf.conf from my GitHub – and place it in /etc/telegraf/ or run the following script below in a terminal

wget https://raw.githubusercontent.com/nshores/apc-ups-grafana/master/telegraf.conf sudo mv /etc/telegraf/telegraf.conf telegraf_bak.conf sudo mv telegraf.conf /etc/telegraf/telegraf.conf 1 2 3 wget https : //raw.githubusercontent.com/nshores/apc-ups-grafana/master/telegraf.conf sudo mv / etc / telegraf / telegraf . conf telegraf_bak . conf sudo mv telegraf . conf / etc / telegraf / telegraf . conf

Define a Telegraf conf file for your APC UPS

We are also going need to define a conf file for monitoring our APC ups. This is done by creating a conf file with various inputs in it. You can use the example on my github, and just modify the following to match your setup

[[inputs.snmp]] agents = [ "192.168.99.138" ] ## Timeout for each SNMP query. timeout = "30s" ## Number of retries to attempt within timeout. retries = 3 ## SNMP version, values can be 1, 2, or 3 version = 2 # hostname ovveride name_override = "ups" # ## SNMP community string. community = "public" 1 2 3 4 5 6 7 8 9 10 11 12 [ [ inputs . snmp ] ] agents = [ "192.168.99.138" ] ## Timeout for each SNMP query. timeout = "30s" ## Number of retries to attempt within timeout. retries = 3 ## SNMP version, values can be 1, 2, or 3 version = 2 # hostname ovveride name_override = "ups" # ## SNMP community string. community = "public"

Place this file in /etc/telegraf/telegraf.d. The final structure looks like this

. ├── telegraf.conf └── telegraf.d └── ups.conf 1 2 3 4 . ├── telegraf . conf └── telegraf . d └── ups . conf

To confirm everything is working, we can run

telegraf --config /etc/telegraf/telegraf.d/ups.conf --test 1 telegraf -- config / etc / telegraf / telegraf . d / ups . conf -- test

This will give us output of the data that it’s collected, and what will be pushed to InfluxDB in the “UPS” measurement. If you don’t have this output, go back and make sure you aren’t missing any steps.

lim@grafana:/etc/snmp$ telegraf --config /etc/telegraf/telegraf.d/ups.conf --test > ups,agent_host=192.168.99.138,host=grafana,hostname=SLIMUPS model="Smart-UPS 3000 RM",name="UPS_IDEN",upsAdvBatteryReplaceIndicator=1i,upsAdvBatteryRunTimeRemaining=114000i,upsBasicBatteryTimeOnBattery=0i,upsBasicOutputStatus=2i,upsHighPrecBatteryCapacity=100,upsHighPrecBatteryTemperature=32.8,upsHighPrecInputLineVoltage=122.4,upsHighPrecOutputCurrent=4.2,upsHighPrecOutputLoad=19.5,upsHighPrecOutputVoltage=123.1,uptime=8137640i 1540425160000000000 1 2 lim @ grafana : / etc / snmp $ telegraf -- config / etc / telegraf / telegraf . d / ups . conf -- test > ups , agent_host = 192.168.99.138 , host = grafana , hostname = SLIMUPS model = "Smart-UPS 3000 RM" , name = "UPS_IDEN" , upsAdvBatteryReplaceIndicator = 1i , upsAdvBatteryRunTimeRemaining = 114000i , upsBasicBatteryTimeOnBattery = 0i , upsBasicOutputStatus = 2i , upsHighPrecBatteryCapacity = 100 , upsHighPrecBatteryTemperature = 32.8 , upsHighPrecInputLineVoltage = 122.4 , upsHighPrecOutputCurrent = 4.2 , upsHighPrecOutputLoad = 19.5 , upsHighPrecOutputVoltage = 123.1 , uptime = 8137640i 1540425160000000000

Confirm it’s working and graph your data!

Once you have Telegraf setup, pulling SNMP from your APC UPS and outputting to InfluxDB you can import a great template in your local Grafana to graph this data. The template looks like this

You can view a live demo of the template here.

Reference and source for the telegraph.conf input layout —

https://grafana.com/dashboards/5901