您的位置:首页 > 编程语言 > Python开发

python笔记系列:Python与rrdtool的结合模块

2018-03-26 13:56 337 查看
Python与rrdtool的结合模块rrdtool(round robin database)模块, 环状数据库的存储格式easy_install python-rrdtoolpip install python-rrdtoolyum install rrdtool-python #需要rrdtool工具及其他类包支持,Centos推荐使用yum安装
create(创建rrd)update(更新rrd)graph(绘图)fetch(查询rrd)
create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CFxff:steps:rows] 方法 创建一个后缀为rrd的rrdtool数据库filename rrdtool数据库文件名,默认后缀rrd--start 第一条记录的起始时间,必须是timestamp格式--step 每隔多长时间就收到一个值,默认5分钟DS 定义数据源,用于存放脚本结果的变量DST 定义数据源类型RRA 指定数据如何存放CF 统计合并数据,支持AVERAGE MAX MIN LAST(最新值) update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...]...]方法,存储一个新值到rrdtool,updatev和update类似,区别是每次插入后会返回一个状态码,以便了解是否成功(update用0表示成功,-1表示失败) filename 目标rrd文件名-t ds-name[:da-name] 指定需要更新的DS名称N|timestamp 数据采集时间戳,N表示当前时间value[:value...] 更新的数据值,多个DS则多个值
graph filename ....... 方法,参数太多...filename 指定输出图像的文件名,默认PNG格式
fetch filename CF[--resolution|-r resolution] [--start|-s start] [--end|-e end]方法,根据指定的rrdtool数据库进行查询filename 指定查询的rrd文件名CF 包括AVERAGE\MAX\MIN\LAST,要求必须是建库时RRA中定义的类型,否则报错--start --end 指定查询记录的起止时间,默认可以省略
实践:实现网卡流量图表绘制先通过create创建一个rrd数据库,然后通过update实现数据写入,最后通过graph方法实现图表绘制,以及提供last、first、info、fetch方法的查询第一步 采用create创建rrd# -*- coding: utf-8 -*-#!/usr/bin/pythonimport rrdtoolimport time
cur_time=str(int(time.time()))rrd=rrdtool.create('Flow.rrd','--step','300','--start',cur_time, 'DS:eth0_in:COUNTER:600:0:U', 'DS:eth0_out:COUNTER:600:0:U', 'RRA:AVERAGE:0.5:1:600', 'RRA:AVERAGE:0.5:6:700', '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()
第二步 采用update更新rrd数据库# -*- coding: utf-8 -*-#!/usr/bin/pythonimport rrdtoolimport time,psutil total_input_traffic = psutil.net_io_counters()[1]total_output_traffic = psutil.net_io_counters()[0]starttime=int(time.time())update=rrdtool.updatev('/home/test/rrdtool/Flow.rrd','%s:%s:%s' % (str(starttime),str(total_input_traffic),str(total_output_traffic)))print update
将代码加入crontab,配置5分钟作为采集频率,crontab配置如下*/5 * * * * /usr/bin/python /home/test/rrdtool/update.py >dev/null 2>&1
第三步 采用graph绘制图表# -*- coding: utf-8 -*-#!/usr/bin/pythonimport rrdtoolimport time
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", "DEF:outoctets=Flow.rrd:eth0_out:AVERAGE", "CDEF:total=inoctets,outoctets,+", "LINE1:total#FF8833:Total traffic", "AREA:inoctets#00FF00:In traffic", "LINE1:outoctets#0000FF:Out traffic", "HRULE:6144#FF0000:Alarm value\\r", "CDEF:inbits=inoctets,8,*", "CDEF:outbits=outoctets,8,*", "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")
rrdtool提供的几个常用命令rrdtool info Flow.rrdrrdtool first Flow.rrdrrdtool last Flow.rrdrrdtool fetch Flow.rrd AVERAGE
Python与rrdtool的结合模块rrdtool(round robin database)模块, 环状数据库的存储格式easy_install python-rrdtoolpip install python-rrdtoolyum install rrdtool-python #需要rrdtool工具及其他类包支持,Centos推荐使用yum安装
create(创建rrd)update(更新rrd)graph(绘图)fetch(查询rrd)
create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CFxff:steps:rows] 方法 创建一个后缀为rrd的rrdtool数据库filename rrdtool数据库文件名,默认后缀rrd--start 第一条记录的起始时间,必须是timestamp格式--step 每隔多长时间就收到一个值,默认5分钟DS 定义数据源,用于存放脚本结果的变量DST 定义数据源类型RRA 指定数据如何存放CF 统计合并数据,支持AVERAGE MAX MIN LAST(最新值) update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...]...]方法,存储一个新值到rrdtool,updatev和update类似,区别是每次插入后会返回一个状态码,以便了解是否成功(update用0表示成功,-1表示失败) filename 目标rrd文件名-t ds-name[:da-name] 指定需要更新的DS名称N|timestamp 数据采集时间戳,N表示当前时间value[:value...] 更新的数据值,多个DS则多个值
graph filename ....... 方法,参数太多...filename 指定输出图像的文件名,默认PNG格式
fetch filename CF[--resolution|-r resolution] [--start|-s start] [--end|-e end]方法,根据指定的rrdtool数据库进行查询filename 指定查询的rrd文件名CF 包括AVERAGE\MAX\MIN\LAST,要求必须是建库时RRA中定义的类型,否则报错--start --end 指定查询记录的起止时间,默认可以省略
实践:实现网卡流量图表绘制先通过create创建一个rrd数据库,然后通过update实现数据写入,最后通过graph方法实现图表绘制,以及提供last、first、info、fetch方法的查询第一步 采用create创建rrd# -*- coding: utf-8 -*-#!/usr/bin/pythonimport rrdtoolimport time
cur_time=str(int(time.time()))rrd=rrdtool.create('Flow.rrd','--step','300','--start',cur_time, 'DS:eth0_in:COUNTER:600:0:U', 'DS:eth0_out:COUNTER:600:0:U', 'RRA:AVERAGE:0.5:1:600', 'RRA:AVERAGE:0.5:6:700', '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()
第二步 采用update更新rrd数据库# -*- coding: utf-8 -*-#!/usr/bin/pythonimport rrdtoolimport time,psutil total_input_traffic = psutil.net_io_counters()[1]total_output_traffic = psutil.net_io_counters()[0]starttime=int(time.time())update=rrdtool.updatev('/home/test/rrdtool/Flow.rrd','%s:%s:%s' % (str(starttime),str(total_input_traffic),str(total_output_traffic)))print update
将代码加入crontab,配置5分钟作为采集频率,crontab配置如下*/5 * * * * /usr/bin/python /home/test/rrdtool/update.py >dev/null 2>&1
第三步 采用graph绘制图表# -*- coding: utf-8 -*-#!/usr/bin/pythonimport rrdtoolimport time
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", "DEF:outoctets=Flow.rrd:eth0_out:AVERAGE", "CDEF:total=inoctets,outoctets,+", "LINE1:total#FF8833:Total traffic", "AREA:inoctets#00FF00:In traffic", "LINE1:outoctets#0000FF:Out traffic", "HRULE:6144#FF0000:Alarm value\\r", "CDEF:inbits=inoctets,8,*", "CDEF:outbits=outoctets,8,*", "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")
rrdtool提供的几个常用命令rrdtool info Flow.rrdrrdtool first Flow.rrdrrdtool last Flow.rrdrrdtool fetch Flow.rrd AVERAGE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python rrdtool