MRTGでSNMPを使わずグラフ化する方法

MRTGでルーターやスイッチのトラフィック監視をしているんですが、WindowsサーバーのCPUなども見ておきたいな
と言う事でどうやって値をとろうかなと考えていたら、VB.netで書きだしてMRTGに読ませたらいいのでは?と
思って作ってみました。

サーバーのリソース監視程度なら、SNMPで出来るんだけどね。
あえてSNMPを使用せず、カスタムスクリプトでやってみました。
以前にルーター温度計とかも作ってたので大丈夫でしょう。


MRTGは所定のフォーマットに従ったデータであれば、別のプログラムが作ったデータからグラフを作ることができます。
例えばCPU温度と部屋の温度の関係とか、油温と油圧のグラフとかそう言うのもできます。

MRTGの文法は以下のとおり
30
50
34000
Sample Data

という4行のデータを渡せばOKです。
この場合だと、30が第一系列の値、50が第二系列の値、3400がシステムのアップタイム、Sample Dataがデータの説明です。
MRTGは必ず二つの系列を使用しますので、一列だけでいい場合は二列目は0でいいです。

例2
49 ←dat11
0 ←data2
34050 ←System Uptime
Sample Data ←Label

システムアップタイムも適当でいいです。

このフォーマットに合う形で、出力するスクリプトを作ります。
と言ってもVB.netなんでゴリゴリ書いたわけですが。

スクリプト編
こんなのVBScriptでできそうなんですが、VB.netが慣れてるのでそっちで作ります。
便利なことにWindowsXP以降だと、システムの各情報を一発で取れるメソッドが有りますので
そう言うのを使ってしまいます。

PerformanceCounterというのを使います。
これは管理ツールの中にあるパフォーマンスモニターで表示される内容と同じ物が取れます。
色んな物が取れますがここでは、ディスクの転送量とCPU使用率とメモリー使用率を取得します。

VB.netで宣言するとこんな感じ

Dim DiskLoadValue As New PerformanceCounter

で、サンプルコード




コマンドラインアプリケーションとして、コンパイルして引数を指定して実行すると
MRTG用のフォーマットで出力されます。

LoadValue.exe 0
という感じで使用します。

LoadValue.exe 0
ディスク転送量

LoadValue.exe 1
CPU使用率

LoadValue.exe 2
メモリー使用率(コミットした量なので、実際に使用している割合だと思う)

この結果をリダイレクトしてやれば完成です。


LoadValue.exe 1 > \\192.168.101\logs\cpu.log
こんな感じでsamba経由で送り付けます。

MRTGサーバー側でcatすれば終わりです。

続きはまた次回へ

カテゴリー: Linux, Windows, コンピュータ パーマリンク

コメントは停止中です。