When lighty has been compiled with support for rrdtool, it can generate nice graphs about it's usage (traffic, requests). The following shows how to enable this feature.
The module mod_rrdtool has to be loaded. Then the following configuration
settings need to be set:
rrdtool.binary = "/usr/bin/rrdtool" rrdtool.db-name = "/var/run/lighttpd/lighttpd.rrd"
To generate graphs from the RRD database, a custom shell script has to be created:
#!/bin/sh
RRDTOOL=/usr/bin/rrdtool
OUTDIR=/var/www/nwl.cc/htdocs-secure/lighttpd_graph/
INFILE=/var/run/lighttpd/lighttpd.rrd
OUTPRE=lighttpd-traffic
WIDTH=600
HEIGHT=350
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
To have the graphs being updated regularly, add a line to /etc/crontab:
0,20,40 * * * * nice -n 10 /opt/lighttpd_rrdtool/gen_graphs.sh > /dev/null 2>&1
which assumes that the script given above has been saved as /opt/lighttpd_rrdtool/gen_graphs.sh and made executable.
A sample index.html could look like this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Lighttpd traffic & requests</title>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
</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>