您好,登錄后才能下訂單哦!
前段時(shí)間寫多主機(jī)性能指標(biāo)監(jiān)控工具res-monitor時(shí)有提到它,這里就專門對它做個(gè)介紹吧。
像res-monitor這類工具,既要實(shí)時(shí)獲取數(shù)據(jù),又要實(shí)時(shí)圖形化展示數(shù)據(jù),常規(guī)的是把采集的數(shù)據(jù)存放到數(shù)據(jù)庫,然后再讀數(shù)據(jù)庫數(shù)據(jù)畫圖展示,然而,當(dāng)我遇到rrdtool的時(shí)候,眼前一亮,很特別,它一方面可以把數(shù)據(jù)存儲起來,扮演數(shù)據(jù)庫的角色;另一方面又能根據(jù)存儲的數(shù)據(jù)繪圖,而且圖形表達(dá)能力很強(qiáng),如線狀圖、餅狀圖、柱狀圖、區(qū)域面積圖等;支持高性能的數(shù)據(jù)存儲、繪圖,很方便集成在各種腳本中。從github的修改記錄來看,它從2012年發(fā)布至今,一直在維護(hù)和更新著,可見其生命力。
Rrdtool很強(qiáng)大,完成數(shù)據(jù)存儲和實(shí)時(shí)展示繪圖等工作,只需要掌握3個(gè)命令,但這三個(gè)命令的參數(shù)相當(dāng)多,使用起來有點(diǎn)復(fù)雜,另外,需要注意的是,它主要應(yīng)用在linux平臺,在windows上只能用Cygwin打包版本的,而且有些,需要繞過去。
本文不打算詳細(xì)介紹rrdtool的原理,因?yàn)檫@塊可以看官方文檔,主要是說明如何使用它,并給出一些應(yīng)用參考。
Rrdtool網(wǎng)址: https://oss.oetiker.ch/rrdtool/index.en.html
Rrdtool是環(huán)形數(shù)據(jù)庫工具,存儲和讀取的是環(huán)形數(shù)據(jù)庫,表現(xiàn)是后綴為.rrd的二進(jìn)制文件。要大概理解啥是環(huán)形數(shù)據(jù)庫,我對它的理解就是把它想象成圓形的時(shí)鐘,隨著時(shí)間推移,不斷往里寫數(shù)據(jù),同時(shí)有個(gè)標(biāo)記指向當(dāng)前數(shù)據(jù)記錄的最新位置,就像時(shí)鐘上的指針指示當(dāng)前時(shí)間一樣。又因?yàn)樗菆A形的,無始無終,可以一直往里寫數(shù)據(jù),只是歷史數(shù)據(jù)會被覆蓋掉,所以,有時(shí)它又被叫做時(shí)序結(jié)構(gòu)數(shù)據(jù)庫。
以下僅列出rrdtool的三個(gè)常用命令create、update、graph,看到這些命令格式,大概你就感覺到這工具使用的復(fù)雜性了。
Create命令格式:
rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments] [RRA:CF:cf arguments]
Update命令格式:
rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] [--skip-past-updates|-s] [--daemon|-d address] [--] N:value[:value]... timestamp:value[:value]... at-timestamp@value[:value]...
Graph命令格式:
rrdtool graph|graphv filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...]
針對各個(gè)參數(shù)的說明實(shí)在太多,不在此列出,建議直接看官方文檔https://oss.oetiker.ch/rrdtool/doc/rrdtool.en.html,該部分:
命令格式太復(fù)雜,但是,只要搞定上面三個(gè)命令,以后用起來就輕松了,直接套用格式就行,如下是res-monitor監(jiān)控帶寬使用的命令配置實(shí)例,應(yīng)用在python代碼里,僅供參考哦。
1) 使用create命令創(chuàng)建rrd數(shù)據(jù)庫文件
rrdtool_create = ('{bin_file} create {rrd_file} -s {interval} '
'DS:recvAvg:GAUGE:300:0:U '
'DS:sendAvg:GAUGE:300:0:U '
'RRA:AVERAGE:0.5:1:600 ')
命令說明:
Create命令創(chuàng)建rrd數(shù)據(jù)庫,設(shè)置間隔為5s,定義里個(gè)數(shù)據(jù)源(DS),且數(shù)據(jù)源類型是保留原始值(GAUGE),數(shù)據(jù)接收的最大時(shí)間跨度是5分鐘,否則設(shè)置U(unknown),指定按每個(gè)數(shù)據(jù)取平均值(AVERAGE)的方式歸檔存放數(shù)據(jù);
2) 使用update命令更新rrd數(shù)據(jù)庫
rrdtool_update = '{bin_file} update {rrd_file} N:'
命令說明:
Update命令向rrd數(shù)據(jù)庫寫數(shù)據(jù),注意N:后面的數(shù)據(jù)組數(shù)和create指定的數(shù)據(jù)源對應(yīng),上面create是2個(gè)數(shù)據(jù)源,update的數(shù)據(jù)也只能是2組??梢岳斫獬啥嘈?列的表,每列對應(yīng)create指定的數(shù)據(jù)源,update就是一行行往里面填數(shù)據(jù)。
3) 使用graph命令讀取rrd數(shù)據(jù)庫并繪制
rrdtool_graph = ('{bin_file} graph {rrd_graph} '
'--start now-1800s '
'--vertical-label "NET Utilization" '
'--units-exponent 0 '
'--alt-autoscale-max '
'--lower-limit 0 '
'--title "NET/TOTAL:recv/send(MB/s)" '
'--font TITLE:10: Roman.ttf --font AXIS:10: Roman.ttf –font UNIT:10: Roman.ttf --font LEGEND:10: Roman.ttf '
'DEF:recvAvgFlow={rrd_relative_file}:recvAvg:AVERAGE '
'LINE1:recvAvgFlow#e60000:"recv(MB/s)" '
'GPRINT:recvAvgFlow:AVERAGE:"AVERAGE\:%3.1lf" '
'GPRINT:recvAvgFlow:MIN:"MIN\:%3.1lf" '
'GPRINT:recvAvgFlow:MAX:"MAX\:%3.1lf\\n" '
'DEF:sendAvgFlow={rrd_relative_file}:sendAvg:AVERAGE '
'LINE1:sendAvgFlow#32cd32:"send(MB/s)" '
'GPRINT:sendAvgFlow:AVERAGE:"AVERAGE\:%3.1lf" '
'GPRINT:sendAvgFlow:MIN:"MIN\:%3.1lf" '
'GPRINT:sendAvgFlow:MAX:"MAX\:%3.1lf\\n" '
)
命令說明:
Graph命令相當(dāng)復(fù)雜,但表現(xiàn)里很強(qiáng),上面參數(shù)指定圖標(biāo)顯示的時(shí)間跨度,縱橫坐標(biāo)標(biāo)題,圖表是否自動縮放,線條顏色,每個(gè)線條對應(yīng)從哪里取數(shù)據(jù),且顯示MIN\MAX\AVERAGE圖例說明等等。
注意:
命令中的變量需要根據(jù)自己的實(shí)際情況替換,自己開發(fā)的程序里需要執(zhí)行周期性的數(shù)據(jù)采集操作獲得數(shù)據(jù),然后使用update操作將數(shù)據(jù)寫入rrdtool。按上述命令格式配置,最后的效果如下:
坑1:
Rrdtool主要被設(shè)計(jì)應(yīng)用在linux平臺的,命令參數(shù)的分割符就是“:”,但在windows平臺,冒號是盤符標(biāo)志,所以,實(shí)際應(yīng)用中需要做轉(zhuǎn)義或者傳入相對路徑;
坑2:
Windows使用Cygwin打包版本的rrdtool,可能會報(bào)字體文件缺失,注意下載默認(rèn)的指定文件并指定。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。