Edited at

【BAT】Windowsのパフォーマンスログ(モニタ)の取得


はじめに

仕事では運用チームに属しています。30近いWindows ServerのPCを監視している中で、たまによくわからない現象が発生します。

某N社に連絡すると現象が発生したときのログを取得して送ってくださいというメールが届きます。

そんなわけで自分のところに再度現象が発生するまでパフォーマンスログを仕掛けるようにとの依頼がきました。


パフォーマンスログ

Windowsではパフォーマンスモニターを使用することでパフォーマンスログを取得できます。

下記サイトを参考にパフォーマンスモニターをGUIで設定することができます。

[SQL Troubleshooting] 第2回 : Tips -パフォーマンス ログの採取方法 (Windows Server 2003 ~ Windows Server 2012 R2)

複数台を運用している際、どのサーバーにも共通のモニターを設定したい場合にはインポートとエクスポート機能がある。

Windowsのパフォーマンスモニターの設定エクスポート、インポート


コマンドライン

パフォーマンスモニターにはコマンドラインを使用することができます。

typeperfコマンドとlogmanコマンドの2種類あります。

logmanコマンドは、GUIで設定したデータコレクターセットを使用する場合に便利です。


プログラム

今回はtypeperfコマンドを使用した例とします。

下記の3ファイルを同じフォルダ内に配置します。


  • CounterItems.txt

  • PerLog.bat

  • PerLogTask.bat


CounterItems.txt

取得するパフォーマンスログをテキストファイルに設定します。


CounterItems.txt

\LogicalDisk(*)\*

\Memory\*
\Network Interface(*)\*
\Process(*)\*
\Processor(*)\*
\PhysicalDisk(*)\*
\Server\*
\System\*


PerLog.bat

パフォーマンスログを取得します。

今回は30秒間隔で1日中取得する設定を行います。

cfオプションには取得するパフォーマンスログ(CounterItems.txt)を指定します。

siオプションは間隔(秒)の30を指定します。

scオプションは回数で2880を指定します。

(1日は60分 x 24時間=1440分、間隔が30秒なので60/30=2、最終結果は 1440 x 2 = 2880)

fオプションはファイル種類でバイナリーのbinを指定します。

oオプションは出力ファイル名で、counter_yyyyMMddHHmm.blg 形式となります。

1日中だと130MByteくらいの容量となりますので、3世代管理として実行する度に一番古いファイルを削除するようにしています。

最初はforfilesコマンドを使用して経過日数で世代管理としていたのですが、長期休暇でサーバーを再起動した際に経過日数だとバックアップファイルが無くなると指摘があったため、ファイル数による世代管理に修正しました。

【bat】経過日数およびファイル数で古いファイルを削除する方法


PerLog.bat

cd /d %~dp0

set time_tmp=%time: =0%
set dt=%date:/=%%time_tmp:~0,2%%time_tmp:~3,2%

REM 3世代管理として一番古いファイルを削除します。
for /f "skip=2" %%a in ('dir /b /o-d *.blg') do del %%a

REM 30秒間隔で1日中取得する。
typeperf -cf CounterItems.txt -si 30 -sc 2880 -f bin -o counter_%dt%.blg

exit 0



PerLogTask.bat

タスクスケジューラで指定するバッチとなります。

運用でタスクスケジューラの状態の監視もしており、0以外だと監視通知が届いてしまうのを回避するためです。そのため監視不要の場合は、タスクスケジューラでPerLog.batを指定すればいいです。

今回はタスクスケジューラから指定する場合、PerLogTask.batを指定します。

こうしないと1日中動作するため「0x41301:現在タスクを実行中です」状態となります。


PerLogTask.bat

@echo off

cd /d %~dp0

rem PerLog.batを呼び出す
start PerLog.bat

exit 0



最後に

パフォーマンスモニターのGUIって初見だと何がなんだか分かりにくいんですよね、使いこなせばいいんでしょうけど。ということでコマンド実行した方が直感的に分かりやすい。