rrdtool学习和自定义脚本绘制图形备忘

RRDtool (Round Robin Database Tool)就是一个强大的绘图的引擎,很多工具例如MRTG都可以调用rrdtool绘图。包括现在使用很多的cacti也是基于rrdtool的基础上画图的,可以说cacti只是提供一个显示图形的web页面。

rrdtool:所谓的round robin指的就是一种环形数据库:数据的存储方式是一个圆环形式存储的,我们可以自己去定义,数据能够存放多久,给它多大的空间。当我们的空间填满之后,后面的数据又可以覆盖前面的数据。所以rrdtool数据库是不会增大的。(但是我们也要明白一个道理。既然数据填满之后会覆盖,那么我们多给它定义就好了):建立数据库一般名称我们都定义为 .rrd的后缀文件。(如下图所示:)

主要理解的概念:用一张图说明:

  • 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、定义数据库:

[[email protected] ~] # 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文件:

2、定义收集数据:

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

中间的命令:

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 字段注意制定自动增长):

[[email protected] ~] # 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  #查看是否手机到数据:

:

可以看到已经收集到了数据: -nan表示没有数据:有数值的表示收到了数据:

接下来就可以绘制图形:我们就从有数据的时间开始收集数据。比如:1417853451

开始绘图:

[[email protected] 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

[[email protected] rrd]#

注释:-s表示绘制开始时间。默认是10s之前.也可以-N指定当前时间。 -t 表示图片的抬头: -v 表示X轴的名称: DEF(绘制图形的方法):select3变量=mysql.rrd:mysqlselect:AVERAGE(绘制类型也可以表示MAX和LAST当前值):step=3(解析度,表示每3s手机汇总图像) LINE1(制定图像绘制类型):select3#ff0000(线条颜色)

可以看到当前目录下面生成了。myslq1.png的图片。把图片拉到windows电脑上,现实如下所示:

出图已经完成,要是定期手机数据,可以用snmpd协议手机客户端的数据。然后生成,最后用一个简单的web静态网页生成图形;

1、生成库:

[[email protected] ~] # 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"

到这里监控并发量已经完成,这里我就不做测试结果,写这个遇到问题的朋友可以交流一下。

时间: 2024-10-11 17:36:46

rrdtool学习和自定义脚本绘制图形备忘的相关文章

HTML5学习笔记-使用canvas绘制图形

canvas标签是一个矩形区域,它包含两个属性,width和height,默认为300px和150px. 常用形式如下: <canvas id="mycanvas" width="400" height="200" style="border:1px solid #color;"> ...提示信息 </canvas> 也可写成形式如: <canvas id="canvas" w

cacti自定义脚本和图形模板

cacti自带的模板,很多时候都无法满足我们的监控需求,这时候就要求我们会自定义监控,来满足实际的监控需求,以下只是一个简单的案例,大家可学习其中的过程即可. 写一个脚本,用来实现监控无线AP的客户端连接数量. 脚本的位置放在<path_cacti>/scripts/collect_ap1600_clients.sh 注意,脚本的输出格式:clients:xxxx 添加数据输入方法 3.添加数据模板 4.添加图形模板 5.主机添加该数据源 6.主机添加图形模板 7.效果展示

HTML5 Canvas 学习笔记(canvas绘制线条、矩形、多边形、圆形、圆环、组合图形、文字、自定义图像)

学习资源:http://www.w3school.com.cn/html5/html_5_canvas.asp   http://blog.csdn.net/clh604/article/details/8536059   http://www.jb51.net/html5/70307.html 一.对 canvas 的理解 <canvas>标签是 HTML5 中的新标签,像所有的 dom 对象一样它有自己本身的属性.方法和事件. canvas 是用来在网页上绘制图形的(我们通常称之为画布),

OpenGl学习进程(8)第六课:点、边和图形(三)绘制图形

本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识:     (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”.通过点.直线和多边形,就可以组合成各种几何图形.一段弧可以看成是是很多短的直线段相连,这些直线段足够短,以至于其长度小于一个像素的宽度.通过位于不同平面的相连的小多边形,还可以组成一个“曲面”. 什么是凸边形: 凸边形:多边形内任意两点所确定的线段都在多边形内,由此也可以推导出,凸多边形不能是空心的

SQL Server -- 自定义函数(学习总结,备忘)

SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@[email protected])Y Learn from:http://www.cnblogs.com/lideng/archive/2013/04/15/3022418.html 自定义函数分为:标量值函数或表值函数两种. 标量值函数:如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 表值函数:如果 RETURNS 子句指定 TABLE,则函

[Canvas学习]绘制图形

学习目的:在Canvas上绘制矩形,三角形,直线,圆弧,曲线 栅格 栅格canvas grid,canvas元素默认被网格覆盖,栅格的起点是左上角坐标(0,0),元素的位置都是相对于栅格起点来定位的. 绘制矩形 API提供了三种方法绘制矩形 fillRect(x, y, width, height) 绘制填充的矩形 strokeRect(x, y, width, height) 绘制矩形边框 clearRect(x, y, width, height) 清除指定矩形区域变的完全透明 rect(x

OpenGL学习进程(4)第二课:绘制图形

本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) { // clear all pixels glClear(GL_COLOR_BUFFER_BIT); // draw yellow polygon (rectangle) with corners at glColor3f(1.0, 1.0, 0.0); glBegin(GL_POLYGON); //绘制开

Android学习绘制图形

Android的绘图继承于View组件,重写onDraw(Canvas canvas) 方法时涉及一个绘图API: Canvas 代表了依附于指定View的画布,并且提供了很多绘制方法. Canvas提供的方法还涉及一个API: Paint ,Paint代表了Canvas上的画笔,主要用于设置绘制风格,画笔颜色,粗细,填充风格等. Path代表任意多条直线连接而成的任意图形,当Canvas根据Path绘制图形时,它可以绘制出任意形状的图形. ? 1 2 3 4 5 6 7 8 9 10 11 1

利用canvas绘制图形

绘制图有很多种方法,可以借助flash实现,也可以使用SVG和VML来绘图.本章将要学习一种新的绘图方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形,也可以实现动画.它方便了使用Javascript脚本的前端开发人员,寥寥的竖行代码,就可以在Canvas元素中实现各种图形及动画.本章将介绍如何使用Canvas元素来绘制一些简单的图形.本章主要知识点如下:·认识Canvas元素·使用Canvas绘图·Canvas与JavaScript之间的互动·利