CACTI Monitoring of xAP
cacti is a great monitoring tool wouldn't it be cool if ANY xAP data value could be monitored?
With a xAP caching Lua applet running as a plugboard script on the HAH and one small python script for CACTI to use this indeed is possible.
Setting up the xAP data cache
The first step is to set-up and configure Lua script xapCacheWebserverApplet.lua
which will cache an xAP data value and provide a URL for later accessing.
The script is supplied as a sample in the /etc_ro_fs/plugboard/samples
directory on the HAH, it's also available as a post on the forum
Here is how to we modify the VFS configuration to capture data we are interested in.
local vfs = { filter={ xap.Filter{["xap-header"] = { source="dbzoo.livebox.Controller:1wire.*", class="xAPBSC.event" } }, xap.Filter{["xap-header"] = { source="dbzoo.nanode.>", class="xAPBSC.event" } }, xap.Filter{["xap-header"] = { source="dbzoo.livebox.jeenode:>", class="xAPBSC.event" } }, }, data={} }
Read more about the filter class and pattern matching.
After restarting the plugboad engine we can point our web browser at
http://<HAH-IP>:8080/
and see the xAP frames being cached.
Once some xAP messages have been cached you should see a web page like this:
Cached xap-header source keys dbzoo.livebox.jeenode:outside.lobat dbzoo.nanode.jeenode:3.temp dbzoo.nanode.jeenode:4.temp dbzoo.nanode.jeenode:3.lobat dbzoo.livebox.jeenode:outside.temp2 dbzoo.nanode.jeenode:7.temp dbzoo.nanode.jeenode:4.lobat dbzoo.livebox.Controller:1wire.1 dbzoo.livebox.jeenode:store.light dbzoo.nanode.jeenode:2.light dbzoo.livebox.jeenode:outside.light dbzoo.nanode.jeenode:3.light dbzoo.livebox.jeenode:store.temp dbzoo.nanode.jeenode:4.light dbzoo.nanode.jeenode:2.temp dbzoo.nanode.jeenode:7.humi dbzoo.nanode.jeenode:7.lobat dbzoo.nanode.jeenode:2.lobat
Configuring CACTI
The installation of CACTI is beyond the scope of this document and I'll assume you already have it setup and running, there are many guides our there to show you how to install this product. I will however show how I did it.
Installing Cacti on CentOS6
For CentOS6.x installing is a snap
If you don't already have the EPEL repository installed into /etc/yum.repos.d/ then do this first.
rpm -Uvh http://fedora.mirror.uber.com.au/epel/6/i386/epel-release-6-8.noarch.rpm
Check how to install for older release and Fedora @ http://fedoraproject.org/wiki/EPEL
Then install cacti
yum install cacti
Customizing for xAP
You need to include one custom script that will called by the cacti data poller to reach our to our LUA caching web applet to grab xAP data values.
On my system this script appear on a linux server at: /var/lib/cacti/scripts/xapquery.py
don't forget to set the permission bits
[root@wombat scripts]# ls -l xapquery.py -rwxr-xr-x 1 root root 588 Jun 20 16:14 xapquery.py [root@wombat scripts]#
You'll need to make one modification to this code and update the HARDCODED IP address to point to you HAH system.
#!/usr/bin/python # # QUERY the xapCache # # Usage: # ./xapquery.py dbzoo.arduino.temp input.state text import sys import time import urllib2 def getValue(target,section,key): f = urllib2.urlopen("http://livebox.local:8080/%s/%s/%s" % (target,section,key)) ret = f.read() if key == "state": if ret == "on": return 1 elif ret: return ret return 0 if len(sys.argv) < 3: out="value:0" else: out="value:%s" % getValue(sys.argv[1], sys.argv[2], sys.argv[3]) # Useful for debugging #f = open("/var/log/cacti/xapquery.log","a") #f.write("%s: %s %s\n" % (time.ctime(), sys.argv, out)) #f.close() print out
We can verify that the script it working correctly and that the LUA xAP caching applet it working by running a simple test. I'm assuming here that you have a 1wire temperature sensor connected. Adjust this test for a suitable endpoint if you don't.
The arguments are <TARGET> <SECTION> <KEY>
[root@wombat scripts]# ./xapquery.py dbzoo.livebox.Controller:1wire.1 input.state text value:18.3 [root@wombat scripts]#
Create external xAP data template
First we need to register this external script by adding a new Collection Method
Once we have select the ADD hyperlink complete the following form, this sets up the external script and configures 1 output value and 3 input values.
Now we need to create a DATA Template - you can see we will add a xAPQuery item here.
Give the data template a name - I've called my simply xAPQuery and attached the “DATA INPUT METHOD” we created earlier.
Creating a data source
Now the template is in PLACE we can create a DATA SOURCE, this is the thing that collects data about some xAP endpoint we define. You can see I've already created some early and they appear as listed items in the table below.
For each xAP data value you want to collect data on repeat this process. You will perform this action for each Filter
you created in the xAP LUA data cache.
To create the data source to we use the xAPQuery template we defined earlier.
Want we are going to collect is the outside temperature reading from the 1wire device. Complete the form and press CREATE. Here we supply the xAP TARGET, SECTION and KEY.
One the create button has been pressed we can provide addition data to the xAPQuery script that collect this data.
Creating a GRAPH
Now the exciting bit we create graph to plot the information gathered. You can delete and create new graph without affecting the data that is being collected, so feel free to experience in this section on your own. The image below shows the graphs that I have registered.
Use the ADD hyperlink to create a new graph
We don't have any predefined graph template or host we need to attached this data to.
Give your graph a TITLE
Now press ADD so that we can attach the DATA SOURCES to this graph
Now we attach the DATA SOURCE we created early as a graph data item.