イベントサブスクリプションで0x80338095エラーが表示される場合の対処法
本エントリーの目次
イベントサブスクリプション機能を使えば、Windowsのイベントログを転送・収集・管理することが可能です!
Windows OSでは、WinRMサービス※1とWecsvcサービス※2を利用したイベントサブスクリプションという機能を使うことで、Windows ServerやWindows クライアントPCのイベントログを転送・収集・管理することが可能です。
しかもこれはWindows OSの標準機能であるため、OSのライセンスを購入するだけで追加料金を必要とせずに利用でき、とてもお得な機能です。
※1 Windows Remote Management = Windows リモート管理
※2 Windows Event Collector Service = Windows イベント コレクター
このブログでは以前に、イベントサブスクリプションの設定について、以下ページでくわしく解説しています。
Windows PCのイベントログを無料で特定のPCに転送・収集・管理する方法
上記ページでは、ログを収集・保持するサーバー(コレクター)にWindows Server 2012 R2 Standard Edition。
そしてログの収集対象(収集される側・ソース)であるクライアントPCにWindows 10 Professionalを使用した例を用い、動作確認と解説を行っています。
そのため解説している手順のとおりに設定を行えば、正常なログの転送・収集・管理が可能となるでしょう。
ところが…。
イベントサブスクリプションで0x80338095エラーが発生する!?
Windows PCのイベントログを無料で特定のPCに転送・収集・管理する方法で紹介している手順のとおりに設定を行っても、正常にログの転送・収集・管理ができず、エラーが発生することがあります。
ランタイムの状態を確認すると、0x80338095エラーが発生している!
各ソースコンピューターに対し、イベントサブスクリプションの機能が正常に動作しているかどうかは、対象のサブスクリプションを選択して右クリック。
表示されたコンテキストメニュー中の『ランタイムの状態』を選択することで、確認可能です。
そして各ソースコンピューターのランタイムの状態を確認すると、以下のような0x80338095というコードのエラーが発生していることがあります。
エラー内容:
[コンピューター名] – エラー – 最後の再試行時間 XXXXXXXXXXXX. コード(0x80338095) プッシュサブスクリプションソースからのクライアントへの接続テストが失敗しました。
イベントソースが存在するサーバーコンピューターがプッシュサブスクリプションを実行しているクライアントコンピューターへアクセスできない場合に、この状態が発生します。
ファイアウォールやその他のネットワーク境界が原因になっていることも考えられます。
サブスクリプションを変更して、プル用のサブスクリプションを使用してください。次の再試行時間: XXXXXXXXXXXX
今回はこのエラーを改善し、正常にイベントサブスクリプションの機能を利用できるようにする方法をご紹介します!
イベントサブスクリプションの0x80338095エラーの原因
イベントサブスクリプションの0x80338095エラーの原因は、先にご紹介したエラーメッセージにも書いてあり、”イベントソースが存在するサーバーコンピューターがプッシュサブスクリプションを実行しているクライアントコンピューターへアクセスできない場合に”、このエラーが発生します。
イベントサブスクリプションでは、『イベント配信の最適化』という設定項目について、配信モード(プルもしくはプッシュ)や使用するネットワーク帯域幅など、配信動作が異なる『通常』、『帯域幅の最小化』、『潜在時間の最小化』の3つのモードから設定値を選択可能です。
そしてプッシュ配信モードである『帯域幅の最小化』や『潜在時間の最小化』を選択しているときに、ソースコンピューター(ログの収集対象・収集される側)がコレクターサーバー(ログを収集・保持する側)に、何らかの理由。
たとえばUTMやファイアウォールの『アクセス拒否』設定によりアクセスできない場合に、0x80338095エラーが発生するのです。
イベントサブスクリプションの0x80338095エラーの解決方法
イベントサブスクリプションで発生している0x80338095エラーは、以下のような方法で解決できる可能性があるため、対応を検討ください。
ネットワーク関連機材の設定を確認し、アクセス可能なように設定を変更する!
先に書いたとおり、0x80338095エラーは何らかの理由によりソースコンピューターからコレクターサーバーへのアクセス(プッシュ配信)ができない場合に発生します。
そのためUTMやL3スイッチなどのネットワーク機材、ファイアウォールの設定を確認し、『アクセス拒否』設定となっているなどアクセスできない場合には、アクセス可能となるように設定を変更してください。
『イベント配信の最適化』を[帯域幅の最小化]や[潜在期間の最小化]ではなく、[通常]設定に変更する
繰り返しとなりますが、0x80338095エラーはソースコンピューターからコレクターサーバーへのアクセス(プッシュ配信)ができないのが原因です。
そのため『イベント配信の最適化』設定にて、プッシュ配信を使用する[帯域幅の最小化]や[潜在期間の最小化]ではなく、プル配信を使用する[通常]設定に変更することでエラーが解消。
正常に動作するようになるケースもあります。
『イベント配信の最適化設定』の『通常』、『帯域幅の最小化』、『潜在時間の最小化』の3つのモードの違いについては、以下TechNetさんの解説を参考になさってください。
[通常]
このオプションは、イベントの配信が高い信頼性で行われるようにして、帯域幅の節約は試みません。
帯域幅の使用状況を厳しく制御する必要がある場合や、転送されたイベントをできるだけすばやく配信する必要がある場合以外は、これを選択するのが適切です。プル配信モードが使用され、5 つの項目が一度にバッチ処理されます。バッチ タイムアウトは 15 分です。
[帯域幅の最小化]
このオプションは、イベント配信のためのネットワーク帯域幅が厳密に制御されるようにします。
イベントを配信するために作成されるネットワーク接続の頻度を制限する場合に適しています。プッシュ配信モードが使用され、バッチ タイムアウトは 6 時間に設定されます。
また、6 時間のハートビート間隔が使用されます。[潜在期間の最小化]
このオプションは、イベントが最小限の遅れで配信されるようにします。
警告や重要なイベントを収集している場合は、これを選択するのが適切です。プッシュ配信モードが使用され、バッチ タイムアウトは 30 秒間に設定されます。
URLACL(URL 名前空間のアクセス権)の設定を変更する
ソースコンピューターからコレクターサーバーへのアクセス(プッシュ配信)が正常にでき、コレクターサーバーにWindows Server 2012 R2を使っている環境では、Windows PCのイベントログを無料で特定のPCに転送・収集・管理する方法で紹介している手順にしたがって設定を行うことで、『イベント配信の最適化』で[帯域幅の最小化]や[潜在期間の最小化]を選択していても、正常にログの転送・収集・管理ができるはずです。
ところがコレクターサーバーにWindows Server 2016やWindows Server 2019を使っている環境では、手順のとおりに設定を行っても、0x80338095エラーが発生します。
このケースでは、コレクターサーバーのイベントログに、以下のようなエラーログが記録されます。
ソース:Microsoft-Windows-WinRM
イベントID:10129
メッセージの内容:
HTTP.SYS の URL (http://+:5985/wsman/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX) のバインド中にエラーが発生したため、WS-Management クライアントはプッシュされたイベントをリッスンしていません。
ユーザー操作 “netsh http”を使用して、URL (http://+:5985/wsman/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX) の ACL がネットワーク サービスに設定されていることを確認してください。
追加データ HTTP.sys から受信したエラー コードは 5: %%5 です
これはどうしてかと言いますと、URLACL(URL 名前空間のアクセス権)の設定がWindows Server 2012R2と、Windows Server 2016 / 2019では異なり、後者ではWecsvcサービスのアクセスが許可されていないからです。
WindowsのURLACL(URL 名前空間のアクセス権)は、管理者権限でコマンドプロンプトを起動し、以下コマンドを実行することで表示されます。
1 | netsh http show urlacl |
参考:Windows アプリケーションを管理者権限で起動・実行する方法
『netsh http show urlacl』コマンドを実行すると、以下のような結果が複数行表示されるはずです。
その中で、『予約済みURL』が『http://+:5985/wsman/』と『https://+:5986/wsman/』について、Windows Server 2012R2では『NT SERVICE\WinRM』と『NT SERVICE\Wecsvc』が『リッスン:Yes』となっています。
ところがWindows Server 2016やWindows Server 2019では、『NT SERVICE\WinRM』のみ『リッスン:Yes』設定となっているはずです。
つまりイベントサブスクリプションで使用するWecsvcが『リッスン:Yes』設定となっていないために、0x80338095エラーが発生していた、というわけです。
そのため以下コマンドを実行し、Wecsvcが『リッスン:Yes』設定となるように変更を行ってください。
1 2 3 4 | netsh http delete urlacl url=http://+:5985/wsman/ netsh http add urlacl url=http://+:5985/wsman/ sddl=D:(A;;GX;;;S-1-5-80-569256582-2953403351-2909559716-1301513147-412116970)(A;;GX;;;S-1-5-80-4059739203-877974739-1245631912-527174227-2996563517) netsh http delete urlacl url=https://+:5986/wsman/ netsh http add urlacl url=https://+:5986/wsman/ sddl=D:(A;;GX;;;S-1-5-80-569256582-2953403351-2909559716-1301513147-412116970)(A;;GX;;;S-1-5-80-4059739203-877974739-1245631912-527174227-2996563517) |
※上記コマンドはPowerShellで実行すると構文エラーとなるため、管理者権限で起動したコマンドプロンプトを使って実行してください。
尚、この設定方法については、Microsoftさんの資料が公開されておりますので、併せて確認すると良いでしょう。
Microsoft – Events are not forwarded if the collector is running Windows Server
以上、参考になさってくださーい!