LRRD FAQ



Table of Contents


1. Installation

Q: Why only Debian packages? Why not Redhat?

We're using Debian on our machines and servers. We're working on RPM-packages, though.

Q: Installing from the tar.gz is horrible. Where do things go?

Sorry. For now you have to experiment and read the code. We're working on an install-script for the tarball, but we're not finished yet. Here's a very bad one I used on a redhat box:

wget http://belnet.dl.sourceforge.net/sourceforge/lrrd/lrrd-0.9.2-1.tar.gz
tar xzf lrrd-0.9.2-1.tar.gz
cd lrrd

# ...first the server...
cd server
useradd -d /var/lib/lrrd lrrd
mkdir -p /var/log/lrrd
chown lrrd /var/log/lrrd
mkdir -p /usr/share/lrrd
cp lrrd-graph lrrd-html lrrd-nagios lrrd-update /usr/share/lrrd/
mkdir -p /etc/lrrd/templates
cp *.tmpl lrrd-htaccess /etc/lrrd/templates/
cp lrrd-server.conf /etc/lrrd/
cp LRRD.pm /usr/share/perl5/site_perl/5.005/
cp lrrd-cron /usr/bin/
cp debian/cron.d /etc/cron.d/lrrd-server
mkdir -p /var/www/lrrd
chown lrrd /var/www/lrrd
chown -R lrrd /etc/lrrd
cd ..

#...then the client
cd client
cp lrrd-client /usr/share/lrrd/
cp lrrd-client.conf /etc/lrrd/
cp -r lrrd.d /etc/lrrd/lrrd-client.d
cd /etc/lrrd/lrrd-client.d

Q: What architectures are supported? What operating systems?

LRRD is programmed in Perl, which can be installed on most operating systems. In addition, it needs some perl modules, which you can fetch from CPAN.

However, the "plugins" used by the client are often OS or application spesific. E.g., many of the Linux-plugins use /proc to gather the data. Currently, the following plugins are available:

2. Configuration

Q: What should a minimal configuration look like?

	dbdir /var/lib/lrrd/
	logdir   /var/log/lrrd
	htmldir   /var/www/lrrd/
	domaintmpl   /etc/lrrd/templates/lrrd-domainview.tmpl
	indextmpl   /etc/lrrd/templates/lrrd-overview.tmpl
	nodetmpl   /etc/lrrd/templates/lrrd-nodeview.tmpl
	servicetmpl   /etc/lrrd/templates/lrrd-serviceview.tmpl
	htaccess   /etc/lrrd/templates/lrrd-htaccess
	templatedir   /etc/lrrd/templates/
	<domain foo.bar>
		<node bing.foo.bar>
			address 10.232.33.259
		</node>
	</domain>
The server will expand the node to contain all the services it offers.

Q: I edited lrrd-server.conf, but the changes were suddenly lost. What's up?

For now, the server configuration file is automatically updated in some circumstanses (typically when the clients offer new services). A split has been done in the CVS-version. A new release is in the works (should be out RSN), which removes the problem.

Q: How du I use the "fieldname.cdef"-thingie?

The cdef is fed to "rrdtool graph", so the man-page for "rrdgraph" should give you a bit more info. I'll try to explain it briefly here, though;

The cdef is defined using Reverse Polish Notation (RPN), which means that you would say "4,5,+" instead of "4+5". When you create a cdef-field, be sure to use the fieldname at least once in the definition, or rrdgraph will croak with an error.

An example can be found in the plugin "exim_mailstats" - the plugin graphs the number of mails that have been received and delivered locally by the system. The values are gathered and stored in a "mails per second"-format. On most systems, this is a bit odd, since you'll get numbers like "300 ultramail per second". :-) A cdef is therefore defined to adjust the values into "mails per minute" instead - a much more sensible and readable number. To do this, the value is just multiplied by 60. The configuration line looks like this: received.cdef received,60,* . In "normal" math, you'd just say "received=received*60".

For a more thorough definition of RPN, take a look at the man-page for "rrdgraph".

Q: How do I define aliases with graph_order?

Normally, graph_order looks something like this:

graph_order apps buffers cache unused swap
It can, however, be used to define alises from other graphs. E.g. if you want to incorporate the number of http-connections in the "processes"-graph (i.e. together with the number of processes on the machine), you'd say:
    graph_order processes connections=port_http:count
This would first draw the "proesses" data-source (as normal), then draw the "count" data-source from the "port_http"-graph. "connections" would then be a field-name in the same way as "processes", so you could give it a cdef, draw, negative, etc.

Example graph_orders:

Q: How do I use fieldname.special_stack?

The format of "special_stack" is the same as the graph_order-arguments above. You cannot, however, specify extra arguments for the fields. If you want to specify a cdef for the 'whole stack', you can use the fieldname defining the special stack. E.g.

<client total_mail>
    graph_order total_received
	graph_title Mail received by machine1 and machine2
	graph_vlabel mails/min
	total_received.label not_used
	tota_received.special_stack \
	    machine1=machine1.your.dom:exim_mailstats:received \
	    machine2=machine2.your.dom:exim_mailstats:received
	tota_received.cdef total_received,60,*
</client>

Q: How do I use fieldname.special_sum?

Same as special_stack, with one exception: drop the "alias"-bit in the field definition. I.e., the above would become:

<client total_mail>
    graph_order total_received
	graph_title Mail received by machine1 and machine2
	graph_vlabel mails/min
	total_received.label not_used
	tota_received.special_sum \
	    machine1.your.dom:exim_mailstats:received \
	    machine2.your.dom:exim_mailstats:received
	tota_received.cdef total_received,60,*
</client>

3. Client plugins

Q: What is the minimum requirements of a client plugin?

An example plugin (on a linux-system, using /proc/loadavg to graph the load average):
#!/bin/sh
# Use the hostname from the FQDN-variable (set by lrrd-client)
HOSTNAME=$FQDN

if [ "$1" = "config" ]; then
   echo "host_name $HOSTNAME"
   echo "load.label load"

   # These three are not really nedded, but makes the graph prettier.
   echo "graph_title Load average"
   echo 'graph_args --base 1000 -l 0'
   echo 'graph_vlabel load'

   exit 0
fi

# The real data-gathering
echo -n "load.value "
cut -f1 -d' ' < /proc/loadavg