Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1051330
  • 博文数量: 171
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 2077
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 10:11
个人简介

pugna

文章分类

全部博文(171)

文章存档

2021年(4)

2020年(1)

2019年(4)

2018年(5)

2017年(7)

2016年(9)

2015年(36)

2014年(8)

2013年(96)

2012年(1)

分类: LINUX

2015-12-24 08:58:34

说明蓝色=命令名称

浅绿=命令参数

浅蓝=选项

 紫色=目录

      系统环境:CentOS  5.8 x86_64

不了解rrdtool是什么的先百度,这里不罗嗦了,直接上实例.

建库即数据抓取脚本:

	
  1. #!/bin/bash

  2. BIN="/usr/bin/rrdtool"

  3. RRD="./test.rrd"

  4. if ! test -e $RRD ;then 

  5.     $BIN create  test.rrd -s 5 \ 

  6.     DS:eth0:COUNTER:10:U:U \ 

  7.     DS:cpu:GAUGE:10:U:U \ 

  8.     DS:mem_total:GAUGE:10:U:U \ 

  9.     DS:mem_free:GAUGE:10:U:U \ 

  10.     DS:mem_buffer:GAUGE:10:U:U \ 

  11.     DS:mem_cache:GAUGE:10:U:U \ 

  12.     RRA:MAX:0.5:1:600 \ 

  13.     RRA:MAX:0.5:5:600 \ 

  14.     RRA:MAX:0.5:12:600 \ 

  15.     RRA:AVERAGE:0.5:1:600 \ 

  16.     RRA:AVERAGE:0.5:5:600 \ 

  17.     RRA:AVERAGE:0.5:12:600 

  18. fi 

  19. while : 

  20. do

  21.     load=`awk '{print $1*100}' /proc/loadavg` 

  22.     eth0=`grep -oP eth0:[0-9]+ /proc/net/dev` 

  23.     mem_t=`awk '/MemTotal/{print $2}' /proc/meminfo` 

  24.     mem_f=`awk '/MemFree/{print $2}' /proc/meminfo` 

  25.     mem_b=`awk '/Buffers/{print $2}' /proc/meminfo` 

  26.     mem_c=`awk '/Cached/{print $2;exit}' /proc/meminfo` 

  27.     INFO=N:${eth0##*:}:$load:$mem_t:$mem_f:$mem_b:$mem_c 

  28. $BIN update $RRD $INFO

  29.     echo $INFO 

  30.     echo $((i++)) 

  31.     sleep 5 

  32. 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,用这个值来绘图。

 

 

画图参数:

	
  1. rrdtool graph test.png \ 

  2. --start now-300 \ 

  3. DEF:load=test.rrd:cpu:MAX \ 

  4. DEF:eth0=test.rrd:eth0:AVERAGE \ 

  5. DEF:mem_t=test.rrd:mem_total:AVERAGE \ 

  6. DEF:mem_f=test.rrd:mem_free:AVERAGE \ 

  7. DEF:mem_b=test.rrd:mem_buffer:AVERAGE \ 

  8. DEF:mem_c=test.rrd:mem_cache:AVERAGE \ 

  9. CDEF:vload=load,1700,+ \ 

  10. CDEF:veth0=1200,eth0,5,/,+ \ 

  11. CDEF:vmem_t=mem_t,1024,/ \ 

  12. CDEF:vmem_f=mem_f,1024,/ \ 

  13. CDEF:vmem_b=mem_b,1024,/ \ 

  14. CDEF:vmem_c=mem_b,1024,/ \ 

  15. COMMENT:"          名称           最大值          平均值\n" \ 

  16. COMMENT:"      " \ 

  17. AREA:vmem_t#0000C6:"内存小  " \ 

  18. GPRINT:mem_t:MAX:"%12.0lf" \ 

  19. GPRINT:mem_t:AVERAGE:"%12.0lf\n" \ 

  20. COMMENT:"      " \ 

  21. AREA:vmem_f#00DB00:"空闲容量" \ 

  22. GPRINT:mem_f:MAX:"%12.0lf" \ 

  23. GPRINT:mem_f:AVERAGE:"%12.0lf\n" \ 

  24. COMMENT:"      " \ 

  25. STACK:vmem_b#9F35FF:"buffer " \ 

  26. GPRINT:mem_b:MAX:"%12.0lf" \ 

  27. GPRINT:mem_b:AVERAGE:"%12.0lf\n" \ 

  28. COMMENT:"      " \ 

  29. STACK:vmem_c#00E3E3:"cache  " \ 

  30. GPRINT:mem_c:MAX:"%12.0lf" \ 

  31. GPRINT:mem_c:AVERAGE:"%12.0lf\n" \ 

  32. COMMENT:"      " \ 

  33. LINE1:veth0#6F00D2:"eth0   " \ 

  34. GPRINT:eth0:MAX:"%12.0lf" \ 

  35. GPRINT:eth0:AVERAGE:"%12.0lf\n" \ 

  36. COMMENT:"      " \ 

  37. LINE1:vload#00DB00:"负载    " \ 

  38. GPRINT:load:MAX:"%12.0lf" \ 

  39. GPRINT:load:AVERAGE:"%12.0lf\n" \ 

  40. -t "系统监控" \ 

  41. -v "总表" \ 

  42. -h 250 -w 400 \ 

  43. --lower-limit 0  --upper-limit 2000 --rigid \ 

  44. -y 500:1 

效果图:

定义画图数据DEF:load=test.rrd:cpu:MAX
定义一个变量load,他的值为 test.rrd数据库中cpu表示的最大值,若数据库中定义了AVERAGE,MIN,LAST 等其他统计方法,可自行修改。

数据处理CDEF:vload=load,1700,+  
若有需要处理的数据,可以用CDEF定义虚拟变量来进行进一步处理,数据处理啊采用逆波兰表达式。
COMMENT :用来输出一个字符串,输出格式类似c语言。

打印报表GPRINT:mem_c:AVERAGE:"%12.0lf\n"  
mem_cDEFCDFE定义的变量AVERAGE为统计方法,后面的输出格式类似c语言
画图方法(3种):LINE(1|2|3),ARPE,STACK
AREA:填充

LINE{1|2|3}:线条,其中1,2,3 表示粗细

STACK:累加画图

其他参数:

-s|--start-time绘图开始时间,单位s。 可以用NOW-秒数表示,也可以直接用时间串。默认一天前
-e 绘图结束时间单位秒

-t|--title 图上显示的标题

-v|--vertical-label Y轴上的说明文字
-w|--width pixels  绘图区域,画图区宽的大小
-h|--height pixels  绘图区域,画图区高的大小
-u|--upper-limit Y轴正值高度
-l|--lower-limit Y轴负值高度
--no-minor 不要副格线
--upper-limit
-x|--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM设置x轴刻度
-x|--x-grid nonex轴不显示刻度
-y|--y-gridy轴刻度线的间距及刻度线数次数

-y|--y-grid none
y轴不显示刻度
-Y|--alt-y-grid
最大限度的优化 Y 轴的刻度
-X|--units-exponentY 轴的值进行调整-18、-15、-12、-9、-6 、-3、0、3、6、9、12、15、18 。0 表示以原值显示,3 表示数值除以1000,也就是以 k 为单位显示,6 就是以M 显示,9 就是以 G 显示。
--right-axis 左轴倍数:右轴相加值  如:--right-axis -1,10 左轴 200 则右轴为 -190
--right-axis-format %1.0lf  定义右轴格式类似c语言
-n|--font FONTTAG:size:[font]  FONTTAG可是 DEFAULT(全部),TITLE (标题)、AXIS(坐标轴字体)、UNIT(Y轴单位字体)、LEGEND(图例字体),size 字体大小,字体类型,如:-n TITLE:10:"/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc"
-c|--color COLORTAG#rrggbb[aa] BACK (背景)、 CANVAS(图形背景)、SHADEA(左侧和顶部边界)、SHADEB(右边和底部边框)、GRID,MGRID(网格)、FONT(字体颜色)、AXIS(坐标轴)、FRAME(框架周围)、ARROW(箭头颜色)
-g|--no-legend 用于取消图表下方的图例
-b|--base value 默认 1k=1000 ,使用 –b 可以进行调整,例如 –b 1024
VRULE:time#color[:legend]  垂直分割线
HRULE:value#color[:legend] 水平那个分割线
--imgformat  PNG  设置输出类型,类型有  PNG|SVG|EPS|PDF 四种
-N|--no-gridfit  去除直角,是图像看着更圆滑
-E|--slope-mode  增加平滑度
--zoom  2  对生成的图形进行缩放,如 100X100 按 2倍放大 就变成 200X200
-W|--watermark 水印  在图片下方加印水印
-L|--units-length 字符数 左Y轴左侧和右Y轴右侧分别增加多少个字符的宽度,右Y轴不设置不增加
--disable-rrdtool-tag 关闭右侧 RRDTOOL \ TOBI OETIBER 水印

 加参数后效果图:

画图参数:

	
  1. rrdtool graph test.png \ 

  2. --start now-300 \ 

  3. DEF:load=test.rrd:cpu:MAX \ 

  4. DEF:eth0=test.rrd:eth0:AVERAGE \ 

  5. DEF:mem_t=test.rrd:mem_total:AVERAGE \ 

  6. DEF:mem_f=test.rrd:mem_free:AVERAGE \ 

  7. DEF:mem_b=test.rrd:mem_buffer:AVERAGE \ 

  8. DEF:mem_c=test.rrd:mem_cache:AVERAGE \ 

  9. CDEF:vload=load,1700,+ \ 

  10. CDEF:veth0=1200,eth0,5,/,+ \ 

  11. CDEF:vmem_t=mem_t,1024,/ \ 

  12. CDEF:vmem_f=mem_f,1024,/ \ 

  13. CDEF:vmem_b=mem_b,1024,/ \ 

  14. CDEF:vmem_c=mem_b,1024,/ \ 

  15. COMMENT:"          名称           最大值          平均值\n" \ 

  16. COMMENT:"      " \ 

  17. AREA:vmem_t#0000C6:"内存小  " \ 

  18. GPRINT:mem_t:MAX:"%12.0lf" \ 

  19. GPRINT:mem_t:AVERAGE:"%12.0lf\n" \ 

  20. COMMENT:"      " \ 

  21. AREA:vmem_f#00DB00:"空闲容量" \ 

  22. GPRINT:mem_f:MAX:"%12.0lf" \ 

  23. GPRINT:mem_f:AVERAGE:"%12.0lf\n" \ 

  24. COMMENT:"      " \ 

  25. STACK:vmem_b#9F35FF:"buffer " \ 

  26. GPRINT:mem_b:MAX:"%12.0lf" \ 

  27. GPRINT:mem_b:AVERAGE:"%12.0lf\n" \ 

  28. COMMENT:"      " \ 

  29. STACK:vmem_c#00E3E3:"cache  " \ 

  30. GPRINT:mem_c:MAX:"%12.0lf" \ 

  31. GPRINT:mem_c:AVERAGE:"%12.0lf\n" \ 

  32. COMMENT:"      " \ 

  33. LINE1:veth0#6F00D2:"eth0   " \ 

  34. GPRINT:eth0:MAX:"%12.0lf" \ 

  35. GPRINT:eth0:AVERAGE:"%12.0lf\n" \ 

  36. COMMENT:"      " \ 

  37. LINE1:vload#00DB00:"负载    " \ 

  38. GPRINT:load:MAX:"%12.0lf" \ 

  39. GPRINT:load:AVERAGE:"%12.0lf\n" \ 

  40. -t "系统监控" \ 

  41. -v "总表" \ 

  42. -h 250 -w 400 \ 

  43. --lower-limit 0  --upper-limit 2000 --rigid \ 

  44. -y 500:1 \ 

  45. -X 0 \ 

  46. --no-gridfit \ 

  47. --slope-mode \ 

  48. --zoom 1.5 \ 

  49. --right-axis-label "test" \ 

  50. --right-axis "2:10"  \ 

  51. --right-axis-format %1.0lf \ 

  52. --watermark "`date`" 

 

本文出自 “left_left” 博客,请务必保留此出处http://linux521.blog.51cto.com/4099846/1064632

阅读(1970) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~