神奇的环形数据库工具-rrdtool(python,res-monitor,rrdtool,编程语言)

时间:2024-05-09 12:36:56 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

一 前言

前段时间写多主机性能指标监控工具res-monitor时有提到它,这里就专门对它做个介绍吧。

像res-monitor这类工具,既要实时获取数据,又要实时图形化展示数据,常规的是把采集的数据存放到数据库,然后再读数据库数据画图展示,然而,当我遇到rrdtool的时候,眼前一亮,很特别,它一方面可以把数据存储起来,扮演数据库的角色;另一方面又能根据存储的数据绘图,而且图形表达能力很强,如线状图、饼状图、柱状图、区域面积图等;支持高性能的数据存储、绘图,很方便集成在各种脚本中。从github的修改记录来看,它从2012年发布至今,一直在维护和更新着,可见其生命力。

Rrdtool很强大,完成数据存储和实时展示绘图等工作,只需要掌握3个命令,但这三个命令的参数相当多,使用起来有点复杂,另外,需要注意的是,它主要应用在linux平台,在windows上只能用Cygwin打包版本的,而且有些,需要绕过去。

本文不打算详细介绍rrdtool的原理,因为这块可以看官方文档,主要是说明如何使用它,并给出一些应用参考。
Rrdtool网址: https://oss.oetiker.ch/rrdtool/index.en.html

什么是rrd数据库

Rrdtool是环形数据库工具,存储和读取的是环形数据库,表现是后缀为.rrd的二进制文件。要大概理解啥是环形数据库,我对它的理解就是把它想象成圆形的时钟,随着时间推移,不断往里写数据,同时有个标记指向当前数据记录的最新位置,就像时钟上的指针指示当前时间一样。又因为它是圆形的,无始无终,可以一直往里写数据,只是历史数据会被覆盖掉,所以,有时它又被叫做时序结构数据库。

rrdtool常用命令

以下仅列出rrdtool的三个常用命令create、update、graph,看到这些命令格式,大概你就感觉到这工具使用的复杂性了。
Create命令格式:

rrdtoolcreatefilename[--start|-bstarttime][--step|-sstep][--template|-ttemplate-file][--source|-rsource-file][--no-overwrite|-O][--daemon|-daddress][DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dstarguments][RRA:CF:cfarguments]

Update命令格式:

rrdtool{update|updatev}filename[--template|-tds-name[:ds-name]...][--skip-past-updates|-s][--daemon|-daddress][--]N:value[:value]...timestamp:value[:value]...at-timestamp@value[:value]...

Graph命令格式:

rrdtoolgraph|graphvfilename[option...][datadefinition...][datacalculation...][variabledefinition...][graphelement...][printelement...]

针对各个参数的说明实在太多,不在此列出,建议直接看官方文档https://oss.oetiker.ch/rrdtool/doc/rrdtool.en.html,该部分:

神奇的环形数据库工具-rrdtool

rrdtool应用——监控带宽使用情况实例

命令格式太复杂,但是,只要搞定上面三个命令,以后用起来就轻松了,直接套用格式就行,如下是res-monitor监控带宽使用的命令配置实例,应用在python代码里,仅供参考哦。
1) 使用create命令创建rrd数据库文件

rrdtool_create=('{bin_file}create{rrd_file}-s{interval}'
'DS:recvAvg:GAUGE:300:0:U'
'DS:sendAvg:GAUGE:300:0:U'
'RRA:AVERAGE:0.5:1:600')

命令说明:
Create命令创建rrd数据库,设置间隔为5s,定义里个数据源(DS),且数据源类型是保留原始值(GAUGE),数据接收的最大时间跨度是5分钟,否则设置U(unknown),指定按每个数据取平均值(AVERAGE)的方式归档存放数据;

2) 使用update命令更新rrd数据库

rrdtool_update='{bin_file}update{rrd_file}N:'

命令说明:
Update命令向rrd数据库写数据,注意N:后面的数据组数和create指定的数据源对应,上面create是2个数据源,update的数据也只能是2组。可以理解成多行2列的表,每列对应create指定的数据源,update就是一行行往里面填数据。

3) 使用graph命令读取rrd数据库并绘制

rrdtool_graph=('{bin_file}graph{rrd_graph}'
'--startnow-1800s'
'--vertical-label"NETUtilization"'
'--units-exponent0'
'--alt-autoscale-max'
'--lower-limit0'
'--title"NET/TOTAL:recv/send(MB/s)"'
'--fontTITLE:10:Roman.ttf--fontAXIS:10:Roman.ttf–fontUNIT:10:Roman.ttf--fontLEGEND:10:Roman.ttf'
'DEF:recvAvgFlow={rrd_relative_file}:recvAvg:AVERAGE'
'LINE1:recvAvgFlow#e60000:"recv(MB/s)"'
'GPRINT:recvAvgFlow:AVERAGE:"AVERAGE\:%3.1lf"'
'GPRINT:recvAvgFlow:MIN:"MIN\:%3.1lf"'
'GPRINT:recvAvgFlow:MAX:"MAX\:%3.1lf\\n"'
'DEF:sendAvgFlow={rrd_relative_file}:sendAvg:AVERAGE'
'LINE1:sendAvgFlow#32cd32:"send(MB/s)"'
'GPRINT:sendAvgFlow:AVERAGE:"AVERAGE\:%3.1lf"'
'GPRINT:sendAvgFlow:MIN:"MIN\:%3.1lf"'
'GPRINT:sendAvgFlow:MAX:"MAX\:%3.1lf\\n"'
)

命令说明:
Graph命令相当复杂,但表现里很强,上面参数指定图标显示的时间跨度,纵横坐标标题,图表是否自动缩放,线条颜色,每个线条对应从哪里取数据,且显示MIN\MAX\AVERAGE图例说明等等。

注意:
命令中的变量需要根据自己的实际情况替换,自己开发的程序里需要执行周期性的数据采集操作获得数据,然后使用update操作将数据写入rrdtool。按上述命令格式配置,最后的效果如下:

神奇的环形数据库工具-rrdtool

坑1:
Rrdtool主要被设计应用在linux平台的,命令参数的分割符就是“:”,但在windows平台,冒号是盘符标志,所以,实际应用中需要做转义或者传入相对路径;

坑2:
Windows使用Cygwin打包版本的rrdtool,可能会报字体文件缺失,注意下载默认的指定文件并指定。


 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:神奇的环形数据库工具-rrdtool的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Linux中如何使用xinit命令下一篇:

16 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18