SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

イベントサブスクリプションでイベントログを再送する

leave a comment

Windows Server 2008 以降ではイベントサブスクリプションで特定のコレクターサーバーにイベントログを転送することができます。

イベントサブスクリプションでイベントログを再送する方法をまとめてみたいと思います。
今回はコレクターから取得する (プル) 場合の内容となっています。

イベントサブスクリプションは

  • ソース (イベントログの転送元)
  • コレクター (イベントログの転送先)

で構成されます。

プッシュでもプルでも変わらないようなのですが、イベントサブスクリプションの設定はレジストリに格納されているようです。

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionEventCollectorSubscriptions] の配下にサブスクリプション単位でキーが作られます。

image

コレクターから取得する場合は、対象のソースコンピューターごとにキーが作成されます。
この中に有効 / 無効の設定 (Enabled) やハートビートの最終送出時間 (LastHeartbeatTime)、ログの取得情報 (Bookmark) が設定されています。

イベントサブスクリプションを操作するコマンドとして、wecutil がありますが、この辺りの細かな設定が変えられないようで、ソース単位の有効/無効の切り替えはレジストリを直接操作したほうが早そうでした。

LastHeartbieatTime はハートビートを最後に送ったタイミングになると思いますが、実際の時間を求めるためには少し変換が必要となります。
たとえば、以下のような値があったとします。
image

ここから日付を求めるためには、

  1. 1cf46e8791a3f56 の先頭に 0 をつけます。
    01cf46e8791a3f56
  2. これを 8 桁 + 8 桁に分割します。
    01cf46e8 791a3f56
  3. 先頭と後方の 8 桁の場所を変えます。
    791a3f56 01cf46e8
  4. これをコマンドプロンプトから nltest /time に渡します。
     image

エラー時などはレジストリにエラーが発生したタイミングの情報が出力されますので、時間系の情報は同様の変換で日付を確認することができます。

それでは、ここからが本題です。
イベントサブスクリプションでは、ソースに対してどこまでイベントログを取得したかの情報を先ほどのレジストリの Bookmark に保持しています。

このレジストリの中に RecordId があり、この値が対象のソースのイベントログをどこまで読み込んだかの設定になります。
image

イベントログには、EventRecordID を持っており、この値と上記の設定が対応しているようです。
image

そのため、コレクターの上記のレジストリの値を変更 (必要となる EventRecordID まで戻す) することで、イベントログを再送 (実際にはレジストリに設定した EventRecordID 以降を再取得) することができます。
なお、再送をした場合は、すでに転送されているイベントログがある場合、重複の排除はしませんので同じログが多重に書きこまれることになります。

再送だけでなく、どこまでログが受取れたのかを確認する場合もこれらのレジストリをチェックしておくとよさそうですね。

Share

Written by Masayuki.Ozawa

3月 24th, 2014 at 8:01 am

Posted in Windows Server

Tagged with

Leave a Reply