WindowsのパフォーマンスログをRRDTOOLに投入したい。

監視ツールとかSNMPエージェント(net-snmpとか)を入れれば一発で済むんだろうけど、Windowsデフォルトオンリーだとこれしかない。探せば既にツールがあるような気がするんだけど、力技で作り始めてしまった。荒削りバージョン。UNIXTIMEの扱いがWindowsはデフォルトで持っていないのが面倒・・・。

  • 前提事項:
    • rubyWindows用。
    • パフォーマンスログはCSVで書き出す。
    • 監視対象(パフォーマンスログの列)の増減は考えない。
    • 列名ではなく、何列目かをキーとする。
    • 列毎にrrdファイルを作る。

処理は4段階:

    1. rrdファイルを作る。ファイル名とDSは両方とも列番号
    2. CSVファイルから、列番号.bat(投入データ用バッチファイル)と、列番号.txt(タイトルが入ってる)を作る。
    3. 作成したバッチファイルを実行する。←いまココ
    4. グラフを作成する(未完成)。

[rrdcreate.bat]
.\rrdtool\rrdtool create %1.rrd --start 開始時間[UNIXTIME] --step 15 DS:%1:GAUGE:600:U:U 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:288:797
pause

いろいろと、ファイルの操作にムリヤリ感が。

#第一引数	csvファイル
#第二引数	何列目?

require 'date'
require 'csv';

csvfile=ARGV[0]
column=ARGV[1]

cmdbase = "rrdtool update "+ column +".rrd "

fptitle = File::open(ARGV[1]+".txt", "a")
fpbat = File::open(ARGV[1]+".bat", "a")

i=0
CSV.open(csvfile, 'r') {|row|
  if i > 0 
    then
      datatime = DateTime.strptime(row[0][6..9]+row[0][0..1]+row[0][3..4]+row[0][11..12]+row[0][14..15]+row[0][17..18],'%Y%m%d%H%M%S').strftime('%s').to_i
      fpbat.puts cmdbase + datatime.to_s + ":" + row[column.to_i-1]
  else
    fptitle.puts row[column.to_i-1]
  end 
  i=i+1
}

fptitle.close
fpbat.close