If you are trying to collect performance data from IBM’s Tivoli Directory Server, and you do not have Tivoli Directory Integrator installed, then you can still monitor some performance metrics with Zenoss.
The big Aha! moment for me was when I read that you can query some useful metrics with an LDAP client.
ldapsearch -h $LDAP_HOST -x -D "$LDAP_ADMIN_DN" -w $LDAP_ADMIN_PASSWORD -s base -b cn=monitor objectclass=* # extended LDIF # # LDAPv3 # base <cn=monitor> with scope baseObject # filter: objectclass=* # requesting: ALL # # MONITOR dn: CN=MONITOR version: IBM Tivoli Directory (SSL), 6.1 totalconnections: 50912 total_ssl_connections: 0 total_tls_connections: 0 currentconnections: 67 maxconnections: 1024 writewaiters: 0 readwaiters: 0 opsinitiated: 712582 livethreads: 1 opscompleted: 712581 entriessent: 620628 searchesrequested: 585265 searchescompleted: 585264 bindsrequested: 50917 bindscompleted: 50917 unbindsrequested: 50791 .......
So we no longer need to use IBM’s SNMP listener therefore saving some time and maybe even some money. Zenoss allows you to run scripts and so long as the script returns stuff in the right format Zenoss can graph them. Here’s how I did it.
1. The script
First we need a script to go get the data from TDS. As shown above, it is really only a simple LDAP search, but the output need to conform to the Nagios plugin standard. So here is my script. Feel free to use and improve upon it.
#!/bin/bash
# Robert Hart http://robertjhart.wordpress.com/ July 2010
# Script to collect performance metrics from IBM Tivoli Directory Server 6.1
# For reference:
# http://community.zenoss.org/docs/DOC-4770
# http://nagiosplug.sourceforge.net/developer-guidelines.html#PLUGOUTPUT
# List of attributes to get.
# format: space seperated - attribute,UOM
ATTRIBUTES="bindsrequested,c currentconnections,"
# Stuff to tweak
LDAP_HOST=$1
LDAP_ADMIN_DN=<administrator distinguished name>
LDAP_ADMIN_PASSWORD=<password>
CMD="ldapsearch -h $LDAP_HOST -x -D "$LDAP_ADMIN_DN" -w $LDAP_ADMIN_PASSWORD -s base -b cn=monitor objectclass=*"
TMP_FILE="/tmp/$$"
# if needed, set to a real file
DEBUG="/dev/null"
# this parses the attribute value out of the ldpsearch output.
# usage: parse attribute,UOM
function parse
{
echo "parsing $1" > $DEBUG
ATT=`echo $1 | awk -F "," '{print$1}'`
UOM=`echo $1 | awk -F "," '{print$2}'`
KEY=`grep "^$ATT" $TMP_FILE | awk '{print $1}' | sed -e 's/://'`
VALUE=`grep "^$ATT" $TMP_FILE | awk '{print $2}'`
if [ -z $UOM ]
then
OUTPUT="$KEY=$VALUE;;;; $OUTPUT"
else
OUTPUT="$KEY=$VALUE[$UOM];;;; $OUTPUT"
fi
}
# Lets do some work
if $CMD > $TMP_FILE
then
echo "command ran" > $DEBUG
else
exit 2
fi
for ATTRIBUTE in $ATTRIBUTES
do
if parse $ATTRIBUTE
then
echo "parsed" > $DEBUG
else
exit 1
fi
done
echo "tds |$OUTPUT"
rm $TMP_FILE
exit 0
Save this script as a file on the Zenoss server, make the zenoss user the owner and give it execute permissions.
You should be able to test the script and get a result:
$ ./zenoss-tds.sh ldap.example.org tds |currentconnections=69;;;; bindsrequested=50880[c];;;;
2. Set up the template in Zenoss
First I created an device class because we have a couple of LDAP servers, and so devices inheriting from the device class is the more efficient way to do this.
I also set the LDAP monitor zProperties and bound the LDAP monitor template so we could graph LDAP response times too.
In the templates tab for the device class, I pulled down the menu in the Available Performance Templates section and selected “Add Template…”. Once you have given it a name, then you end up in a page where you can add a data source. In the Data Sources section pull down the menu and select “Add Datasource…”. Give it a name, and set the source to COMMAND. Make sure you set the parser to Nagios, and make sure you pass the device name to your command, eg. /opt/zenoss/scripts/zenoss-tds.sh ${devname}. Click Save, and then add DataPoints at the bottom.
When you create the DataPoints, remember to set the correct Type. Since most of the metrics in TDS zero themselves when you restart the server, then COUNTER is probably the most appropriate.
Once you have done that then you can go back to the template and add graph definitions. Then you can attach the appropriate data point to the graph.
3. See your Graph Loveliness
Lastly you need to bind your new template to the device class. You do that in the templates tab again. Remember to hold down the control key or you will deselect all the other templates in use here.
If you have not already done so, you can put a device in to that class and odel. You should start to see data for the metrics you are collecting.
References
And thanks to Dan for his help too.




