Search Exchange
Search All Sites
Nagios Live Webinars
Let our experts show you how Nagios can help your organization.Login
Directory Tree
check_apcupsd
385086
File | Description |
---|---|
check_apcupsd.txt | The plugin. Remove .txt extension before use. |
Meet The New Nagios Core Services Platform
Built on over 25 years of monitoring experience, the Nagios Core Services Platform provides insightful monitoring dashboards, time-saving monitoring wizards, and unmatched ease of use. Use it for free indefinitely.
Monitoring Made Magically Better
- Nagios Core on Overdrive
- Powerful Monitoring Dashboards
- Time-Saving Configuration Wizards
- Open Source Powered Monitoring On Steroids
- And So Much More!
Monitor battery charge, internal temperature, load and time left on one or more APC Smart-UPSes. Compared to other similar plugins, this plugin allows you to specify hostname and port for apcupsd, which makes it possible to monitor UPSes connected to remote hosts and/or several UPSes connected to the local host. Look in the script for an example to get you started. Run the script without parameters to get full usage info.
Remember to check out the nice screen shot :-)
Note: The trick to monitor several local UPSes is to run several apcupsds on different ports.
Remember to check out the nice screen shot :-)
Note: The trick to monitor several local UPSes is to run several apcupsds on different ports.
Reviews (9)
byCircaLucid, January 20, 2015
Great script. I added a fix to show the serial. Here's the patch:
--- /usr/lib/nagios/plugins/check_apcupsd 2013-06-16 13:30:39.000000000 -0400
+++ /root/check_apcupsd.2 2015-01-20 12:43:31.437445687 -0500
@@ -96,7 +96,7 @@
{
echo "usage: check_apcupsd [-c critical_value] [-h hostname] [-p port]"
echo -n " [-w warning_value] "
- echo ""
+ echo ""
echo
echo "hostname and port defaults to localhost and 3551, respectively."
echo
@@ -111,6 +111,7 @@
echo " measured in minutes."
echo " linefail = Whether the line is OK or not (Back UPS only)"
echo " status = Same as 'linefail' (Back UPS ES only - maybe others)"
+ echo " serial = Shows the device serial"
echo " battstat = Whether the battery is OK or not (Back UPS only)"
exit 3
}
@@ -146,7 +147,7 @@
if [ "$ARG" != "bcharge" -a "$ARG" != "battv" -a "$ARG" != "itemp" \
-a "$ARG" != "loadpct" -a "$ARG" != "timeleft" -a "$ARG" != "linefail" \
- -a "$ARG" != "battstat" -a "$ARG" != "status" ]; then
+ -a "$ARG" != "battstat" -a "$ARG" != "status" -a "$ARG" != "serial" ]; then
usage
fi
@@ -191,7 +192,7 @@
fi
# Back UPS reports only an OK / ERR state
-if [ "$ARG" != "linefail" -a "$ARG" != "battstat" -a "$ARG" != "status" ]; then
+if [ "$ARG" != "linefail" -a "$ARG" != "battstat" -a "$ARG" != "status" -a "$ARG" != "serial" ]; then
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([0-9.][0-9.]*\)[^0-9.].*/\1/'`
if [ -z "$VALUE" ]; then
@@ -202,6 +203,23 @@
VALUE=`echo $VALUE | sed 's/^0*//'`
fi
ROUNDED=`echo $VALUE | sed 's/\..*//'`
+elif [ "$ARG" = "serial" ]; then
+ VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
+ sed 's/.*: *\([A-Z]*\).*/\1/'`
+ if [ -z "$VALUE" ]; then
+ echo "UPS does not support $ARG"
+ exit 3
+ fi
+ if [ "$VALUE" = "AS" ]; then
+ ROUNDED=1
+ else
+ ROUNDED=0
+ fi
+ VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG`
+ if [ -z "$VALUE" ]; then
+ echo "UPS does not support $ARG"
+ exit 3
+ fi
else
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([A-Z]*\).*/\1/'`
@@ -363,6 +381,16 @@
fi
echo "${STATUS} - Time Left: $VALUE Minutes|'minutes left'=${VALUE};$WARNVAL:;$CRITVAL:;;"
;;
+serial)
+ if [ $ROUNDED -gt 0 ]; then
+ STATUS="OK"
+ EXITVALUE=0
+ else
+ STATUS="CRITICAL"
+ EXITVALUE=2
+ fi
+ echo "${STATUS} - ${VALUE}"
+ ;;
esac
exit $EXITVALUE
--- /usr/lib/nagios/plugins/check_apcupsd 2013-06-16 13:30:39.000000000 -0400
+++ /root/check_apcupsd.2 2015-01-20 12:43:31.437445687 -0500
@@ -96,7 +96,7 @@
{
echo "usage: check_apcupsd [-c critical_value] [-h hostname] [-p port]"
echo -n " [-w warning_value] "
- echo ""
+ echo ""
echo
echo "hostname and port defaults to localhost and 3551, respectively."
echo
@@ -111,6 +111,7 @@
echo " measured in minutes."
echo " linefail = Whether the line is OK or not (Back UPS only)"
echo " status = Same as 'linefail' (Back UPS ES only - maybe others)"
+ echo " serial = Shows the device serial"
echo " battstat = Whether the battery is OK or not (Back UPS only)"
exit 3
}
@@ -146,7 +147,7 @@
if [ "$ARG" != "bcharge" -a "$ARG" != "battv" -a "$ARG" != "itemp" \
-a "$ARG" != "loadpct" -a "$ARG" != "timeleft" -a "$ARG" != "linefail" \
- -a "$ARG" != "battstat" -a "$ARG" != "status" ]; then
+ -a "$ARG" != "battstat" -a "$ARG" != "status" -a "$ARG" != "serial" ]; then
usage
fi
@@ -191,7 +192,7 @@
fi
# Back UPS reports only an OK / ERR state
-if [ "$ARG" != "linefail" -a "$ARG" != "battstat" -a "$ARG" != "status" ]; then
+if [ "$ARG" != "linefail" -a "$ARG" != "battstat" -a "$ARG" != "status" -a "$ARG" != "serial" ]; then
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([0-9.][0-9.]*\)[^0-9.].*/\1/'`
if [ -z "$VALUE" ]; then
@@ -202,6 +203,23 @@
VALUE=`echo $VALUE | sed 's/^0*//'`
fi
ROUNDED=`echo $VALUE | sed 's/\..*//'`
+elif [ "$ARG" = "serial" ]; then
+ VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
+ sed 's/.*: *\([A-Z]*\).*/\1/'`
+ if [ -z "$VALUE" ]; then
+ echo "UPS does not support $ARG"
+ exit 3
+ fi
+ if [ "$VALUE" = "AS" ]; then
+ ROUNDED=1
+ else
+ ROUNDED=0
+ fi
+ VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG`
+ if [ -z "$VALUE" ]; then
+ echo "UPS does not support $ARG"
+ exit 3
+ fi
else
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([A-Z]*\).*/\1/'`
@@ -363,6 +381,16 @@
fi
echo "${STATUS} - Time Left: $VALUE Minutes|'minutes left'=${VALUE};$WARNVAL:;$CRITVAL:;;"
;;
+serial)
+ if [ $ROUNDED -gt 0 ]; then
+ STATUS="OK"
+ EXITVALUE=0
+ else
+ STATUS="CRITICAL"
+ EXITVALUE=2
+ fi
+ echo "${STATUS} - ${VALUE}"
+ ;;
esac
exit $EXITVALUE
byftrahan, December 2, 2013
High. Nice script. Though I found a little bug.
When you clean leading zeros, you clean to many of them and a value of "0.0" becomes ".0" which is not detected by your script...
Here's a patch :
--- check_apcupsd.old 2013-12-02 10:20:28.395006242 -0500
+++ check_apcupsd 2013-12-02 10:20:59.751405840 -0500
@@ -158,7 +158,7 @@
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([0-9.][0-9.]*\)[^0-9.].*/\1/'`
-if [ "$VALUE" != "0" ]; then
+if [ "$VALUE" != "0" -a "$VALUE" != "0.0" ]; then
VALUE=`echo $VALUE | sed 's/^0*//'`
fi
ROUNDED=`echo $VALUE | sed 's/\..*//'`
When you clean leading zeros, you clean to many of them and a value of "0.0" becomes ".0" which is not detected by your script...
Here's a patch :
--- check_apcupsd.old 2013-12-02 10:20:28.395006242 -0500
+++ check_apcupsd 2013-12-02 10:20:59.751405840 -0500
@@ -158,7 +158,7 @@
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([0-9.][0-9.]*\)[^0-9.].*/\1/'`
-if [ "$VALUE" != "0" ]; then
+if [ "$VALUE" != "0" -a "$VALUE" != "0.0" ]; then
VALUE=`echo $VALUE | sed 's/^0*//'`
fi
ROUNDED=`echo $VALUE | sed 's/\..*//'`
bynishith, January 24, 2013
Below is the exercise,which I have done on Nagios Core 3.4.3.
Command1
touch /sbin/apcaccess
chmod +x /sbin/apcaccess
Command2
./check_apcupsd -h timeleft
Output: OK - Time Left: Minutes
Command3
/check_apcupsd -h ups1 bcharge
OK - Battery Charge: %
Means, it is not showing output in % properly. It seems that there is a need to modify the plugin again.
Nishith N.Vyas
Command1
touch /sbin/apcaccess
chmod +x /sbin/apcaccess
Command2
./check_apcupsd -h timeleft
Output: OK - Time Left: Minutes
Command3
/check_apcupsd -h ups1 bcharge
OK - Battery Charge: %
Means, it is not showing output in % properly. It seems that there is a need to modify the plugin again.
Nishith N.Vyas
bymarcomc, January 16, 2013
I just created a very small patch to add a few perfData information to make the script compatible with NagVis gadgets
byazteca61, June 26, 2012
How can I add ports to check_apcupsd plugin? I have apcupsd running ports 3551, 3552 and 3553 but Nagios only shows 3551.
thanks
thanks
byrclauff, June 14, 2012
We recently started monitoring all of our UPS's so this was extremely useful and the setup is fast and easy, BUT the only problem I have is if I have a host that has multiple UPS's and they're on different ports I am getting a null response. If i execute the same command from console i get a good response. Any suggestions? I have tried making separate services, putting them all on one host,tried adding the port option to the plugin, still nothing works.
byjsellens, July 25, 2011
Very handy plugin - ran into one minor problem in version 2.4 with the "status" command. check_apcupsd only looks at the first word in the STATUS: provided by apcaccess. Changing the check at line 188 from this:
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([A-Z]*\).*/\1/'`
to this:
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed -e 's/^.*: *//' -e 's/ *$//'`
seemed to do the trick for me - now our brand new UPS can report "ONLINE NOBATT" and we'll notice!
Thanks!
John
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed 's/.*: *\([A-Z]*\).*/\1/'`
to this:
VALUE=`$APCACCESS status $HOSTNAME:$PORT | grep -i ^$ARG | \
sed -e 's/^.*: *//' -e 's/ *$//'`
seemed to do the trick for me - now our brand new UPS can report "ONLINE NOBATT" and we'll notice!
Thanks!
John
An excellent plugin for APCUPSD but to expand it further it would be nice if it could provide performance data that can then be graphed by pnp4nagios and perhaps check a few more items reported on by apcaccess such as the mains voltage.