RRDtool module

Module: mod_rrdtool

Description

RRD is a system to store and display time-series data (i.e. network bandwidth, machine-room temperature, server load average).

Warning

  • This module will not work if you are using more than one worker ("server.max-worker":Server.max-workerDetails)

Options

rrdtool.binary

path to the rrdtool binary

rrdtool.binary = "/usr/bin/rrdtool"

rrdtool.db-name

filename of the rrd-database. Make sure that <rrdtool.db-name> doesn't exist before the first run, as lighttpd has to create the DB for you.

rrdtool.db-name = "/var/www/lighttpd.rrd"

Generating Graphs

Four things must be done to generate graphs:

Alternative: Instead of the last three steps (2,3,4), just can use lightygraph.cgi to automatically generate the graphs as needed -- on the fly!

  1. Enable the mod_rrdtool in lighttpd.conf (as above)
  2. Create/Edit the script provided below (as it generates the graphs).
    I call it rrdtool.sh, make sure you have eXecute permissions on it (chmod +x)
  3. Create an HTML page to output the images (provided at the end bottom)
  4. Run the script and add to cron.
    0,20,40 * * * * nice -n 10 /etc/lighttpd/rrdtool.sh >& /dev/null
    

    Note: Ubuntu fiesty and later remove the & from >& above for cron to run. /bin/sh is linked to /bin/dash and expects a file descriptor rather than a path to send the output to. (bad fd error otherwise)

rrdtool.sh

#!/bin/sh

RRDTOOL=/usr/bin/rrdtool
OUTDIR=/var/www/www.example.com/rrd/
INFILE=/var/www/lighttpd.rrd
OUTPRE=lighttpd-traffic
WIDTH=400
HEIGHT=100

DISP="-v bytes --title TrafficWebserver \
        DEF:binraw=$INFILE:InOctets:AVERAGE \
        DEF:binmaxraw=$INFILE:InOctets:MAX \
        DEF:binminraw=$INFILE:InOctets:MIN \
        DEF:bout=$INFILE:OutOctets:AVERAGE \
        DEF:boutmax=$INFILE:OutOctets:MAX \
        DEF:boutmin=$INFILE:OutOctets:MIN \
        CDEF:bin=binraw,-1,* \
        CDEF:binmax=binmaxraw,-1,* \
        CDEF:binmin=binminraw,-1,* \
        CDEF:binminmax=binmaxraw,binminraw,- \
        CDEF:boutminmax=boutmax,boutmin,- \
        AREA:binmin#ffffff: \
        STACK:binmax#f00000: \
        LINE1:binmin#a0a0a0: \
        LINE1:binmax#a0a0a0: \
        LINE2:bin#efb71d:incoming \
        GPRINT:bin:MIN:%.2lf \
        GPRINT:bin:AVERAGE:%.2lf \
        GPRINT:bin:MAX:%.2lf \
        AREA:boutmin#ffffff: \
        STACK:boutminmax#00f000: \
        LINE1:boutmin#a0a0a0: \
        LINE1:boutmax#a0a0a0: \
        LINE2:bout#a0a735:outgoing \
        GPRINT:bout:MIN:%.2lf \
        GPRINT:bout:AVERAGE:%.2lf \
        GPRINT:bout:MAX:%.2lf \
        " 

$RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT

OUTPRE=lighttpd-requests

DISP="-v req --title RequestsperSecond -u 1 \
        DEF:req=$INFILE:Requests:AVERAGE \
        DEF:reqmax=$INFILE:Requests:MAX \
        DEF:reqmin=$INFILE:Requests:MIN \
        CDEF:reqminmax=reqmax,reqmin,- \
        AREA:reqmin#ffffff: \
        STACK:reqminmax#00f000: \
        LINE1:reqmin#a0a0a0: \
        LINE1:reqmax#a0a0a0: \
        LINE2:req#00a735:requests" 

$RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT
$RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT

Webpage that displays the graphics

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
        <title>Lighttpd traffic &amp; requests</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <meta http-equiv="content-style-type" content="text/css">
        <style type="text/css">
<!--
        div { text-align:center; }
        img { width:693px; height:431px; }
-->
        </style>
</head>

<body>
    <div>
        <h2>Lighttpd Traffic</h2>
        <img src="lighttpd-traffic-hour.png"   alt="graph1"><br>
        <img src="lighttpd-traffic-day.png"    alt="graph2"><br>
        <img src="lighttpd-traffic-month.png"  alt="graph3"><br>
    </div>
    <div>
        <h2>Lighttpd Requests</h2>
        <img src="lighttpd-requests-hour.png"  alt="graph4"><br>
        <img src="lighttpd-requests-day.png"   alt="graph5"><br>
        <img src="lighttpd-requests-month.png" alt="graph6"><br>
    </div>
  </body>
</html>

Problems

  • is has a pipe open all the time
  • it doesn’t handle a restart

from http://blog.lighttpd.net/articles/2007/04/10/about-perfection-deprecacting-mod_rrdtool

lightygraph.cgi (5.01 KB) stbuehler, 2009-02-17 11:26