Hrátky s RRDTool 2

Přidáno 18. září 2008, 21:12

Zase jsem se dal do hraní si s RRDTool .-)

Tentokrát přidám pouze svoje funkční řešení pro sledování výkonu CPU a zatížení sítě. CPU už je drobet starší a podle všeho při vytváření databáze nejsou třeba vytvářet záznamy o minimální a maximální hodnotě, protože u sítě taky nejsou a přesto je tam používám .-) Ale funguje to, tak se do toho už nebudu vrtat :)

CPU


Vytvoření databáze:

rrdtool create /var/www/localhost/htdocs/rrdtool/rrd/cpu.rrd
--step 60
--start N
DS:cpu_user:COUNTER:180:0:200
DS:cpu_cmpl1:COUNTER:180:0:200
DS:cpu_cmpl2:COUNTER:180:0:200
RRA:AVERAGE:0.5:1:1450
RRA:MIN:0.5:1450:1
RRA:MAX:0.5:1450:1
RRA:AVERAGE:0.5:5:2050
RRA:MIN:0.5:10250:1
RRA:MAX:0.5:10250:1
RRA:AVERAGE:0.5:60:750
RRA:MIN:0.5:45000:1
RRA:MAX:0.5:45000:1
RRA:AVERAGE:0.5:720:730
RRA:MIN:0.5:525600:1
RRA:MAX:0.5:525600:1

Výpis spustitelného souboru, který pravidelně spouštím CRONem (/etc/cron.rrdtool/cpu):

#!/bin/sh

dir=/var/www/localhost/htdocs/rrdtool/

snmp_reply_row=`snmpwalk -v1 -c public localhost ssCpuRawUser`
snmp_reply_array=( $snmp_reply_row )
cpu_user=${snmp_reply_array[${#snmp_reply_array[*]}-1]}

snmp_reply_row=`snmpwalk -v1 -c public localhost ssCpuRawSystem`
snmp_reply_array=( $snmp_reply_row )
cpu_sys=${snmp_reply_array[${#snmp_reply_array[*]}-1]}

snmp_reply_row=`snmpwalk -v1 -c public localhost ssCpuRawNice`
snmp_reply_array=( $snmp_reply_row )
cpu_nice=${snmp_reply_array[${#snmp_reply_array[*]}-1]}

if [ -z $cpu_user ] ; then
cpu_user=0
fi
if [ -z $cpu_sys ] ; then
cpu_sys=0
fi
if [ -z $cpu_nice ] ; then
cpu_nice=0
fi

rrdtool update "$dir"rrd/cpu.rrd N:$cpu_user:$cpu_sys:$cpu_nice

start_hour=$((`date +%s`-7200))
start_day=$((`date +%s`-86400))
start_week=$((`date +%s`-604800))
start_month=$((`date +%s`-2678400))
start_year=$((`date +%s`-31536000))

rrdtool graph "$dir"img/cpu_hour.png
--title="Dvou-hodinový graf"
--x-grid MINUTE:5:MINUTE:15:MINUTE:15:0:%H:%M
--start $start_hour
--end N
--vertical-label "Využití CPU [%]"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
--upper-limit 100
--lower-limit 0
DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE
DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE
DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE
CDEF:realcpu_sys=cpu_sys,2,/
CDEF:realcpu_nice=cpu_nice,2,/
CDEF:realcpu_user=cpu_user,2,/
CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+
CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+
VDEF:realcpu_cmpl2_max=realcpu_cmpl2,MAXIMUM
VDEF:realcpu_cmpl2_min=realcpu_cmpl2,MINIMUM
LINE2:realcpu_cmpl2#FF0000:"CPU system"
GPRINT:realcpu_cmpl2_max:" Maximum\: %.lf%%\n"
LINE2:realcpu_cmpl1#00FF00:"CPU user"
GPRINT:realcpu_cmpl2_min:" Minimum\: %.lf%%\n"
LINE2:realcpu_nice#0000FF:"CPU nice\n"

rrdtool graph "$dir"img/cpu_day.png
--title="Denní graf"
--x-grid MINUTE:15:HOUR:1:HOUR:3:0:%H:%M
--start $start_day
--end N
--vertical-label "Využití CPU [%]"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
--upper-limit 100
--lower-limit 0
DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE
DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE
DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE
CDEF:realcpu_sys=cpu_sys,2,/
CDEF:realcpu_nice=cpu_nice,2,/
CDEF:realcpu_user=cpu_user,2,/
CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+
CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+
VDEF:realcpu_cmpl2_max=realcpu_cmpl2,MAXIMUM
VDEF:realcpu_cmpl2_min=realcpu_cmpl2,MINIMUM
LINE2:realcpu_cmpl2#FF0000:"CPU system"
GPRINT:realcpu_cmpl2_max:" Maximum\: %.lf%%\n"
LINE2:realcpu_cmpl1#00FF00:"CPU user"
GPRINT:realcpu_cmpl2_min:" Minimum\: %.lf%%\n"
LINE2:realcpu_nice#0000FF:"CPU nice\n"

rrdtool graph "$dir"img/cpu_week.png
--title="Týdenní graf (5-ti minutový průměr)"
--x-grid HOUR:6:HOUR:24:HOUR:24:0:" %A"
--start $start_week
--end N
--vertical-label "Využití CPU [%]"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
--upper-limit 100
--lower-limit 0
DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE
DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE
DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE
CDEF:realcpu_sys=cpu_sys,2,/
CDEF:realcpu_nice=cpu_nice,2,/
CDEF:realcpu_user=cpu_user,2,/
CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+
CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+
VDEF:realcpu_cmpl2_max=realcpu_cmpl2,MAXIMUM
VDEF:realcpu_cmpl2_min=realcpu_cmpl2,MINIMUM
LINE2:realcpu_cmpl2#FF0000:"CPU system"
GPRINT:realcpu_cmpl2_max:" Maximum\: %.lf%%\n"
LINE2:realcpu_cmpl1#00FF00:"CPU user"
GPRINT:realcpu_cmpl2_min:" Minimum\: %.lf%%\n"
LINE2:realcpu_nice#0000FF:"CPU nice\n"

rrdtool graph "$dir"img/cpu_month.png
--title="Měsíční graf (hodinový průměr)"
--x-grid DAY:1:WEEK:1:WEEK:1:0:" Týden "%W
--start $start_month
--end N
--vertical-label "Využití CPU [%]"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
--upper-limit 100
--lower-limit 0
DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE
DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE
DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE
CDEF:realcpu_sys=cpu_sys,2,/
CDEF:realcpu_nice=cpu_nice,2,/
CDEF:realcpu_user=cpu_user,2,/
CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+
CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+
VDEF:realcpu_cmpl2_max=realcpu_cmpl2,MAXIMUM
VDEF:realcpu_cmpl2_min=realcpu_cmpl2,MINIMUM
LINE2:realcpu_cmpl2#FF0000:"CPU system"
GPRINT:realcpu_cmpl2_max:" Maximum\: %.lf%%\n"
LINE2:realcpu_cmpl1#00FF00:"CPU user"
GPRINT:realcpu_cmpl2_min:" Minimum\: %.lf%%\n"
LINE2:realcpu_nice#0000FF:"CPU nice\n"

rrdtool graph "$dir"img/cpu_year.png
--title="Roční graf (12-ti hodinový průměr)"
--start $start_year
--end N
--vertical-label "Využití CPU [%]"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
--upper-limit 100
--lower-limit 0
DEF:cpu_user="$dir"rrd/cpu.rrd:cpu_user:AVERAGE
DEF:cpu_sys="$dir"rrd/cpu.rrd:cpu_cmpl1:AVERAGE
DEF:cpu_nice="$dir"rrd/cpu.rrd:cpu_cmpl2:AVERAGE
CDEF:realcpu_sys=cpu_sys,2,/
CDEF:realcpu_nice=cpu_nice,2,/
CDEF:realcpu_user=cpu_user,2,/
CDEF:realcpu_cmpl1=realcpu_nice,realcpu_user,+
CDEF:realcpu_cmpl2=realcpu_cmpl1,realcpu_sys,+
VDEF:realcpu_cmpl2_max=realcpu_cmpl2,MAXIMUM
VDEF:realcpu_cmpl2_min=realcpu_cmpl2,MINIMUM
LINE2:realcpu_cmpl2#FF0000:"CPU system"
GPRINT:realcpu_cmpl2_max:" Maximum\: %.lf%%\n"
LINE2:realcpu_cmpl1#00FF00:"CPU user"
GPRINT:realcpu_cmpl2_min:" Minimum\: %.lf%%\n"
LINE2:realcpu_nice#0000FF:"CPU nice\n"

Síť


Vytvoření databáze:

rrdtool create /var/www/localhost/htdocs/rrdtool/rrd/net.rrd
--step 60
--start N
DS:in:DERIVE:180:0:100000000
DS:out:DERIVE:180:0:100000000
RRA:AVERAGE:0.5:1:1450
RRA:AVERAGE:0.5:5:2050
RRA:AVERAGE:0.5:60:750
RRA:AVERAGE:0.5:720:730

Výpis spustitelného souboru, který pravidelně spouštím CRONem (/etc/cron.rrdtool/net):

#!/bin/bash

dir='/var/www/localhost/htdocs/rrdtool/'

in=`/sbin/ifconfig eth0 |grep bytes|cut -d":" -f2|cut -d" " -f1`
out=`/sbin/ifconfig eth0 |grep bytes|cut -d":" -f3|cut -d" " -f1`

#echo "rrdtool update "$dir"rrd/net.rrd N:$in:$out"
rrdtool update "$dir"rrd/net.rrd N:$in:$out

start_hour=$((`date +%s`-7200))
start_day=$((`date +%s`-86400))
start_week=$((`date +%s`-604800))
start_month=$((`date +%s`-2678400))
start_year=$((`date +%s`-31536000))

rrdtool graph "$dir"img/net_hour.png
--title="Dvou-hodinový graf"
--x-grid MINUTE:15:HOUR:1:HOUR:3:0:%H:%M
--start $start_hour
--end N
--vertical-label "bytes/s"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
DEF:in="$dir"rrd/net.rrd:in:AVERAGE
DEF:out="$dir"rrd/net.rrd:out:AVERAGE
CDEF:out_neg=out,-1,*
AREA:in#32CD32:"Incoming"
LINE2:in#336600
GPRINT:in:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:in:MAX:" Max\: %5.1lf %s"
GPRINT:in:LAST:" Current\: %5.1lf %Sbytes/sec\n"
AREA:out_neg#4169E1:Outgoing
LINE2:out_neg#0033CC
GPRINT:out:MAX:" Max\: %5.1lf %S"
GPRINT:out:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:out:LAST:" Current\: %5.1lf %Sbytes/sec"

rrdtool graph "$dir"img/net_day.png
--title="Denní graf"
--x-grid MINUTE:15:HOUR:1:HOUR:3:0:%H:%M
--start $start_day
--end N
--vertical-label "bytes/s"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
DEF:in="$dir"rrd/net.rrd:in:AVERAGE
DEF:out="$dir"rrd/net.rrd:out:AVERAGE
CDEF:out_neg=out,-1,*
AREA:in#32CD32:"Incoming"
LINE2:in#336600
GPRINT:in:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:in:MAX:" Max\: %5.1lf %s"
GPRINT:in:LAST:" Current\: %5.1lf %Sbytes/sec\n"
AREA:out_neg#4169E1:Outgoing
LINE2:out_neg#0033CC
GPRINT:out:MAX:" Max\: %5.1lf %S"
GPRINT:out:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:out:LAST:" Current\: %5.1lf %Sbytes/sec"

rrdtool graph "$dir"img/net_week.png
--title="Týdenní graf (5-ti minutový průměr)"
--x-grid HOUR:6:HOUR:24:HOUR:24:0:" %A"
--start $start_week
--end N
--vertical-label "bytes/s"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
DEF:in="$dir"rrd/net.rrd:in:AVERAGE
DEF:out="$dir"rrd/net.rrd:out:AVERAGE
CDEF:out_neg=out,-1,*
AREA:in#32CD32:"Incoming"
LINE2:in#336600
GPRINT:in:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:in:MAX:" Max\: %5.1lf %s"
GPRINT:in:LAST:" Current\: %5.1lf %Sbytes/sec\n"
AREA:out_neg#4169E1:Outgoing
LINE2:out_neg#0033CC
GPRINT:out:MAX:" Max\: %5.1lf %S"
GPRINT:out:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:out:LAST:" Current\: %5.1lf %Sbytes/sec"

rrdtool graph "$dir"img/net_month.png
--title="Měsíční graf (hodinový průměr)"
--x-grid DAY:1:WEEK:1:WEEK:1:0:" Týden "%W
--start $start_month
--end N
--vertical-label "bytes/s"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
DEF:in="$dir"rrd/net.rrd:in:AVERAGE
DEF:out="$dir"rrd/net.rrd:out:AVERAGE
CDEF:out_neg=out,-1,*
AREA:in#32CD32:"Incoming"
LINE2:in#336600
GPRINT:in:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:in:MAX:" Max\: %5.1lf %s"
GPRINT:in:LAST:" Current\: %5.1lf %Sbytes/sec\n"
AREA:out_neg#4169E1:Outgoing
LINE2:out_neg#0033CC
GPRINT:out:MAX:" Max\: %5.1lf %S"
GPRINT:out:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:out:LAST:" Current\: %5.1lf %Sbytes/sec"

rrdtool graph "$dir"img/net_year.png
--title="Roční graf (12-ti hodinový průměr)"
--start $start_year
--end N
--vertical-label "bytes/s"
--watermark http://pat.kk.zcu.cz
--width 800
--height 120
--rigid
DEF:in="$dir"rrd/net.rrd:in:AVERAGE
DEF:out="$dir"rrd/net.rrd:out:AVERAGE
CDEF:out_neg=out,-1,*
AREA:in#32CD32:"Incoming"
LINE2:in#336600
GPRINT:in:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:in:MAX:" Max\: %5.1lf %s"
GPRINT:in:LAST:" Current\: %5.1lf %Sbytes/sec\n"
AREA:out_neg#4169E1:Outgoing
LINE2:out_neg#0033CC
GPRINT:out:MAX:" Max\: %5.1lf %S"
GPRINT:out:AVERAGE:" Avg\: %5.1lf %S"
GPRINT:out:LAST:" Current\: %5.1lf %Sbytes/sec"

Pak už by mělo stačit upravit crontab jako root (ifconfig alespoň u mne vyžaduje superuživatele, pokud to nechci změnit manuálně):

crontab -e
a napsat n2co jako: */1 * * * * /bin/run-parts /etc/cron.rrdtool 1> /dev/null
to způsobí spuštění všech spustitelných skriptů v adresáři /etc/cron.rrdool/

Pak už stačí jen připravit nějaký html soubor, který bude odkazovat na obrázky. Třeba index.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <br>
<html>

<head>
<meta http-equiv="refresh" content="300" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>RRDtool</title>
</head>

<body>

<center>

<a href="cpu.html"><h3>Zatížení­ procesoru</h3><img src="img/cpu_hour.png" alt="dvouhodinový graf CPU" width="400" border="0"></a>

<a href="net.html"><h3>Vytížení­ sítě</h3><img src="img/net_hour.png" alt="dvouhodinový graf sítě" width="400" border="0"></a>

</center>

</body>

</html>



A pak ještě pro každý skript zvlášť.
cpu.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<meta http-equiv="refresh" content="300">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Zátěž procesoru</title>
</head>

<body>

<center>

<h1>Zatížení procesoru</h1>

<img src="img/cpu_hour.png" alt="dvouhodinovy graf">

<img src="img/cpu_day.png" alt="denni graf">
<img src="img/cpu_week.png" alt="tydenni graf">
<img src="img/cpu_month.png" alt="mesicni graf">
<img src="img/cpu_year.png" alt="rocni graf">

</center>

</body>

</html>



A net.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<meta http-equiv="refresh" content="300">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Vytížení sítě</title>
</head>

<body>

<center>

<h1>Vytížení sítě</h1>

<img src="img/net_hour.png" alt="dvouhodinovy graf">
<img src="img/net_day.png" alt="denni graf">
<img src="img/net_week.png" alt="tydenni graf">
<img src="img/net_month.png" alt="mesicni graf">
<img src="img/net_year.png" alt="rocni graf">

</center>

</body>

</html>

Přidání vzkazu
* Tyto údaje je nutné vyplnit.