Pythonの——ネットカードの流量のグラフの描画を実現します
日常の運営の仕事の中で、データの変化の趨勢を観察して私達のサービスの品質を理解するのに有利で、例えばシステムの監視の方面で、ネットの流量の趨勢図は直接現在のネットのスループットを示しました.CPU、メモリ、ディスク領域の使用率の傾向は、サーバの稼働状態を反映しています.これらのデータグラフ管理者は、事前に応急対策を行い、存在する可能性のあるリスクポイントを防ぐことができます.今回の実践では、rrdtoolモジュールによりサーバネットワークカードトラフィックトレンドマップの描画を実現します.すなわち、createメソッドでrrdデータベースを作成し、updateメソッドでデータの書き込みを実現し、graphメソッドでグラフの描画を実現し、last、first、info、fetchメソッドのクエリーを提供します.
1.rrdデータベースの作成
最初のステップはcreateメソッドを使用してrrdデータベースを作成し、パラメータはrrdファイル、更新頻度setp、開始時間--start、データソースDS、データソースタイプDST、データサイクル定義RRAなどを指定します.
具体コードpyは次のとおりです.
2、rrdデータベースの更新
ステップ2ではupdatevメソッドを使用してrrdデータベースを更新し、パラメータは現在のLinuxタイムスタンプを指定し、eth 0_を指定します.in、eth0_out値(現在のNICの出入り流量)は、psutilモジュールなどのpsutilモジュールで取得する.net_io_counters()[1]は入流量
具体コードupdate.py
3、グラフを描く
グラフをgraphで描画します.この例では、キーパラメータは--x-gridを使用してX軸メッシュの目盛りを定義します.DEFはデータソースを指定します.CDEFを使用してデータをマージします.HRULEは水平線(アラーム線)を描画する.GPRINTは最大値、最小値、平均値などを出力します.
具体コードpyは次のとおりです.
4、rrdtool常用コマンド
rrdファイルの内容を表示することは、データの構造、更新などを観察するのに役立ち、rrdtoolはいくつかの一般的なコマンドを提供します.
infoは、rrdtool info Flowなどのrrdファイルの構造情報を表示します.rrd;
firstは、rrdtool first Flowのようなrrdファイルの最初のデータの更新時間を表示する.rrd;
Lastは、rrdtool last Flowなどのrrdファイルの最近の更新時間を表示します.rrd;
fetchは、rrdtool fetch Flowのような、指定時間、CFに基づいてrrdファイルを問い合わせる.rrd AVERAGE.
1.rrdデータベースの作成
最初のステップはcreateメソッドを使用してrrdデータベースを作成し、パラメータはrrdファイル、更新頻度setp、開始時間--start、データソースDS、データソースタイプDST、データサイクル定義RRAなどを指定します.
具体コードpyは次のとおりです.
# -*- coding: utf-8 -*-
#!/usr/bin/python
import rrdtool
import time
cur_time=str(int(time.time())) # Linux rrd
# --step 300 ( 5 )
rrd=rrdtool.create('Flow.rrd','--step','300','--start',cur_time,
# eth0_in( )、eth0_out( ); COUNTER( );600 ,
# 600 , UNKNOWN ;0 ; U ,
'DS:eth0_in:COUNTER:600:0:U',
'DS:eth0_out:COUNTER:600:0:U',
#RRA [RRA:CF:xff:steps:rows],CF AVERAGE、MAX、MIN
#xff 0.5, CDP PDP UNKNOWN, CDP UNKNOWN
# 4 RRA , AVERAGE ,
# 5 (1*300 ) , 600 , 2.08
# 30 (6*300 ) , 700 , 14.58 (2 )
# 2 (24*300 ) , 775 , 64.58 (2 )
# 24 (288*300 ) , 797 , 797 (2 )
'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()
2、rrdデータベースの更新
ステップ2ではupdatevメソッドを使用してrrdデータベースを更新し、パラメータは現在のLinuxタイムスタンプを指定し、eth 0_を指定します.in、eth0_out値(現在のNICの出入り流量)は、psutilモジュールなどのpsutilモジュールで取得する.net_io_counters()[1]は入流量
具体コードupdate.py
# -*- coding: utf-8 -*-
#!/usr/bin/python
import rrdtool
import time,psutil
total_input_traffic = psutil.net_io_counters()[1] #
total_output_traffic = psutil.net_io_counters()[0] #
starttime=int(time.time()) # Linux
# updatev , {'return_value': 0L} ,
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
3、グラフを描く
グラフをgraphで描画します.この例では、キーパラメータは--x-gridを使用してX軸メッシュの目盛りを定義します.DEFはデータソースを指定します.CDEFを使用してデータをマージします.HRULEは水平線(アラーム線)を描画する.GPRINTは最大値、最小値、平均値などを出力します.
具体コードpyは次のとおりです.
# -*- coding: utf-8 -*-
#!/usr/bin/python
import rrdtool
import time
#
title="Server network traffic flow ("+time.strftime('%Y-%m-%d', \
time.localtime(time.time()))+")"
# "--x-grid","MINUTE:12:HOUR:1:HOUR:1:0:%H" ( )
“MINUTE:12” 12
“HOUR:1” 1
“HOUR:1” 1 label
“0:%H”0 ,%H
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.1k
"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ファイル、このファイルは私たちのNICトラフィックチャートです.4、rrdtool常用コマンド
rrdファイルの内容を表示することは、データの構造、更新などを観察するのに役立ち、rrdtoolはいくつかの一般的なコマンドを提供します.
infoは、rrdtool info Flowなどのrrdファイルの構造情報を表示します.rrd;
firstは、rrdtool first Flowのようなrrdファイルの最初のデータの更新時間を表示する.rrd;
Lastは、rrdtool last Flowなどのrrdファイルの最近の更新時間を表示します.rrd;
fetchは、rrdtool fetch Flowのような、指定時間、CFに基づいてrrdファイルを問い合わせる.rrd AVERAGE.