运维自动化之报表模块rrdtool(上)

2022-04-26 00:00:00 数据 指定 模块 安装 图表

日常运维自然少不了报表,这近的这几篇中分别围绕着Python的业务质量报表定制模块和大家一起学习。

今天先和大家一起认识一下Python的rrdtool模块,主要有如下内容:

  • rrdtool简介

  • rrdtool安装

  • rrdtool常用方法




rrdtool简介

RRDtool是指RoundRobinDatabase工具(环状数据库)。Roundrobin是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环--这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头--这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直往下走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这有点类似与我们的钟表指针。这样,数据集不会增大,并且不需要维护。RRDtool用来处理RRD数据库。它用来向RRD数据库存储数据、从RRD数据库中提取数据。

RRDTool 是一套监测工具,可用于存储和展示被监测对象随时间的变化情况。我们在 Windows系统上的资源管理器,看到性能里面的CPU、内存状况的图标都属于此类。

rrdtool安装

我们着重要说的是应用于Python模块中的rrdtool模块。另外,这些演示安装都是在Ubuntu下进行的。大家可以安装Ubuntu虚拟机或者使用vagrant安装相关的box进行实验。安装环境可以参考我们公众号里面的相关文章。例如:《使用Vagrant搭建虚拟机开发环境》,《这里是Linux——简单上手Ubuntu》,《pyenv——Python多版本共存解决方案》等。

$ sudo apt install rrdtool librrd-dev python-dev (安装相关库)
$ python -V
Python 2.7.13
$ pip install rrdtool
$ pyenv global 3.6.2 (使用pyenv变更python的版本)
$ python -V
Python 3.6.2
$ pip install rrdtool

$ python 
Python 3.6.2 (default, Sep 11 2017, 06:46:43) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rrdtool
>>> (如果没有错误提示,说明安装rrdtool模块成功)
$ pyenv global 2.7.13
$ python
Python 2.7.13 (default, Sep 11 2017, 06:45:01) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import rrdtool
>>> (如果没有错误提示,说明安装rrdtool模块成功)

这里一定要注意python的版本,不同的python版本,需要使用pip安装不同的rrdtool模块,否则是要出现问题的。

rrdtool常用方法

rrdtool模块常用的方法有:

  • create(创建rrd)

  • update(更新rrd)

  • graph(绘图)

  • fetch(查询rrd)


  1. Create方法

    create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CF:xff:steps:rows]

    创建一个后缀为rrd的rrdtool数据库,参数说明:

  • filename创建的rrdtool数据库文件名,默认后缀为.rrd;

  • —start指定rrdtool条记录的起始时间,必须是timestamp的格式;

  • —step指定rrdtool每隔多长时间就收到一个值,默认为5分钟;

  • DS用于定义数据源,用于存放脚本的结果的变量;

  • DST用于定义数据源类型,rrdtool支持COUNTER(递增类型)、DERIVE(可递增可递减类型)、ABSOLUTE(假定前一个时间间隔的值为0,再计算平均值)、GUAGE(收到值后直接存入RRA)、COMPUTE(定义一个表达式,引用DS并自动计算出某个值)5种,比如网卡流量属于计数器型,应该选择COUNTER;

  • RRA用于指定数据如何存放,我们可以把一个RRA看成一个表,保存不同间隔的统计结果数据,为CF做数据合并提供依据,定义格式为:[RRA:CF:xff:steps:rows];

  • CF统计合并数据,支持AVERAGE(平均值)、MAX(大值)、MIN(小值)、LAST(新值)4种方式。

  • update方法

    update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...] ...]

    存储一个新值到rrdtool数据库,updatev和update类似,区别是每次插入后会返回一个状态码,以便了解是否成功(updatev用0表示成功,–1表示失败)。参数说明:

    • filename指定存储数据到的目标rrd文件名;

    • -t ds-name[:ds-name]指定需要更新的DS名称;

    • N|Timestamp表示数据采集的时间戳,N表示当前时间戳;

    • value[:value…]更新的数据值,多个DS则多个值。

  • graph方法

    graph filename [-s|--start seconds] [-e|--end seconds] [-x|--x-grid x-axis grid and label] [-y|--y-grid y-axis grid and label] [--alt-y-grid] [--alt-y-mrtg] [--alt-autoscale] [--alt-autoscale-max] [--units-exponent] value [-v|--vertical-label text] [-w|--width pixels] [-h|--height pixels] [-i|--interlaced] [-f|--imginfo formatstring] [-a|--imgformat GIF|PNG|GD] [-B|--background value] [-O|--overlay value] [-U|--unit value] [-z|--lazy] [-o|--logarithmic] [-u|--upper-limit value] [-l|--lower-limit value] [-g|--no-legend] [-r|--rigid] [--step value] [-b|--base value] [-c|--color COLORTAG#rrggbb] [-t|--title title] [DEF:vname=rrd:ds-name:CF] [CDEF:vname=rpn-expression] [PRINT:vname:CF:format] [GPRINT:vname:CF:format] [COMMENT:text] [HRULE:value#rrggbb[:legend]] [VRULE:time#rrggbb[:legend]] [LINE{1|2|3}:vname[#rrggbb [:legend]]] [AREA:vname[#rrggbb[:legend]]] [STACK:vname[#rrggbb[:legend]]]

    根据指定的rrdtool数据库进行绘图,参数说明:

    • filename指定输出图像的文件名,默认是PNG格式;

    • —start指定起始时间;

    • —end指定结束时间;

    • —x-grid控制X轴网格线刻度、标签的位置;

    • —y-grid控制Y轴网格线刻度、标签的位置;

    • —vertical-label指定Y轴的说明文字;

    • —width pixels指定图表宽度(像素);

    • —height pixels指定图表高度(像素);

    • —imgformat指定图像格式(GIF|PNG|GD);

    • —background指定图像背景颜色,支持#rrggbb表示法;

    • —upper-limit指定Y轴数据值上限;

    • —lower-limit指定Y轴数据值下限;

    • —no-legend取消图表下方的图例;

    • —rigid严格按照upper-limit与lower-limit来绘制;

    • —title图表顶部的标题;

    • DEF: vname=rrd: ds-name: CF指定绘图用到的数据源;

    • CDEF: vname=rpn-expression 合并多个值;

    • GPRINT: vname: CF: format 图表的下方输出大值、小值、平均值等;

    • COMMENT:text指定图表中输出的一些字符串;

    • HRULE:value#rrggbb用于在图表上面绘制水平线;

    • VRULE:time#rrggbb用于在图表上面绘制垂直线;

    • LINE{1|2|3}:vname使用线条来绘制数据图表,{1|2|3}表示线条的粗细;

    • AREA:vname使用面积图来绘制数据图表。

  • fetch方法

    fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]

    根据指定的rrdtool数据库进行查询,参数说明:

    • filename指定要查询的rrd文件名;

    • CF包括AVERAGE、MAX、MIN、LAST,要求必须是建库时RRA中定义的类型,否则会报错;

    • —start —end指定查询记录的开始与结束时间,默认可省略。

    来自:https://mp.weixin.qq.com/s/2Rc0I0PU4FCxM7frKxC4zA

    相关文章