rrdtool的使用介绍
rrdtool的使用介绍
位于分类 python
rrdtool的介绍
rrdtool (round robin database)工具为环状数据库的存储格式。round robin 是一种处理定量数据以及当前元素指针的技术。rrdtool主要用来跟踪对象的变化情况,生成这些变化的走势图,比如业务的访问流量,系统性能,磁盘利用率等趋势图,很多流行监控平台都使用到了rrdtool,比较有名的有cacti,ganglia,monitorix等。官网:http://oss.oetiker.ch/rrdtool/。本篇文章主要讲解python关于rrdtool的常用方法,包括create,fetch,graph,info,update等。
- rrdtool的特点
- 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得RRDtool看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。
- RRDtool 的每个 rrd 文件的大小是固定的,而普通的数据库文件的大小是随着时间而增加的。
- 其他数据库只是被动的接受数据, RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of change),并存储该结果。
- RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN (unknow)代替,其他数据库则不会这样。
- 安装
- 如果是linux,请先安装librrd-dev包,命令apt-get install librrd-dev
- 如果是mac,使用homebrew安装,sudo brew upadte,sudo brew install rrdtool 会提醒先让安装Caskroom/cask/xquartz,然后重新执行sudo brew install rrdtool。
然后可以通过easy_install python-rrdtool或这使用pip install python-rrdtool。
rrdtool模块常用方法说明
rrdtool模块常用的方法包括create(创建rrd),update(更新rrd),graph(绘图),fetch(查询rrd)。
- create
rrdtool create filename
[--start|-b start time]
[--step|-s step]
DS:ds-name:DST:dst arguments #最后获取的数据是PDP,更新数据时要考滤DS顺序(*把所有要更新的数据,按照DS定义的顺序用冒号格开*)
RRA:CF:cf arguments #最后获取的数据是CDP,绘图时使用的是这些数据
create是创建RRD数据库
参数详解:
- filename:创建的rrdtool数据库文件名,默认后缀为.rrd
- --start 表示第一条记录的开始时间,必须是timestamp的格式
- --step 表示数据写频率,单位是秒。默认是5分钟
- DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。格式:DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max
- DST 就是DS的类型。有 COUNTER(递增类型)、GUAGE(收到值直接存入RRA)、DERIVE(可递增可递减类型)、ABSOLUTE(假定前一个时间间隔的值为0,在计算平局值)、COMPUTE(定义一个表达式,引用DS并自动计算出某个值) 5种
- RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果,为CF做数据合合并提供依据。RRA的作用就是定义更新的数据是如何记录的。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288条。这么庞大的数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。格式:RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows。
- PDP:Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义
- CF:CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。
案例:
#获取当前时间戳,作为rrd的开始时间
cur_time=str(int(time.time()))
#数据写频率 --step 300秒,
rrd=rrdtool.create('Flow.rrd','--step','300','--start',cur_time,#DS表示这个为DS表达式:eth0_in 数据域命名:counter是递增模式:600是心跳值,如果600秒没有收到值,用UNKNOWN代替:min 允许存放的最小值,此例允许最小为0:max 允许存放的最大值,U即Unknown,表示不限制'DS:eth0_in:COUNTER:600:0:U','DS:eth0_out:COUNTER:600:0:U',# AVERAGE表示平均:xff定义为0.5,表示当一个cdp中的pdp值超过一半为unknown,则该cdp的值就被标识为unknown'RRA:AVERAGE:0.5:1:600',)
- update
用法:
rrdtool update filename [--template|-t ds-name[:dsname]...] N|timestamp:value[:value...]
update是存储一个新值到rrdtool数据库,updatev和update类似,区别是每次插入后会返回一个状态码,以便了解是否成功(updatev用0表示成功,-1表示失败)
参数说明
- filename是指定存储数据到的目标rrd文件名。比如上面实例的Flow.rrd
- -t ds-name 指定需要更新的DS名称。比如上面的eth0_in
- N|timetamp 表示数据采集的时间戳,N表示当前的时间戳,value表示更新的数据值,多个DS多个值
案例:
rrdtool update Flow.rrd N:60723022:102384
N表示当前时间,后面的值分别对应eth0_in 和 eth0_out的值。
- graph
用法:
rrdtool graph filename [option ...]
graph是根据指定的rrdtool数据库进行绘图,这个参数比较多,直接在命令行,敲出 rrdtool graph即可。
因为这个参考比较多,在后面的实例来说明。
- fetch
fetch查看rrd文件的数据
用法:
rrdtool fetch filename.rrd CF [-r|--resolution resolution] [-s|--start start] [-e|--end end][--daemon <address>]
实践:实现网卡流量图标绘制
- 创建rrd数据库
# -*- coding: utf-8 -*-
#!/usr/bin/python
import rrdtool
import time#获取当前时间戳,作为rrd的开始时间
cur_time=str(int(time.time()))
#数据写频率 --step 300秒,
#counter是递增模式rrd=rrdtool.create('Flow.rrd','--step','300','--start',cur_time,'DS:eth0_in:COUNTER:600:0:U',#600是心跳值,如果600秒没有收到值,用UNKNOWN代替'DS:eth0_out:COUNTER:600:0:U',#最大值用U代替,表示不确定'RRA:AVERAGE:0.5:1:600','RRA:AVERAGE:0.5:6:700',#xff定义为0.5,表示当一个cdp中的pdp值超过一般为unknown,则该cdp的值就被标识为unknown'RRA:AVERAGE:0.5:24:775','RRA:AVERAGE:0.5:288:797','RRA:MAX:0.5:1:600','RRA:MAX:0.5:6:700','RRA:MAX:0.5:24:775','RRA:MAX:0.5:444:797','RRA:MIN:0.5:1:600','RRA:MIN:0.5:6:700','RRA:MIN:0.5:24:775','RRA:MIN:0.5:444:797')
if rrd:print rrdtool.error()# AVERAGE:平均值 MAX:最大值 MIN:最小值 LAST:最新值。
#'RRA:AVERAGE:0.5:1:600' 每隔5分钟(1*300秒)存一次数据的平均值,存600笔,即2.0.8天
- 采用updatev方法更新rrd数据库。网卡流量通过psutil模块获取
# -*- coding: utf-8 -*-
#!/usr/bin/python
import rrdtool
import time,psutil
import ostotal_input_traffic = psutil.net_io_counters()[1]
total_output_traffic = psutil.net_io_counters()[0]
starttime=int(time.time())BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print BASE_DIRupdate=rrdtool.updatev(BASE_DIR+'/Flow.rrd','%s:%s:%s' % (str(starttime),str(total_input_traffic),str(total_output_traffic)))
print update
将代码加入crontab,并配置5分钟作为采集频率,使用crontab -e来添加
*/5 * * * * /usr/bin/python /Users/zhangxueyuan/Monitor/pyauto-master/3/rrdtool/update.py > /dev/null 2>&1
- 采用graph方法绘制图表
# -*- coding: utf-8 -*-
#!/usr/bin/python
import rrdtool
import time#定义图标上方大标题
#重点解释 "--x-grid"
#"MINUTE:12" 表示控制每隔12分钟,HOUR:1 表示控制每隔1小时放置一根主要格线,HOUR:1 表示控制1个小时输出一个label标签
#0:%H 0表示数字对齐格线,%H表示标签以小时显示
title="Server network traffic flow ("+time.strftime('%Y-%m-%d',time.localtime(time.time()))+")"
rrdtool.graph( "Flow.png", "--start", "-1d","--vertical-label=Bytes/s","--x-grid","MINUTE:12:HOUR:1:HOUR:1:0:%H",\"--width","650","--height","230","--title",title,"DEF:inoctets=Flow.rrd:eth0_in:AVERAGE",#指定网卡入流量数据源DS及CF"DEF:outoctets=Flow.rrd:eth0_out:AVERAGE",#指定网卡出流量数据源DS及CF"CDEF:total=inoctets,outoctets,+",#通过CDEF合并网卡出入流量,得出总流量total"LINE1:total#FF8833:Total traffic",#以线条方式绘制总流量"AREA:inoctets#00FF00:In traffic",#以面积风湿绘制入流量"LINE1:outoctets#0000FF:Out traffic",#以线条方式绘制出流量"HRULE:6144#FF0000:Alarm value\\r",#绘制水平线,作为警告线,阈值为6.1 K"CDEF:inbits=inoctets,8,*",#将入流量换算成bit,即*8,计算结果给inbits"CDEF:outbits=outoctets,8,*",#将出流量换算成bit,即*8,计算结果给outbits"COMMENT:\\r",#在网格下方输出一个换行符"COMMENT:\\r","GPRINT:inbits:AVERAGE:Avg In traffic\: %6.2lf %Sbps",#绘制入流量平均值"COMMENT: ","GPRINT:inbits:MAX:Max In traffic\: %6.2lf %Sbps",#绘制入流量最大值"COMMENT: ","GPRINT:inbits:MIN:MIN In traffic\: %6.2lf %Sbps\\r",#绘制入流量最小值"COMMENT: ","GPRINT:outbits:AVERAGE:Avg Out traffic\: %6.2lf %Sbps",#绘制出流量平均值"COMMENT: ","GPRINT:outbits:MAX:Max Out traffic\: %6.2lf %Sbps",#绘制出流量最大值"COMMENT: ","GPRINT:outbits:MIN:MIN Out traffic\: %6.2lf %Sbps\\r")#绘制出流量最小值
运行一段时间之后,执行上面的代码将生成一个Flow.png文件,如下图
参考 1:<<python自动化运维:技术与最佳实践技术>> 中的第3章 定制业务质量报表详解
参考 2 :http://freeloda.blog.51cto.com/2033581/1307492
转载自: http://qushouxichuan.com/blog/article/60
rrdtool的使用介绍相关推荐
- RRDTOOL 学习
http://junwang.blog.51cto.com/5050337/1430000 RRDtool深入学习 介绍 RRDtool:Round Robin Database Tool(轮询的数据 ...
- rrdtool 画图
步骤. 1.建库 rrdtool create /home/zzz/wwwroot/liu/tcpdump.rrd -s 60 -b '1060686480' DS:telnet:GAUGE:600: ...
- 使用Cacti监测系统与网络性能(3)
六.使用方法: 1.界面介绍 登陆Cacti后,可以看到左上角是两个按钮(如图6),"console"和"graphs".console表示控制台,在此进行所有 ...
- 烂泥:nagios学习(四):pnp4nagios图形化绘制nagios数据
本文首发于烂泥行天下 在nagios安装完毕后,我们也添加了一些监控对象,但是你会发现nagios只是简单的给我们列出那些监控对象是正常的,而没有把这些监控对象的数据进行整合.如下: 其实nagios ...
- java rrdtool_rrdtool安装和使用方法介绍,利用rrdtool 进行数据的收集绘图统计,网页显示...
rrdtool安装和使用方法介绍,利用rrdtool 进行数据的收集绘图统计,网页显示. RRDTOOL的绘图~ 所谓的"Round Robin" 其实是一种存储数据的方式,使用固 ...
- rrdtool的完整例子
RRDtool是一种环形数据库工具,我们可以将数据存入该数据库中,而不用担心数据太多,因为这个数据库是环形的,新的数据会覆盖最老的数据. 这与Windows上的taskman类似.RRDtool主要由 ...
- Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
基于的软件版本 Apache-2.0.63 php-5.3.2 nagios-3.2.3 nagios-plugins-1.4.15 rrdtool-1.4.5 nrpe-2.12 pnp4na ...
- 监控cacti中的RRDtool用法详解
RRDtool 作为一个合格的运维工程师,监控技能必须是要掌握的,当然监控的软件很多很多(cacti,nagios,zabbix...).而生产环境中一般只运用1.2种而已.所以全部掌握这些有点不靠谱 ...
- RRDTool学习资料备忘
RRDtool 简介 [color=blue] **************************************************************************** ...
最新文章
- python字符串中某个字符修改_Python中修改字符串的四种方法
- 文件编码和RandomAccessFile文件流的使用--IO学习笔记(一)
- 借百度爸爸下蛋的好看搜索框
- 上某些网站的时候要小心,不要以为 HTTPS 就安全了
- 计算机课制作海报教案,信息技术作品制作教案
- CentOS7.X安装部署Glassfish4.1.2
- suse下oracle静默安装,SUSE Linux Enterprise 11SP1静默安装Oracle 11gR2说明文档.doc
- 无线路由器经常掉线怎么办?
- 软件打开文件夹后闪退
- 自旋锁与适应性自旋锁
- 中国田联要求:刘翔和王军霞生个孩子!
- 再见 xxl-job!更强大的新一代分布式任务调度框架来了
- PHP仿易名网域名出售交易平台
- MacOS系统tomcat修改端口到80(端口转发)
- Pixel 4刷机常见问题指南(Android 11 211001版本可用!)
- 为什么要做巧推整站快速排名SEO优化?
- python组合无重复三位数
- 推荐几款好用的HTML编译器给大家!
- 微积分入门:无穷小之比与无穷小求和
- 基于STM32F407+RFID的模拟公交车刷卡收费系统小项目