簡易警告(アラート)を構築する
パフォーマンスモニターを使いたおす(5)
前回はパフォーマンスモニターを使って長期観測する設定方法と注意点を説明しました。
今回はパフォーマンスの観測ではなく簡易アラート機能を実装します。
あくまで簡易
パフォーマンスモニターは文字通り、パフォーマンス情報の収集に特化したプログラムです。
そのため、ある閾値に到達したらアラートを発報するという機能は有していますが、あまり高機能なものではありません。
DELLにしてもHP EnterpriseにしてもFUJITSUにしても、有名どころのサーバーメーカーから購入していれば大抵は専用のモニタリングツールが搭載されています(DELLならOpen Manage、HPEならOneView、FUJITSUならServerViewなどなど)。
これらのソフトウェアと比較すると、アラート機能は見劣りします。
また、パフォーマンスモニターはWindows OS上で稼働するソフトウェアですので、当然ながらWindowsが停止すると監視もアラートの発報も停止します。
以上のことを踏まえて、あくまで簡易的なものと意識してパフォーマンスモニターのアラート機能を使ってください。
パフォーマンスモニターとタスクスケジューラを設定する
パフォーマンスモニターでアラート発報と書きましたが、実のところパフォーマンスモニター自体はアラートを発報する機能はありません。
実際にはパフォーマンスモニターで数値を監視して、ある閾値を超えたらタスクマネージャに登録しているタスクを実行する、という仕組みです。
ですので、パフォーマンスモニター+タスクスケジューラという組み合わせ技が必要になります。
今回は下記の要件で設定していきます。
- ネットワークの受信が700Mbpsを超えると発報
- 発報時にデスクトップのテキストファイルにalertと記録する
- バースト通信(突発的な通信の上昇)を観測する
機能的には随分少ないですが、基本の設定を抑えられるので応用すれば色々な使い方ができます。
パフォーマンスモニターの設定
ユーザー定義からデータコレクターセットの新規作成をします。
適切な名前を付けて手動で作成します。
通常、データログを記録する、を選択するところですが今回は”パフォーマンスカウンターの警告”を選択します。
監視するパフォーマンスカウンターを選択します。
ここではネットワークの受信量を監視しますので、Network InterfaceからBytes Recieved/secを選びインスタンスに通信に使うLANカードを選択します。
警告する時期を”より上”にして制限値に87500000を指定します。
観測する数値はByte / secであり、今回の閾値は700Mbpsですので700*1000*1000 / 8から計算しています。
”より上”という設定はその名の通り、指定した制限値を超えた場合に警告する(=タスクを実行する)という意味です。
逆に”より下”は制限値を下回った時に警告します。こちらはメモリ空き容量やディスク空き容量などのような負荷上昇に伴って数値が減少する場合に使用します。
設定したら保存して閉じましょう。このままでは警告タスクは何も実行されないので引き続き設定します。
作成したデータコレクターセットをクリックしてコレクターのプロパティを開きます。
サンプルの間隔とありますが、今回はバースト通信を観測するために最短の1秒を指定します。
ディスク容量やメモリ空き容量のように、ゆっくりと変化する数値を観測する場合や10分や60分、場合によっては1日1回など適宜設定して下さい。
次に”警告のタスク”タブをクリックします。
ここではこの後設定するタスクスケジューラのタスク名を指定します。ここではalertとしています。
設定が終わればOKボタンをクリックしてダイアログは閉じます。パフォーマンスモニターの設定はこれで終了です。
バッチファイルの準備
続いてログを記録するためのバッチファイルを準備します。
今回は超簡易版ということで、実行するとテキストファイルに"alert"と出力するだけのバッチを準備します。
メモ帳を開き下記のコマンドを入力して.batとして保存して下さい(ここでは名前をalert_output_txt.batとしています)。
echo alert >> C:\Users\Administrator\Desktop\log.txt
バッチファイルの書き方によってはメールの発信やsyslogの送出なども可能です。
タスクスケジューラの準備
タスクスケジューラを開き、タスクの新規作成をします。
タスクの名前は先ほどパフォーマンスモニターの設定をした名前を同じようにします。
”ユーザーがログオンしているかどうかにかかわらず実行する”と”最上位の特権で実行する”にチェックを入れます。
こうすることでユーザーサインアウト中でもログが出力されます。
次に操作タブから新規ボタンをクリックします。
プログラムの開始で先ほど作成したバッチファイルを指定します。
設定したらタスクを保存します。タスクスケジューラを実行するユーザーアカウントの情報を入力して設定を確定します。
これでタスクの設定も完了です。
最後にパフォーマンスモニターのデータコレクターセットを実行することを忘れないでください。
適切に設定できていると下記のようにlog.txtへalertという文字列が記録されます。
補足:Windowsイベントの記録
データコレクターの設定にある警告の動作で”アプリケーションイベントログにエントリを記録する”を指定するとWindowsイベントに情報が記録されます。
イベントの保存場所は”アプリケーションとサービスログ>Microsoft>Windows>Diagnosis-PLA>Operational”です。
このように設定した閾値と観測したカウンター値まできちんと記録されています。
XML形式でもデータがしっかり構造化されていますので、なんらかのプログラム的処理を後々実施することも可能です。
利用上の注意点
サンプルの間隔と警告の期間
今回はサンプルの間隔を1秒にしましたが、すでにお察しの通り10秒間閾値を超えていると10回記録されます(=10回タスクが実行される)。
不必要に多すぎる警告はかえって運用管理の邪魔になってしまいますので、できれば長めに設定したいところです。
しかし逆に期間が長すぎると、ネットワーク通信の一時的な高負荷であるバースト通信は観測できません。
このあたりが簡易的と言わざるを得ないところで、サーバーメーカーが導入している専用ソフトであれば移動平均を計算して観測することで解決できます。
そういった複雑な計算はパフォーマンスモニターではできませんので注意しましょう。
まとめ
- パフォーマンスモニターとタスクスケジューラでアラートの発報が可能
- あくまで簡易的なものなので、作りこみはほどほどに