タイトルが解りづらくて済みません。全自動ではありません。人力が多くなります。各端末上で設定流用してスクリプト走らせるだけで、タイマー込のパフォーマンス収集ができるよ。という話です。
PowerShell Advent Calendar 2011の21日目の記事として、最近試したスクリプトについてご紹介します。
今回実施したかったのは、お客様先のサーバーのパフォーマンスチェックの為、パフォーマンスモニターを利用して簡単に情報を収集したい。という要件。
そもそもパフォーマンスモニターをどう弄るんだ?と思っていた所、国井さんが既に投稿していました。
パフォーマンスモニタ徹底攻略マニュアル
ふむ。と思い、そこからアレンジしていくと以下の様なスクリプトに行きつきました。
なお、スクリプト作る際にはPower GUI を使いました。インテリセンスも効くし、デバッグも簡単にできるし中々に素敵です。
コメント多すぎる位に入れてるので特に説明はしません。以下のスクリプトファイルと同じ階層に収集情報をまとめたXMLを配置するだけで実行できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
# パフォーマンスモニターのデータ コレクター セットのCOMオブジェクトを生成 $datacollectorset = New-Object -COM Pla.DataCollectorSet # パフォーマンスカウンターや、スケジュール、停止条件などを記載したXMLファイルをインポート $xml = Get-Content .\カウンタ等の設定.xml # XMLをデータコレクタセットに設定 $datacollectorset.SetXml($xml) # データコレクターセットを名前を付けてスクリプト実行端末にコミットする第三パラメータはCommitModeを指定 $datacollectorset.Commit("パフォーマンスチェック" , $null , 0x0003) | Out-Null # データコレクタ―セットで使用するデータコレクターセット名を指定してローカルで実行 $datacollectorset.Query("パフォーマンスチェック", $null) # データコレクターセットによる採集を開始 $datacollectorset.Start($false) |
まぁ、データコレクターセットのオブジェクト作って、収集する情報まとめたXML読ませて、名前付けて実行するだけ。
最後の行見てみるとStartしてるだけじゃん?いつ終わるんだよ?と思うかもしれませんが、そのポイントはXMLファイルにあります。
PowerShellと無関係になりますが、簡単に読ませるXMLについて解説。
このXMLは、以下の図のダイアログの情報を全て格納しています。逆に言うと手書きは無理。

一通りパフォーマンスモニター上でデータコレクターセットの設定をした後に以下の図にあるようにテンプレートの保存を選択します。これで、他の端末上でも同様のデータ収集ができます。

話は戻って、上記ダイアログ内では停止条件という物があります。ここで、収集を辞めたい時間とかを設定すれば
停止のStopメソッドやタイマーなどを仕込まなくても自動で停止します。
ファイルを出力する場所の指定などもできちゃいます。
どうですか?コレ意外とイケてません?
お陰様で、簡単に多くの端末に対して自動で情報収集できるようになります。
まぁ、PowerShell実行するための手順書は必要になるんですが、都度パフォーマンスモニター開いて・・・といった作業からは開放されるので良し!
実際に収集した結果はこんな感じで映ります。

ちなみに収集されたデータは時間によりサイズが変わるので実際に複数台で試してみると良いと思います。
私が試した環境では、ネットワーク周りを*の設定で収集したので、設定時は12個位(*カウンタ含む)だったのに、実カウンタが35個言ったりして、1日収集したら680MBいきました(圧縮率は高く10%以下になります。メモ帳で開けなかったけど中身はテキストデータが多いのかな?この辺りは良く解りません)。
とりあえず、他の方に役に立つかはさておき私はこれでかなり助かりました。もっと便利にできる方法をご存知の方居ましたら教えてください!
明日はchaboonさんの登場です。よろしくお願いします。