`
hongtoushizi
  • 浏览: 374747 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

rrdtool的使用介绍

阅读更多

rrdtool的使用介绍

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的特点
  1. 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得RRDtool看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。
  2. RRDtool 的每个 rrd 文件的大小是固定的,而普通的数据库文件的大小是随着时间而增加的。
  3. 其他数据库只是被动的接受数据, RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of change),并存储该结果。
  4. RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN (unknow)代替,其他数据库则不会这样。
  • 安装
  1. 如果是linux,请先安装librrd-dev包,命令apt-get install librrd-dev
  2. 如果是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数据库

参数详解:

  1. filename:创建的rrdtool数据库文件名,默认后缀为.rrd
  2. --start 表示第一条记录的开始时间,必须是timestamp的格式
  3. --step 表示数据写频率,单位是秒。默认是5分钟
  4. DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。格式:DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max
  5. DST 就是DS的类型。有 COUNTER(递增类型)、GUAGE(收到值直接存入RRA)、DERIVE(可递增可递减类型)、ABSOLUTE(假定前一个时间间隔的值为0,在计算平局值)、COMPUTE(定义一个表达式,引用DS并自动计算出某个值) 5种
  6. RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果,为CF做数据合合并提供依据。RRA的作用就是定义更新的数据是如何记录的。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288条。这么庞大的数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。格式:RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows。
  7. PDP:Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义
  8. 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 允许存放的最小值,此例允许最小为0max 允许存放的最大值,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表示失败)

参数说明

  1. filename是指定存储数据到的目标rrd文件名。比如上面实例的Flow.rrd
  2. -t ds-name 指定需要更新的DS名称。比如上面的eth0_in
  3. 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 os

total_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_DIR

update=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详解

    以上内容从MRTG的局限性出发,引出了RRDTool的强大功能及其相对于MRTG的优势,接着详细介绍了RRDTool的特点,并简要说明了如何在CentOS系统中安装RRDTool。希望这些信息能够帮助读者更好地理解和掌握RRDTool的相关...

    rrdtool-1.2.15-cygwin-1.5.20.zip

    本篇将详细介绍rrdtool 1.2.15版本在Cygwin 1.5.20环境下的应用,以及如何利用其功能进行数据管理和可视化。 Cygwin是一款在Windows操作系统上模拟Linux环境的软件,它提供了一个类似于Linux的命令行界面和许多开源...

    rrdtool-1.2.29.tar.gz

    本文将详细介绍rrdtool-1.2.29.tar.gz的使用,以及如何结合Cacti来实现网络监控。 RRDTool是由Tobias Oetiker开发的一款开源数据库系统,专门用于存储时间序列数据,如网络流量、系统性能指标等。1.2.29版本是一个...

    rrdtool工具包

    本文将详细介绍RRDTool及其与Cacti的关系,以及如何在Cacti中使用RRDTool。 **RRDTool简介** RRDTool的主要功能是创建和维护一种特殊类型的数据库,称为"圆环形数据库"(Round Robin Database),这种数据库能够...

    rrdtool--ganglia 监控附属插件

    1. **RRDTool介绍**:RRDTool是由Tobias Oetiker创建的,它是一个用于存储、更新和图形化时间序列数据的工具,特别适合于长期趋势分析。RRDTool采用预定义的数据库结构,以圆形robin的方式存储数据,有效减少了存储...

    rrdtool的安装

    本文档将详细介绍如何在CentOS 5.4 64位系统上安装RRDTool,并记录安装过程中遇到的问题及解决方案。 #### 二、准备工作 在开始安装前,请确保系统已经安装了必要的基础软件包。通常情况下,CentOS 5.4 64位系统...

    rrdtool2.tar.gz

    本文将详细介绍从源码编译安装RRDTool的过程中,所涉及的依赖包及其重要性,以及如何进行安装操作。 首先,我们关注的"rrdtool2.tar.gz"是一个压缩包,包含了RRDTool的源代码和其他可能的辅助文件。解压这个压缩包...

    p5-Alien-RRDtool:安装RRDs.pm(用于RRDtool的Perl绑定)

    本文档介绍了Alien :: RRDtool版本0.06。 概要 use RRDs; # see RRDtool documentation 描述 此发行版在perls上安装RRDs.pm。 RRDtool软件包会将RRDs.pm安装到系统perl,但是在某些情况下,我们需要将其安装到我们...

    RRDtool 开源高性能数据库 v1.7.2官方版

    为您提供RRDtool 开源高性能数据库下载,RRDtool全称Round Robin Database Tool,是一款用来处理定量...软件介绍 RRDtool 代表 “Round Robin Database tool” ,作者同时也是 MRTG 软件的发明人。 所谓的“Round Ro

    yangcvo#Linux#RRDTOOL编译安装一步一步解决多多依赖关系1

    介绍RRDTOOL 是一个基于时间片的日志和绘图工具,有了她你可以轻松的绘制各种基于时间的可视化数据,用于做统计和监控非常合适。著名的开源监控软件Ganglia

    cacti+nagios完美部署

    本文将详细介绍 Cacti 和 Nagios 的完美部署,包括 Cacti 和 RRDTool 的安装部署、Cacti 的架构图、Cacti 的工作原理图、Cacti 的优点和缺点等。 一、Cacti 和 RRDTool 的安装部署 Cacti 是一个基于 PHP 的网络...

    基于 Cacti 搭建运维监控系统.pdf

    Cacti 通过 SNMP 获取数据,然后使用 RRDTool 绘制监控数据图形。在 Cacti 监控体系中,将业务数据和系统数据分开存放。业务数据存放在 RRDTool 的数据文件中,系统数据存放在 MySQL/Mariadb 数据库中。 四、实验...

    RRD与JRobin

    "JRobin简介.html"和"基于JRobin的CPU使用率监控.html"、"基于JRobin的网络监控管理.html"深入介绍了JRobin的使用方法,包括如何监控CPU使用率和网络状态。JRobin的文件结构和工作原理在"JRobin简介_files"中有所...

    Cacti安装与功能介绍手册.pdf

    Cacti通过SNMP协议收集数据,使用RRDTool来处理和存储这些数据,并将收集到的数据绘制成图表。用户无需了解RRDTool的复杂参数,因为SNMP负责数据的收集,RRDTool则负责数据的存储和图形生成。Cacti还提供了强大的...

    Cacti安装与功能介绍手册文件.pdf

    【Cacti安装与功能介绍】 Cacti是一款基于PHP、MySQL、SNMP以及RRDTool的网络流量监控和图形分析工具。它的工作原理是通过SNMP协议收集网络设备的数据,然后利用RRDTool来存储和生成图表。Cacti的优势在于其用户...

    Cacti搭配Nagios攻略

    【Cacti搭配Nagios攻略】是一篇详细介绍如何在Linux环境下使用Cacti和Nagios进行网络监控的文章。Cacti是一款基于Web的网络监控工具,利用SNMP协议获取数据,通过RRDTool进行数据存储和图表绘制。而Nagios则是一款...

Global site tag (gtag.js) - Google Analytics