神奇的环形数据库工具-rrdtool
admin
2023-07-10 17:44:03
0

一 前言

前段时间写多主机性能指标监控工具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命令格式:

rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments[RRA:CF:cf arguments]

Update命令格式:

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

Graph命令格式:

rrdtool graph|graphv filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]

针对各个参数的说明实在太多,不在此列出,建议直接看官方文档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} '
                             '--start now-1800s '
                             '--vertical-label "NET Utilization" '
                             '--units-exponent 0 '
                             '--alt-autoscale-max '
                             '--lower-limit 0 '
                             '--title "NET/TOTAL:recv/send(MB/s)" '
                             '--font TITLE:10: Roman.ttf --font AXIS:10: Roman.ttf –font UNIT:10: Roman.ttf --font LEGEND: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,可能会报字体文件缺失,注意下载默认的指定文件并指定。


相关内容

热门资讯

美伊谈判濒临破裂之际,伊朗议长... 因为以色列持续对黎巴嫩进行军事打击,伊朗宣布暂停同美国的谈判。不过美国总统特朗普称,对话仍在继续。谈...
罕见!以军政策发生“重大转变” 新华社北京6月1日电 题:罕见纵深推进,以军对黎行动会否搅动美伊谈判新华社记者刘品然 阚静文 席玥以...
山西太原发现一处新石器遗址,出... 山西省太原市文物保护研究院协同相关科研机构,近期在太原市阳曲县西盘威村发现一处新石器时代重要遗址——...
伊媒发布穆杰塔巴罕见照片 伊朗塔斯尼姆通讯社6月1日发布了一张最高领袖穆杰塔巴的照片。照片中,穆杰塔巴面露笑容,抱着一个婴儿。...
福建“泡药杨梅”曝光后,浙江杨... 这两天,浙江本地杨梅少量进入市场。虽然受到此前福建 “泡药杨梅” 事件影响,市场整体销量相比去年同期...
尺素金声 | 前4月规上工业企... 5月27日,国家统计局发布最新数据显示,今年前4月,全国规上工业企业实现利润同比增长18.2%,增速...
郑丽文:台湾民众越来越了解“台... 针对台湾《联合报》民调显示,63%受访者民意希望维持现状,即将访美的中国国民党主席郑丽文1日表示,民...
美前副总统:共和党失去了方向,... 2026年是美国的中期选举年,共和党选情不利,可能在年底的选举中遭遇挫败。美国前副总统彭斯5月31日...
南枝原来去过中国?《给阿嬷的情... 《给阿嬷的情书》票房口碑双丰收,目前票房已突破13亿。凤凰卫视最新一期《问答神州》专访了该片导演蓝鸿...
法国海军扣押一艘俄“影子舰队”... 近日,法国海军在大西洋海域扣押了一艘据称从俄罗斯摩尔曼斯克出发的油轮,引发俄方强烈不满。俄新社6月1...