インサイトテクノロジーさんの db tech showcase ONLINE 2020 で、次のセッションを担当させていただきます。
本セッションでは、パフォーマンスモニターや、動的管理ビュー (DMV) の情報を使用したベースライン取得の基本的なアプローチについてお話をさせていただく予定です。
セッション資料を作成していて「そういえば Windows Server 2019 でデータコレクションの自動起動が動かない件があったな」ということを思い出したので情報をまとめておこうかと。
基本的には、次の記事を把握しておけば問題ないはずです。
- データ コレクター セットの停止に時間がかかる事象について
- Windows Server 2019: working with Performance Monitor data collector sets
今回は、スクリプトは作成せずに、GUI からの操作でできる範囲で対応していますが、本来は、logman 等を使用したタイマー起動 / 終了と、スクリプトによるファイルの削除を実施したほうが良いかと思います。
パフォーマンスモニターのログの定期的な削除のための設定
昨今のシステムでは、何らかのメトリック収集の仕組みが導入されており、それらのシステム上で、パフォーマンスモニターのログに類する情報が取得されていることが多いかと思います。
SQL Servr に特化しているモニタリングソフトを使用していれば、OS のパフォーマンスモニターのログを取得する必要はないケースがありますが、標準で収集されていない情報は、取得した情報の加工性を考慮すると、パフォーマンスモニターで個別の情報取得の必要性についても検討を行う必要があります。
定期的な取得では、何世代分かのログを残しておく必要があり、世代数を考慮した場合には、次の 2 つの機能を利用することができます。
- データマネージャー
- 停止条件
データマネージャー
データマネージャーは、データコレクターセットのプロパティから設定することができ、テータコレクターセットをエクスポートした際の XML にも含まれますので再利用可能です
次の画像は、データマネージャーの設定画面ですが、基本的には赤枠の設定を行えば問題ないかと思います。
これによって、古いログが削除される設定が行われます。
つぎに、ここで設定した内容が実行されるタイミングのトリガーを設定します。
停止条件
「データマネージャーによる古いファイルの削除」ですが、「データコレクターが停止されたタイミング」で実行が行われるため、定期的にデータコレクターの停止を行う必要があります。
GUI で停止の設定を行うためには、データコレクターセットのプロパティを開きます。
プロパティを開いたら「停止条件」を設定します。
停止条件では、どの程度の期間に達したら、取得の停止を行うかを指定することができます。
これにより指定したタイミングに達すると、自動的にログの取得が停止し、停止タイミングでデータマネージャーによって、ファイルの削除が行われます。
(停止条件ではなく、logman コマンドで stop した場合も、データマネージャーは実行されます)
「制限に達したらデータ コレクター セットを再開する」を使用した場合は、データマネージャーによるファイルの削除が行われないので、データマネージャーによるファイルの削除は停止状態にする必要があるかと。
「1440 分」が 1 日の時間となりますので、冒頭で紹介したデータコレクターの停止にかかる時間を考慮して、30 分ぐらい引いた「1410 分」ぐらいが妥当なのですかね。
サーバーの再起動などを実施した場合は、開始~終了のタイミングが他の回とはずれますので、停止条件ではなく、タスクスケジューラーに logman stop を設定することで制御をした方がよいと思いますが。
これで約 1 日のデータ収集が終わると、自動的に停止状態になります。
これでファイルの削除ができましたので、次は停止後の開始方法を検討します。
タスクスケジューラー設定を変更
タスクスケジューラーをスケジュール起動するための方法として、データコレクターセットのプロパティの「スケジュール」に設定があるのですが、Windows Server 2019 だとこれが動作しません…。
データコレクターセットのスケジュールを設定すると、OS のタスクスケジューラーに登録が行われます。
登録の場所は、「タスクスケジューラーライブラリ→Microsoft→Windows→PLA」になります。
Windows Server 2019 より前のバージョンでは、タスクにより起動される操作には、次のような内容が登録されてました。
C:\Windows\system32\rundll32.exe C:\Windows\system32\pla.dll,PlaHost "New Data Collector Set" "$(Arg0)"
2019 では、カスタム ハンドラーとなったようで、タスク起動時の操作は変わっているようなのですよね。
PLA に設定されているタスクではうまく自動起動ができなかったので、新しく次のようなタスクを作成します。
logman 経由で指定のタイミングで、データコレクターを起動するようにしておきます。
起動のスケジュールは任意のタイミングでよいと思います。(取得するシステムのイベントがあまりないタイミングにしておくと良いかと思います。)
これで、Windows Server 2019 でもデータマネージャーを使用しながら、ログの世代管理が実行できるはずです。
本投稿では、簡略式に設定を行うためにh、データマネージャーと停止条件を使用しましたが、
- データマネージャーを使用した停止は、停止タイミングのレポート作成で時間がかかる
- 停止条件は起動してからの時間となるため、再起動が発生した場合の次回取得で、タイミングが狂う可能性がある
というような問題は考慮する必要があります。
ログの取得状況に厳密性がなく、ひとまず取れていれば良いのであれば、今回のような設定で動作させることはできるかと思います。
しかし、実運用環境で、ログを厳密に取得しておかなくてはいけないようなケースでは、
- 起動 / 停止はタスクスケジューラーに logman.exe を登録することで実行
- 特定のタイミングでファイルが世代別に分かれるように薄る
- 過去のファイルの削除はスクリプトで実施
- データマネージャーは停止時に時間がかかる可能性があるため、過去ファイルは明示的にバッチで削除
の実装を検討する必要があるのではないでしょうか。