pugna
全部博文(171)
分类: LINUX
2015-12-24 08:58:34
说明:蓝色=命令名称
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 5.8 x86_64
不了解rrdtool是什么的先百度,这里不罗嗦了,直接上实例.
建库即数据抓取脚本:
#!/bin/bash
BIN="/usr/bin/rrdtool"
RRD="./test.rrd"
if ! test -e $RRD ;then
$BIN create test.rrd -s 5 \
DS:eth0:COUNTER:10:U:U \
DS:cpu:GAUGE:10:U:U \
DS:mem_total:GAUGE:10:U:U \
DS:mem_free:GAUGE:10:U:U \
DS:mem_buffer:GAUGE:10:U:U \
DS:mem_cache:GAUGE:10:U:U \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:5:600 \
RRA:MAX:0.5:12:600 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:5:600 \
RRA:AVERAGE:0.5:12:600
fi
while :
do
load=`awk '{print $1*100}' /proc/loadavg`
eth0=`grep -oP eth0:[0-9]+ /proc/net/dev`
mem_t=`awk '/MemTotal/{print $2}' /proc/meminfo`
mem_f=`awk '/MemFree/{print $2}' /proc/meminfo`
mem_b=`awk '/Buffers/{print $2}' /proc/meminfo`
mem_c=`awk '/Cached/{print $2;exit}' /proc/meminfo`
INFO=N:${eth0##*:}:$load:$mem_t:$mem_f:$mem_b:$mem_c
$BIN update $RRD $INFO
echo $INFO
echo $((i++))
sleep 5
done
说明:
-s|--step 采集的间隔
--start 时间串(这里没写,默认是当前时间)
DS: eth0 : COUNTER : 10 : U : U
| 标识 | 类型 | 心跳 | 最小值 | 最大值
标识:根据自己习惯定义
类型(4种): GAUGE | COUNTER | DERIVE | ABSOLUTE
GAUGE:实际值,不对输入的值进行任何修改,如:输入 50,60 输出 50,60
COUNTER:必须是递增的数据,具体的数据为后一个数据减去前一个数据,如:两次接受的数据为 50、60 那么输出值就是10/setp,其实就是两个差值,它表示的是经过一个刷新周期。注:
DERIVE:和 COUNTER 类似。但可以是递增数据,也可以递减数据,或者一会增加一会儿减少。如:输入 40,50,30 输出 10/step,-20/step
ABSOLUTE:直接用真实值除以采集间隔,相当于GAUGE/step,如:输入 50,60 输出 50/step,60/step
特殊类型:
COMPUTE :不接受输入,数据源为本rrd中已经定义的DS,它的定义是一个表达式,能够对DS数据源进行计算得出新数据。
例如 DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:eth0_bytes,8,*
只能用于本数据库(test1.rrd库中的DS数据不能作为test2.rrd中COMPUTE的数据源)。
心跳:设定心跳时间,例子中设置的是10s,两个刷心周期。若某一时刻没有产生数据,则这个时刻的前后5s中产生数据的平均值为这个时刻的值,如果两个周期内没有收到结果,网数据文档里插入UNKNOWN
最大值,最小值:记录数据的最小值和最大值,U:U 代表不限范围。
注:最大值和最小值对于GAUGE就是指输入值,但是对于其它类型是指计算值,而不是输入值。
RRA: MAX : 0.5 : 1 : 600
| 统计 | 比例 | PDP | CDP
统计(4种):AVERAGE,MAX,MIN,LAST 如:RRA:MAX:0.5:5:600 中保存了5个PDP
AVERAGE :5个的平均值
MAX :5个中最大值
MIN :5个中最小值
LAST :最后一个值
比例:0.5 表示一个 CDP 中的所有 PDP 如果超过一半的值为 UNKNOWN ,则该 CDP 的值就被标为
UNKNOWN。
PDP:每个周期统计的值,如例子中周期为5,则5秒产生一个PDP
CDP:一个或多个 PDP 合并为(计算出)一个 CDP,存入RRA,用这个值来绘图。
画图参数:
rrdtool graph test.png \
--start now-300 \
DEF:load=test.rrd:cpu:MAX \
DEF:eth0=test.rrd:eth0:AVERAGE \
DEF:mem_t=test.rrd:mem_total:AVERAGE \
DEF:mem_f=test.rrd:mem_free:AVERAGE \
DEF:mem_b=test.rrd:mem_buffer:AVERAGE \
DEF:mem_c=test.rrd:mem_cache:AVERAGE \
CDEF:vload=load,1700,+ \
CDEF:veth0=1200,eth0,5,/,+ \
CDEF:vmem_t=mem_t,1024,/ \
CDEF:vmem_f=mem_f,1024,/ \
CDEF:vmem_b=mem_b,1024,/ \
CDEF:vmem_c=mem_b,1024,/ \
COMMENT:" 名称 最大值 平均值\n" \
COMMENT:" " \
AREA:vmem_t#0000C6:"内存小 " \
GPRINT:mem_t:MAX:"%12.0lf" \
GPRINT:mem_t:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
AREA:vmem_f#00DB00:"空闲容量" \
GPRINT:mem_f:MAX:"%12.0lf" \
GPRINT:mem_f:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_b#9F35FF:"buffer " \
GPRINT:mem_b:MAX:"%12.0lf" \
GPRINT:mem_b:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_c#00E3E3:"cache " \
GPRINT:mem_c:MAX:"%12.0lf" \
GPRINT:mem_c:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:veth0#6F00D2:"eth0 " \
GPRINT:eth0:MAX:"%12.0lf" \
GPRINT:eth0:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:vload#00DB00:"负载 " \
GPRINT:load:MAX:"%12.0lf" \
GPRINT:load:AVERAGE:"%12.0lf\n" \
-t "系统监控" \
-v "总表" \
-h 250 -w 400 \
--lower-limit 0 --upper-limit 2000 --rigid \
-y 500:1
其他参数:
-s|--start-time绘图开始时间,单位s。 可以用NOW-秒数表示,也可以直接用时间串。默认一天前
-e 绘图结束时间单位秒
-t|--title 图上显示的标题
加参数后效果图:
画图参数:
rrdtool graph test.png \
--start now-300 \
DEF:load=test.rrd:cpu:MAX \
DEF:eth0=test.rrd:eth0:AVERAGE \
DEF:mem_t=test.rrd:mem_total:AVERAGE \
DEF:mem_f=test.rrd:mem_free:AVERAGE \
DEF:mem_b=test.rrd:mem_buffer:AVERAGE \
DEF:mem_c=test.rrd:mem_cache:AVERAGE \
CDEF:vload=load,1700,+ \
CDEF:veth0=1200,eth0,5,/,+ \
CDEF:vmem_t=mem_t,1024,/ \
CDEF:vmem_f=mem_f,1024,/ \
CDEF:vmem_b=mem_b,1024,/ \
CDEF:vmem_c=mem_b,1024,/ \
COMMENT:" 名称 最大值 平均值\n" \
COMMENT:" " \
AREA:vmem_t#0000C6:"内存小 " \
GPRINT:mem_t:MAX:"%12.0lf" \
GPRINT:mem_t:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
AREA:vmem_f#00DB00:"空闲容量" \
GPRINT:mem_f:MAX:"%12.0lf" \
GPRINT:mem_f:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_b#9F35FF:"buffer " \
GPRINT:mem_b:MAX:"%12.0lf" \
GPRINT:mem_b:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_c#00E3E3:"cache " \
GPRINT:mem_c:MAX:"%12.0lf" \
GPRINT:mem_c:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:veth0#6F00D2:"eth0 " \
GPRINT:eth0:MAX:"%12.0lf" \
GPRINT:eth0:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:vload#00DB00:"负载 " \
GPRINT:load:MAX:"%12.0lf" \
GPRINT:load:AVERAGE:"%12.0lf\n" \
-t "系统监控" \
-v "总表" \
-h 250 -w 400 \
--lower-limit 0 --upper-limit 2000 --rigid \
-y 500:1 \
-X 0 \
--no-gridfit \
--slope-mode \
--zoom 1.5 \
--right-axis-label "test" \
--right-axis "2:10" \
--right-axis-format %1.0lf \
--watermark "`date`"
本文出自 “left_left” 博客,请务必保留此出处http://linux521.blog.51cto.com/4099846/1064632