Initial commit.
This commit is contained in:
commit
99da7b05f7
19
README
Normal file
19
README
Normal file
|
@ -0,0 +1,19 @@
|
|||
RRD Scripts
|
||||
v0.1
|
||||
|
||||
leander@one-button.org
|
||||
www.one-button.org
|
||||
|
||||
Graphs load average, disk usage, and network throughput.
|
||||
|
||||
Something simple I put together for some basic graphs, not a Cacti replacement. Requires RRD and presumably some web server to display the graphs.
|
||||
|
||||
Make sure you adjust the settings in the rrd_config file before you install.
|
||||
|
||||
Run the rrd_init_databases.sh to intialize the databases, then run ./update_rrds.sh &. You may want to put that in rc.local or some equivalent so it runs on boot.
|
||||
|
||||
To have the graphs generated automatically add something like
|
||||
|
||||
*/5 * * * * /path/to/rrd_scripts/update_graphs.sh > /dev/null 2>&1
|
||||
|
||||
to your crontab.
|
6
rrd_config
Executable file
6
rrd_config
Executable file
|
@ -0,0 +1,6 @@
|
|||
INTERFACES=( eth0 eth1 )
|
||||
DISKS=( sda sdb md0 )
|
||||
RRDDIR="/usr/local/rrd/"
|
||||
GRAPHDIR="/usr/local/graphs/"
|
||||
RRDTOOL="/usr/bin/rrdtool"
|
||||
IOSTAT="/usr/bin/iostat"
|
64
rrd_init_databases.sh
Executable file
64
rrd_init_databases.sh
Executable file
|
@ -0,0 +1,64 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Simple RRD setup
|
||||
# Netowrk traffic in bytes/sec
|
||||
# Disk reads/writes in bytes/sec
|
||||
# Load average as reported by /proc/loadavg
|
||||
# Needs: sysstat iostat
|
||||
|
||||
CONFIGDIR=$(pwd)
|
||||
sed "3i . ${CONFIGDIR}/rrd_config" update_graphs.sh > update_graphs.sh
|
||||
|
||||
. ${CONFIGDIR}/rrd_config
|
||||
|
||||
if [ ! -d "$RRDDIR" ]; then
|
||||
mkdir -p $RRDDIR
|
||||
fi
|
||||
|
||||
cd $RRDDIR
|
||||
|
||||
# Create RRDs for network interfaces
|
||||
for i in "${INTERFACES[@]}"
|
||||
do
|
||||
if [ ! -f ${i}_day.rrd ]; then
|
||||
$RRDTOOL create ${i}_day.rrd \
|
||||
--step 15 \
|
||||
DS:RXBytes:DERIVE:240:0:1000000000000000 \
|
||||
DS:TXBytes:DERIVE:240:0:1000000000000000 \
|
||||
RRA:AVERAGE:0.5:1:576 \
|
||||
RRA:AVERAGE:0.5:6:672 \
|
||||
RRA:AVERAGE:0.5:24:732 \
|
||||
RRA:AVERAGE:0.5:144:1460
|
||||
fi
|
||||
done
|
||||
|
||||
# Create RRDs for disks
|
||||
for i in "${DISKS[@]}"
|
||||
do
|
||||
if [ ! -f {i}.rrd ]; then
|
||||
$RRDTOOL create ${i}.rrd \
|
||||
--step 15 \
|
||||
DS:reads:DERIVE:30:0:1000000000000000 \
|
||||
DS:writes:DERIVE:30:0:1000000000000000 \
|
||||
RRA:AVERAGE:0.5:1:576 \
|
||||
RRA:AVERAGE:0.5:6:672 \
|
||||
RRA:AVERAGE:0.5:24:732 \
|
||||
RRA:AVERAGE:0.5:144:1460
|
||||
fi
|
||||
done
|
||||
|
||||
# Create load average RRD
|
||||
if [ ! -f loadavg.rrd ]; then
|
||||
$RRDTOOL create loadavg.rrd \
|
||||
--step 15 \
|
||||
DS:one:GAUGE:30:0:100 \
|
||||
DS:five:GAUGE:30:0:100 \
|
||||
DS:fifteen:GAUGE:30:0:100 \
|
||||
RRA:AVERAGE:0.5:1:576 \
|
||||
RRA:AVERAGE:0.5:6:672 \
|
||||
RRA:AVERAGE:0.5:24:732 \
|
||||
RRA:AVERAGE:0.5:144:1460
|
||||
fi
|
||||
|
||||
|
||||
|
95
update_graphs.sh
Executable file
95
update_graphs.sh
Executable file
|
@ -0,0 +1,95 @@
|
|||
#!/bin/bash
|
||||
|
||||
. /root/rrd_scripts/rrd_config
|
||||
|
||||
if [ ! -d $GRAPHDIR ]; then
|
||||
mkdir -p $GRAPHDIR
|
||||
fi
|
||||
|
||||
cd $RRDDIR
|
||||
|
||||
for i in ${INTERFACES[@]}
|
||||
do
|
||||
$RRDTOOL graph $GRAPHDIR${i}_day.png \
|
||||
-h 120 -w 550 -a PNG \
|
||||
--start end-8h --end now \
|
||||
--font DEFAULT:7: \
|
||||
--title "$i Network Throughput" \
|
||||
--watermark "`date`" \
|
||||
--vertical-label "bytes/sec" \
|
||||
--logarithmic \
|
||||
--units=si \
|
||||
--x-grid MINUTE:10:HOUR:1:MINUTE:120:0:%R \
|
||||
--alt-y-grid --rigid \
|
||||
DEF:RXBytes=${i}_day.rrd:RXBytes:AVERAGE \
|
||||
DEF:TXBytes=${i}_day.rrd:TXBytes:AVERAGE \
|
||||
LINE2:RXBytes#3ADF00:RX \
|
||||
GPRINT:RXBytes:LAST:"Cur\: %5.2lf %s" \
|
||||
GPRINT:RXBytes:AVERAGE:"Avg\: %5.2lf %S" \
|
||||
GPRINT:RXBytes:MAX:"Max\: %5.2lf %S" \
|
||||
GPRINT:RXBytes:MIN:"Min\: %5.2lf %SBps\n" \
|
||||
LINE2:TXBytes#045FB4:TX \
|
||||
GPRINT:TXBytes:LAST:"Cur\: %5.1lf %s" \
|
||||
GPRINT:TXBytes:AVERAGE:"Avg\: %5.1lf %S" \
|
||||
GPRINT:TXBytes:MAX:"Max\: %5.1lf %S" \
|
||||
GPRINT:TXBytes:MIN:"Min\: %5.1lf %SBps\n" \
|
||||
HRULE:0#000000
|
||||
done
|
||||
|
||||
|
||||
for i in ${DISKS[@]}
|
||||
do
|
||||
$RRDTOOL graph $GRAPHDIR${i}.png \
|
||||
-h 120 -w 550 -a PNG \
|
||||
--start end-8h --end now \
|
||||
--font DEFAULT:7: \
|
||||
--title "${i} Data Read/Written" \
|
||||
--watermark "`date`" \
|
||||
--vertical-label "bytes/sec" \
|
||||
--logarithmic \
|
||||
--units=si \
|
||||
--x-grid MINUTE:10:HOUR:1:MINUTE:120:0:%R \
|
||||
--alt-y-grid --rigid \
|
||||
DEF:reads=${i}.rrd:reads:AVERAGE \
|
||||
DEF:writes=${i}.rrd:writes:AVERAGE \
|
||||
LINE2:reads#3ADF00:Read \
|
||||
GPRINT:reads:LAST:"Cur\: %5.2lf %s" \
|
||||
GPRINT:reads:AVERAGE:"Avg\: %5.2lf %S" \
|
||||
GPRINT:reads:MAX:"Max\: %5.2lf %S" \
|
||||
GPRINT:reads:MIN:"Min\: %5.2lf %SBps\n" \
|
||||
LINE2:writes#045FB4:Written \
|
||||
GPRINT:writes:LAST:"Cur\: %5.1lf %s" \
|
||||
GPRINT:writes:AVERAGE:"Avg\: %5.1lf %S" \
|
||||
GPRINT:writes:MAX:"Max\: %5.1lf %S" \
|
||||
GPRINT:writes:MIN:"Min\: %5.1lf %SBps\n" \
|
||||
HRULE:0#000000
|
||||
done
|
||||
|
||||
$RRDTOOL graph $GRAPHDIR/loadavg.png \
|
||||
-h 120 -w 550 -a PNG \
|
||||
--start end-8h --end now \
|
||||
--font DEFAULT:7: \
|
||||
--title "Load Average" \
|
||||
--watermark "`uptime`" \
|
||||
--vertical-label "Load Average" \
|
||||
--x-grid MINUTE:10:HOUR:1:MINUTE:120:0:%R \
|
||||
--upper-limit 2.00 \
|
||||
--lower-limit 0.00 \
|
||||
DEF:one=loadavg.rrd:one:AVERAGE \
|
||||
DEF:five=loadavg.rrd:five:AVERAGE \
|
||||
DEF:fifteen=loadavg.rrd:fifteen:AVERAGE \
|
||||
LINE:fifteen#FF0000:"1 Min\:" \
|
||||
GPRINT:fifteen:LAST:"Cur\: %5.2lf" \
|
||||
GPRINT:fifteen:AVERAGE:"Avg\: %5.2lf" \
|
||||
GPRINT:fifteen:MIN:"Min\: %5.2lf" \
|
||||
GPRINT:fifteen:MAX:"Max\: %5.2lf\n" \
|
||||
LINE:five#0000FF:"5 Min\:" \
|
||||
GPRINT:five:LAST:"Cur\: %5.2lf" \
|
||||
GPRINT:five:AVERAGE:"Avg\: %5.2lf" \
|
||||
GPRINT:five:MIN:"Min\: %5.2lf" \
|
||||
GPRINT:five:MAX:"Max\: %5.2lf\n" \
|
||||
AREA:one#00FF0080:"15 Min\:" \
|
||||
GPRINT:one:LAST:"Cur\: %5.2lf" \
|
||||
GPRINT:one:AVERAGE:"Avg\: %5.2lf" \
|
||||
GPRINT:one:MIN:"Min\: %5.2lf" \
|
||||
GPRINT:one:MAX:"Max\: %5.2lf\n" \
|
45
update_rrds.sh
Executable file
45
update_rrds.sh
Executable file
|
@ -0,0 +1,45 @@
|
|||
#!/bin/bash
|
||||
|
||||
CONFIGPATH=$(pwd)
|
||||
|
||||
while [ true ]
|
||||
do
|
||||
|
||||
. ${CONFIGPATH}/rrd_config
|
||||
|
||||
cd $RRDDIR
|
||||
|
||||
for i in "${INTERFACES[@]}"
|
||||
do
|
||||
# By default I use ifconfig, if you prefer
|
||||
# iproute2 simply comment out the next two lines
|
||||
# and uncomment the other ones.
|
||||
RX=$(/sbin/ifconfig $i | grep bytes | cut -f2 -d":" | cut -f1 -d " ")
|
||||
TX=$(/sbin/ifconfig $i | grep bytes | cut -f3 -d":" | cut -f1 -d " ")
|
||||
|
||||
#RX=$(/sbin/ip -o -s link show eth0 | cut -f40 -d" ")
|
||||
#TX=$(/sbin/ip -o -s link show eth0 | cut -f84 -d" ")
|
||||
|
||||
$RRDTOOL update ${i}_day.rrd --template RXBytes:TXBytes N:${RX}:${TX}
|
||||
done
|
||||
|
||||
for i in "${DISKS[@]}"
|
||||
do
|
||||
READS=$(${IOSTAT} -d $i | grep $i | awk {'print $5'})
|
||||
WRITES=$(${IOSTAT} -d $i | grep $i | awk {'print $6'})
|
||||
|
||||
READSB=$((${READS}*1000))
|
||||
WRITESB=$((${WRITES}*1000))
|
||||
|
||||
$RRDTOOL update ${i}.rrd --template reads:writes N:${READSB}:${WRITESB}
|
||||
done
|
||||
|
||||
ONEMIN=$(cat /proc/loadavg | awk {'print $1'})
|
||||
FIVEMIN=$(cat /proc/loadavg | awk {'print $2'})
|
||||
FIFTEENMIN=$(cat /proc/loadavg | awk {'print $3'})
|
||||
|
||||
$RRDTOOL update loadavg.rrd --template one:five:fifteen N:${ONEMIN}:${FIVEMIN}:${FIFTEENMIN}
|
||||
|
||||
sleep 7
|
||||
|
||||
done
|
Loading…
Reference in New Issue
Block a user