设为首页 收藏本站
查看: 453|回复: 0

[经验分享] rrdtool学习和自定义脚本绘制图形备忘

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-8 09:59:06 | 显示全部楼层 |阅读模式
     RRDtool (Round Robin Database Tool)就是一个强大的绘图的引擎,很多工具例如MRTG都可以调用rrdtool绘图。包括现在使用很多的cacti也是基于rrdtool的基础上画图的,可以说cacti只是提供一个显示图形的web页面。        rrdtool:所谓的round robin指的就是一种环形数据库:数据的存储方式是一个圆环形式存储的,我们可以自己去定义,数据能够存放多久,给它多大的空间。当我们的空间填满之后,后面的数据又可以覆盖前面的数据。所以rrdtool数据库是不会增大的。(但是我们也要明白一个道理。既然数据填满之后会覆盖,那么我们多给它定义就好了):建立数据库一般名称我们都定义为 .rrd的后缀文件。(如下图所示:)
wKioL1SCqYrDwzDuAABN5_fZ8No588.jpg
主要理解的概念:用一张图说明:
wKioL1SCszjThxzIAADH8erG7aw005.jpg
  • DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。
  • DST:DST 就是DS的类型。有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。由于网卡流量属于计数器型,所以这里应该为 COUNTER 。
  • RRA:RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果。RRA的作用就是定义更新的数据是如何记录的。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288条。这么庞大的 数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。
  • PDP:Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义。注意,该值不一定等于RRDtool 收到的那个值。除非是GAUGE ,可以看下面的例子就知道了
  • CF:CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。具体作用等到 update 操作时再说。
  • CDP:Consolidation Data Point 。RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA的数据,绘图时使用的也是这些数据
绘图思路:
1、建立数据库:
2、抓取数据流量
3、更新rrdtool数据库
4、绘制图形
实验开始:借鉴与马哥的51教程。定义一个监控mysql访问量,绘制图形:
1、定义数据库:
[iyunv@node1 ~] # rrdtool create mysql.rrd --step 3 DS:mysqlselect:COUNTER:5:0:U RRA:AVERAGE:0.5:1:28800 RRA:AVERAGE:0.5:10:2880 RRA:MAX:0.5:10:2880 RRA:LAST:0.5:10:2880
注释:DS:数据来源:DST类型为COUNTER:延迟5秒内收到数据有效:最小值:最大值
RRA:合并数据类型:(平均值。最大值,最小值):0.5表示unknow。失效大于0.5的概率的话不生成数据:1(表示一个PDP单元汇总。5表示5个PDP单元汇总平均):28800这里表示一天算法举例(一天86400s/3/1 第二个值:86400/3*10)
然后当前目录下就生成了:mysql.rrd文件:
wKioL1SCtzHhB0gbAABurWOTUNY386.jpg
2、定义收集数据:

(1)定义一个手机Mysql数据并发量的脚步(死循环):

wKioL1SCt7PC5eYjAADP5FD9bgU710.jpg 中间的命令:
SELECT=`mysql --batch -e "show global status like 'Com_select' "| awk '/Com_select/{print $2}'`
这里命令是在shell模式下。查看Mysql并发量(数据库密码为空):
第二:rrdtool update mysql.rrd N:$SELECT (更新mysql.rrd数据库,N表示当前时间。$SELECT获取并发个数)
(2)这里为了数据更明显的现实,在写一条死循环脚步。往中间不断的插入数据(前面已经创建好了数据库testdb和表tb1。tb1定义两个字段分别为ID和NAME。ID 字段注意制定自动增长):
[iyunv@node1 ~] # vim insert.sh
#!/bin/bash
#
for I in {1..200000}; do
     mysql -e "INSERT INTO testdb.tb1(name) VALUES ('stu$I')"
     mysql -e "SELECT * FROM testdb.tb1" &> /dev/null
done
注释:脚步不断的里面插入数据,和查询,这样并发就高了。
(3)分别执行脚本: bash -x getselect.sh  和bash -x insert.sh (观察是否有报错,有的话检查脚本,脚本运行不能中断,分别开三个窗口执行。到这一步数据的更新已经完成了,接下来就是绘制图形了:
3、绘制图形:
rrdtool fetch -r 3 mysql.rrd AVERAGE  #查看是否手机到数据:
wKiom1SCutHQJg4gAAE8AZ3O9-Q371.jpg :
可以看到已经收集到了数据: -nan表示没有数据:有数值的表示收到了数据:
接下来就可以绘制图形:我们就从有数据的时间开始收集数据。比如:1417853451
开始绘图:
[iyunv@localhost rrd]# rrdtool graph mysql1.png -s 1417853451  -t "mysql select" -v "selects/3" DEF:select3=mysql.rrd:mysqlselect:AVERAGE:step=3 LINE1:select3#FF0000:"select"
497x174
[iyunv@localhost rrd]#
注释:-s表示绘制开始时间。默认是10s之前.也可以-N指定当前时间。 -t 表示图片的抬头: -v 表示X轴的名称: DEF(绘制图形的方法):select3变量=mysql.rrd:mysqlselect:AVERAGE(绘制类型也可以表示MAX和LAST当前值):step=3(解析度,表示每3s手机汇总图像) LINE1(制定图像绘制类型):select3#ff0000(线条颜色)
可以看到当前目录下面生成了。myslq1.png的图片。把图片拉到windows电脑上,现实如下所示:
wKioL1SCvbWS9ieVAAEAdEkPuc8739.jpg
出图已经完成,要是定期手机数据,可以用snmpd协议手机客户端的数据。然后生成,最后用一个简单的web静态网页生成图形;
1、生成库:
[iyunv@node1 ~] # rrdtool create nginx.rrd --step 3 DS:mysqlselect:COUNTER:5:0:U RRA:AVERAGE:0.5:1:28800 RRA:AVERAGE:0.5:10:2880 RRA:MAX:0.5:10:2880 RRA:LAST:0.5:10:2880
扩展:平时我们经常要绘制一些像nginx并发量连接的数据:我们可以这样写一条脚本:
2、#!/bin/bash
#
while true ; do
   EST=`netstat -anp | grep EST | grep php-fpm | wc -l`
   rrdtool update nginx.rrd N:$EST

3、绘制图形:
rrdtool graph nginx.png -s 1417853451  -t "nginx select" -v "selects/3" DEF:select3=nginx.rrd:mysqlselect:AVERAGE:step=3 LINE1:select3#FF0000:"select"
到这里监控并发量已经完成,这里我就不做测试结果,写这个遇到问题的朋友可以交流一下。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-37562-1-1.html 上篇帖子: redhat Linux 6.3 -64bit 创建并挂载scsi共享磁盘 下篇帖子: Linux程序包管理之RPM、YUM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表