Python下rrdtool模塊的基本使用方法
最近需要用python根據(jù)收集到的數(shù)據(jù)進(jìn)行繪圖,決定使用rrd數(shù)據(jù)庫(kù),然后配合rrdtool來(lái)繪圖,故學(xué)習(xí)一下rrdtool的用法。
用法如下:
創(chuàng)建:
create(...)
create(args..): Set up a new Round Robin Database
create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CF:xff:steps:rows]
filename:是rrd的文件名,可以以rrd結(jié)尾。
--step:rrdtool期望每隔多長(zhǎng)事件收到一個(gè)值,默認(rèn)是5分鐘。
--start:rrdtool第一個(gè)記錄的起始時(shí)間,rrdtool不會(huì)接收任何數(shù)據(jù)的時(shí)間小于起始時(shí)間。例如你在update時(shí)給出的時(shí)間小于起始時(shí)間,則rrdtool會(huì)拒絕該值
DS:DS用于定義數(shù)據(jù)源,是用來(lái)存放結(jié)果的變量名。該變量名在畫(huà)圖時(shí)會(huì)用到。
DST:用來(lái)設(shè)置數(shù)據(jù)源的類(lèi)型,有COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE等5種類(lèi)型。
COUNTER:數(shù)值必須是遞增的
DERIVE:和COUNTER類(lèi)似,不過(guò)數(shù)據(jù)可遞增可遞減
ABSOLUTE:他每次假定前一個(gè)時(shí)間間隔的值是0,然后計(jì)算平均值
GAUGE:不做任何變化,直接存入rra中
COMPUTE:他不接收具體值,而是定義一個(gè)表達(dá)式,然后算出某個(gè)值
heartbeat:
min:
max:
RRA:rra指定數(shù)據(jù)如何存放,他可以保存不同時(shí)間間隔的數(shù)據(jù)。力圖每5分鐘產(chǎn)生一條數(shù)據(jù),這樣一小時(shí)就是12條,如果每30分鐘一條數(shù)據(jù),這樣一小時(shí)就是兩條數(shù)據(jù),這樣一天,一年下來(lái)會(huì)有很多條數(shù)據(jù),但是rrd數(shù)據(jù)庫(kù)的大小是固定的,所以就有一個(gè)合并數(shù)據(jù)的方式了。這就是rra的功能。合并方式由CF指定。
CF:CF就是用來(lái)設(shè)置數(shù)據(jù)合并的功能,有AVERAGE、MAX、MIN、LAST等4種類(lèi)型,分別表示對(duì)PDP取平均、最大、最小、當(dāng)前值。
xff:xff字段設(shè)置一個(gè)比例值,rrdtool會(huì)把多個(gè)PDP合并為一個(gè)CDP,如果這寫(xiě)PDP中有值為UNKNOW的PDP,那么CDP的值該怎么計(jì)算,xff就是設(shè)置一個(gè)比例,當(dāng)PDP中UNKNOW的比例超過(guò)多少是,就無(wú)法合成正常的CPD,合成的CPD值也為UNKNOW。
steps:表示多少個(gè)PDP合成一個(gè)CDP
rows:表示總共存多少個(gè)CDP?也就是可以保存多少數(shù)據(jù)?
PDP:在每個(gè)規(guī)定的時(shí)間間隔內(nèi)rrdtool都會(huì)收到一個(gè)值,rrdtool在收到該值后,根據(jù)DST的設(shè)置,會(huì)計(jì)算出另一個(gè)值,這個(gè)值就是PDP。
CDP:rrdtool使用多個(gè)PDP合并出一個(gè)CDP,也就是執(zhí)行CF的后果,然后把這個(gè)CDP的值存入rra中。
查看第一次/最后一次數(shù)據(jù)更新時(shí)間:
first(...)
first(filename): Return the timestamp of the first data sample in an RRD
last(...)
last(filename): Return the timestamp of the last data sample in an RRD
查看rrd結(jié)構(gòu)信息:
info(...)
info(filename): extract header information from an rrd
取出rrd的值:
fetch(...)
fetch(args..): fetch data from an rrd.
fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]
filename:要取出數(shù)據(jù)的rrd文件
--start:可選,默認(rèn)是end-1day
--end:可選,默認(rèn)是now
CF:AVERAGE、MAX、MIN、LAST。前提是你的rrd中有該類(lèi)型的rra才可以。
更新rrd數(shù)據(jù):
update(...)
update(args..): Store a new set of values into the rrd
update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...] ...]
filename:要更新的rrd文件
--template:
-t ds-name[:ds-name]:設(shè)置更新那個(gè)DS的數(shù)據(jù)
N|timestamp:時(shí)間戳,表示數(shù)據(jù)在哪個(gè)時(shí)間點(diǎn)采集的,N表示now。
value[:value...]:一個(gè)rrd文件可以有多個(gè)DS,所以一次update可以更新多個(gè)value。
update插入值后,并不會(huì)有返回,無(wú)法知道插入是否正常,可以用updatev
帶返回值的插入:
updatev(...)
updatev is called in the same manner as update
和update類(lèi)似,不過(guò)每次插入后會(huì)返回一個(gè)狀態(tài)碼。
畫(huà)圖:
graph(...)
graph(args..): Create a graph based on data from one or several RRD
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]]]
filename:圖片的名稱(chēng),默認(rèn)是PNG格式
--start:圖片X軸數(shù)據(jù)的起始時(shí)間
--end:圖片X軸數(shù)據(jù)的結(jié)束時(shí)間
--x-grid x-axis grid and label:
--y-grid y-axis grid and label:
--alt-y-grid
--alt-y-mrtg
--alt-autoscale
--alt-autoscale-max
--units-exponent
--vertical-label text Y軸的文字說(shuō)明
--width pixels X軸的大小
--height pixels Y軸的大小
--interlaced
--imginfo formatstring
--imgformat GIF|PNG|GD 圖片格式
--background value
--overlay value
--unit value
--lazy
--logarithmic
--upper-limit value Y軸數(shù)據(jù)值的上限,默認(rèn)會(huì)自動(dòng)調(diào)整Y軸的數(shù)字
--lower-limit value Y軸數(shù)據(jù)值的下限
--no-legend 取消圖表下方的圖例
--rigid 嚴(yán)格按照upper-limit/lower-limit來(lái)繪制
--step value
--base value 默認(rèn)1K=1000 可以調(diào)整1K=1024
--color COLORTAG#rrggbb
--title title 圖表上方的標(biāo)題
DEF:vname=rrd:ds-name:CF 定義繪圖用的數(shù)據(jù)源,也就是從那個(gè)RRD中取數(shù)據(jù),因?yàn)镽RA有多種類(lèi)型,所以需要指定CF
CDEF:vname=rpn-expression 定義合并值,
PRINT:vname:CF:format
GPRINT:vname:CF:format 在圖表的下方輸出最大值、最小值之類(lèi)
COMMENT:text 用來(lái)輸出一些字符串
HRULE:value#rrggbb 在圖表上繪制水平線
VRULE:time#rrggbb 在圖表上繪制垂直線
LINE{1|2|3}:vname 使用線條來(lái)繪制vname的數(shù)據(jù)圖
AREA:vname 使用方塊來(lái)繪制vname的數(shù)據(jù)圖
STACK:vname
下面附上一個(gè)例子:
###創(chuàng)建rrd #!/usr/bin/python import rrdtool rrdb=rrdtool.create('rest.rrd','--step','60','--start','1369982786', 'DS:input:GAUGE:120:U:U', 'DS:output:GAUGE:120:U:U', 'RRA:LAST:0.5:1:600', 'RRA:AVERAGE:0.5:5:600', 'RRA:MAX:0.5:5:600', 'RRA:MIN:0.5:5:600') if rrdb: print rrdtool.error() ###rrd插入數(shù)據(jù) #!/usr/bin/python import time import psutil import rrdtool for keys in psutil.network_io_counters(pernic=True): if keys == 'em1': sent=psutil.network_io_counters(pernic=True)[keys][0] recv=psutil.network_io_counters(pernic=True)[keys][1] up=rrdtool.updatev('rest.rrd','N:%d:%d' % (sent,recv)) print up ###根據(jù)rrd繪圖 #!/usr/bin/python import rrdtool rrdtool.graph('rest.png','--start','1369983960', '--title','my rrd graph test', '--vertical-label','bits', 'DEF:input=rest.rrd:input:LAST', 'DEF:output=rest.rrd:output:LAST', 'LINE1:input#0000FF:In traffic', 'LINE1:output#00FF00:Out traffic\\r', 'CDEF:bytes_in=input,8,*', 'CDEF:bytes_out=output,8,*', 'COMMENT:\\n', 'GPRINT:bytes_in:LAST:LAST in traffic\: %6.2lf %Sbps', 'COMMENT: ', 'GPRINT:bytes_out:LAST:LAST out traffic\: %6.2lf %Sbps')
相關(guān)文章
Anaconda多環(huán)境多版本python配置操作方法
下面小編就為大家?guī)?lái)一篇Anaconda多環(huán)境多版本python配置操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09python基于pdfminer庫(kù)提取pdf文字代碼實(shí)例
這篇文章主要介紹了python 提取pdf文字代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08使用Python Fast API發(fā)布API服務(wù)的過(guò)程詳解
這篇文章主要介紹了使用Python Fast API發(fā)布API服務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Python數(shù)據(jù)結(jié)構(gòu)dict常用操作代碼實(shí)例
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)dict常用操作代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Python的內(nèi)建模塊itertools的使用解析
這篇文章主要介紹了Python的內(nèi)建模塊itertools的使用解析,itertools是python的迭代器模塊,itertools提供的工具相當(dāng)高效且節(jié)省內(nèi)存,Python的內(nèi)建模塊itertools提供了非常有用的用于操作迭代對(duì)象的函數(shù),需要的朋友可以參考下2023-09-09Python常用數(shù)據(jù)結(jié)構(gòu)和公共方法技巧總結(jié)
這篇文章主要介紹了Python常用數(shù)據(jù)結(jié)構(gòu)和公共方法技巧總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08jupyter?notebook內(nèi)核配置的圖文教程
Jupyter?Notebook是基于網(wǎng)頁(yè)的用于交互計(jì)算的應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于jupyter?notebook內(nèi)核配置的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02詳解python中的數(shù)據(jù)類(lèi)型和控制流
這篇文章主要介紹了詳解python中的數(shù)據(jù)類(lèi)型和控制流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08