Pythonの——ネットカードの流量のグラフの描画を実現します

5138 ワード

日常の運営の仕事の中で、データの変化の趨勢を観察して私達のサービスの品質を理解するのに有利で、例えばシステムの監視の方面で、ネットの流量の趨勢図は直接現在のネットのスループットを示しました.CPU、メモリ、ディスク領域の使用率の傾向は、サーバの稼働状態を反映しています.これらのデータグラフ管理者は、事前に応急対策を行い、存在する可能性のあるリスクポイントを防ぐことができます.今回の実践では、rrdtoolモジュールによりサーバネットワークカードトラフィックトレンドマップの描画を実現します.すなわち、createメソッドでrrdデータベースを作成し、updateメソッドでデータの書き込みを実現し、graphメソッドでグラフの描画を実現し、last、first、info、fetchメソッドのクエリーを提供します.
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.