国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python下rrdtool模塊的基本使用方法

2020-01-04 17:57:51
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了Python下rrdtool模塊的基本使用方法,經常被用來做數據可視化的相關功能,需要的朋友可以參考下

最近需要用python根據收集到的數據進行繪圖,決定使用rrd數據庫,然后配合rrdtool來繪圖,故學習一下rrdtool的用法。

用法如下:

創建:

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結尾。

--step:rrdtool期望每隔多長事件收到一個值,默認是5分鐘。

--start:rrdtool第一個記錄的起始時間,rrdtool不會接收任何數據的時間小于起始時間。例如你在update時給出的時間小于起始時間,則rrdtool會拒絕該值

DS:DS用于定義數據源,是用來存放結果的變量名。該變量名在畫圖時會用到。

DST:用來設置數據源的類型,有COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE等5種類型。

COUNTER:數值必須是遞增的

DERIVE:和COUNTER類似,不過數據可遞增可遞減

ABSOLUTE:他每次假定前一個時間間隔的值是0,然后計算平均值

GAUGE:不做任何變化,直接存入rra中

COMPUTE:他不接收具體值,而是定義一個表達式,然后算出某個值

heartbeat:

min:

max:

RRA:rra指定數據如何存放,他可以保存不同時間間隔的數據。力圖每5分鐘產生一條數據,這樣一小時就是12條,如果每30分鐘一條數據,這樣一小時就是兩條數據,這樣一天,一年下來會有很多條數據,但是rrd數據庫的大小是固定的,所以就有一個合并數據的方式了。這就是rra的功能。合并方式由CF指定。

CF:CF就是用來設置數據合并的功能,有AVERAGE、MAX、MIN、LAST等4種類型,分別表示對PDP取平均、最大、最小、當前值。

xff:xff字段設置一個比例值,rrdtool會把多個PDP合并為一個CDP,如果這寫PDP中有值為UNKNOW的PDP,那么CDP的值該怎么計算,xff就是設置一個比例,當PDP中UNKNOW的比例超過多少是,就無法合成正常的CPD,合成的CPD值也為UNKNOW。

steps:表示多少個PDP合成一個CDP

rows:表示總共存多少個CDP?也就是可以保存多少數據?

PDP:在每個規定的時間間隔內rrdtool都會收到一個值,rrdtool在收到該值后,根據DST的設置,會計算出另一個值,這個值就是PDP。

CDP:rrdtool使用多個PDP合并出一個CDP,也就是執行CF的后果,然后把這個CDP的值存入rra中。

查看第一次/最后一次數據更新時間:

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結構信息:

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:要取出數據的rrd文件

--start:可選,默認是end-1day

--end:可選,默認是now

CF:AVERAGE、MAX、MIN、LAST。前提是你的rrd中有該類型的rra才可以。

更新rrd數據:

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]:設置更新那個DS的數據

N|timestamp:時間戳,表示數據在哪個時間點采集的,N表示now。

value[:value...]:一個rrd文件可以有多個DS,所以一次update可以更新多個value。

update插入值后,并不會有返回,無法知道插入是否正常,可以用updatev

帶返回值的插入:

updatev(...)

updatev is called in the same manner as update

和update類似,不過每次插入后會返回一個狀態碼。

畫圖:

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:圖片的名稱,默認是PNG格式

--start:圖片X軸數據的起始時間

--end:圖片X軸數據的結束時間

--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軸的文字說明

--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軸數據值的上限,默認會自動調整Y軸的數字

--lower-limit value Y軸數據值的下限

--no-legend 取消圖表下方的圖例

--rigid 嚴格按照upper-limit/lower-limit來繪制

--step value

--base value 默認1K=1000 可以調整1K=1024

--color COLORTAG#rrggbb

--title title 圖表上方的標題

DEF:vname=rrd:ds-name:CF 定義繪圖用的數據源,也就是從那個RRD中取數據,因為RRA有多種類型,所以需要指定CF

CDEF:vname=rpn-expression 定義合并值,

PRINT:vname:CF:format

GPRINT:vname:CF:format 在圖表的下方輸出最大值、最小值之類

COMMENT:text 用來輸出一些字符串

HRULE:value#rrggbb 在圖表上繪制水平線

VRULE:time#rrggbb 在圖表上繪制垂直線

LINE{1|2|3}:vname 使用線條來繪制vname的數據圖

AREA:vname 使用方塊來繪制vname的數據圖

STACK:vname

下面附上一個例子:

 

 
  1. ###創建rrd 
  2. #!/usr/bin/python 
  3. import rrdtool 
  4.   
  5. rrdb=rrdtool.create('rest.rrd','--step','60','--start','1369982786'
  6.     'DS:input:GAUGE:120:U:U'
  7.     'DS:output:GAUGE:120:U:U'
  8.     'RRA:LAST:0.5:1:600'
  9.     'RRA:AVERAGE:0.5:5:600'
  10.     'RRA:MAX:0.5:5:600'
  11.     'RRA:MIN:0.5:5:600'
  12. if rrdb: 
  13.   print rrdtool.error() 
  14.   
  15. ###rrd插入數據 
  16. #!/usr/bin/python 
  17. import time 
  18. import psutil 
  19. import rrdtool 
  20.   
  21. for keys in psutil.network_io_counters(pernic=True): 
  22.   if keys == 'em1'
  23.     sent=psutil.network_io_counters(pernic=True)[keys][0] 
  24.     recv=psutil.network_io_counters(pernic=True)[keys][1] 
  25.     up=rrdtool.updatev('rest.rrd','N:%d:%d' % (sent,recv)) 
  26.     print up 
  27.   
  28. ###根據rrd繪圖 
  29. #!/usr/bin/python 
  30. import rrdtool 
  31.   
  32. rrdtool.graph('rest.png','--start','1369983960'
  33.     '--title','my rrd graph test'
  34.     '--vertical-label','bits'
  35.     'DEF:input=rest.rrd:input:LAST'
  36.     'DEF:output=rest.rrd:output:LAST'
  37.     'LINE1:input#0000FF:In traffic'
  38.     'LINE1:output#00FF00:Out traffic//r'
  39.     'CDEF:bytes_in=input,8,*'
  40.     'CDEF:bytes_out=output,8,*'
  41.     'COMMENT://n'
  42.     'GPRINT:bytes_in:LAST:LAST in traffic/: %6.2lf %Sbps'
  43.     'COMMENT: '
  44.     'GPRINT:bytes_out:LAST:LAST out traffic/: %6.2lf %Sbps'

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 油尖旺区| 惠安县| 盘山县| 海兴县| 慈溪市| 锡林郭勒盟| 施秉县| 泉州市| 突泉县| 嘉定区| 通许县| 新乡县| 新宁县| 巴东县| 色达县| 黑水县| 莒南县| 清丰县| 西乌| 浮梁县| 响水县| 儋州市| 河南省| 扎兰屯市| 南江县| 和林格尔县| 武胜县| 丰都县| 甘孜县| 子长县| 波密县| 庆城县| 景泰县| 无锡市| 宁阳县| 平果县| 铁岭市| 抚州市| 株洲市| 武平县| 新乡县|