Uncategorized

Windows Server AppFabric ホストサービス (Dublin) のイベントが収集されない場合のノウハウ

こんにちは。

実は、Tech Ed Japan 2010 に向けて今さら残りのデモを作りはじめたのですが、ここで、つい先日まで元気よく動いていた Dublin の監視イベント (Monitoring Event) が収集されないというトラブルにハマり、半日近くを費やしてしまいました。。。(あらかじめ作成するデモは決めていたので、甘く見すぎていました。。。次回からはもっと早めに準備します。泣)

いくつか確認ポイントを記載しますので、同じ現象に遭遇された方は、以下のメモをご活用ください。(Tech Ed 当日はもっと話したいことがあるので、ここまで細かい話はしないと思います。)
なお、Windows Server AppFabric (Dublin) がイベントを収集するメカニズムに沿って、順に説明していきます。

  • まず最初に、こちら にも記載したように、AppFabric イベント コレクション サービス (Event Collector Service) が動いていることを確認してください。
    Tech Ed でメカニズムを説明しますが、このサービスが ETW のイベント収集をおこない、データベース (SQL Server) に書き込みます。
  • つぎに、このサービスがエラーを出していないかイベントログ (eventvwr) で確認してください。
    ありがちなケースとしては、このサービスのアカウントがデータベースへの権限を持っていないという場合です。この場合、[AppFabric の構成] を使って再度サービスのアカウントを構成しなおすか、データベース初期化の際に権限付与するグループに、このアカウントを設定しておいてください。
    なお、私の環境だけかもしれませんが、マシン起動時のみ、毎回、「provider: SQL Network Interfaces, error: 26」というエラーが出るようですが、サービスを再起動して同じエラーが出ないなら、ちゃんとデータベースに接続できています。(ここが原因だと勘違いし、随分と時間を費やしてしまいました。。。) AppFabric イベント コレクション サービスは、 ADO.NET を使って監視データベースに接続しています。(これらは、%windir%\system32\AppFabric に存在する .NET のアプリケーションです。)
  • つぎに、収集されたイベントは、いったん、監視データベース (SQL Server 上のデータベース) の ASStagingTable テーブルに保存されます。IIS の AppFabric ダッシュボードに表示されず、ここにデータが残っている場合は、SQL Agent、もしくは Service Broker (SQL Server Express の場合) がちゃんと動作していないということですので、データベースのプロパティ (SQL Server Management Studio など) で Broker が有効になっているか確認してください。
    (なお、データベースに存在する ASImportEvents ストアドプロシージャを実行すると、ASStagingTable のデータが ASWcfEventsTable, ASEventSourcesTable などのテーブルに配信され、IIS の AppFabric ダッシュボードに表示されます。)
  • つぎに、ASJobsTable テーブルを確認して、Service Broker のジョブが最後に実行された時間が記録されているので確認してください。この時間 (SQL Server Management Studio で見ると GMT で表示されていると思います) が、かなり以前で止まっている場合、どこかで Service Broker の実行権限などに問題が生じ、ジョブが実行できないということです。
    この場合、申し訳ありませんが、いったん、監視データベースの初期化を適切なユーザー(Windows アカウント)でやりなおしたほうが良いでしょう。(初期化の際に、ログインしている Windows アカウントでこのジョブの実行権限などを設定するためです。特に、ドメインユーザーでログインして設定してしまった場合には要注意です。)
    ただし、[AppFabric の構成] 画面で初期化しなおしても、既にそのデータベースが初期化済みの場合には、データベースのセキュリティ (グループ、権限) 設定などしかおこなわないので、下記の通り、PowerShell のコマンドを使っていったんデータベースを削除して、再初期化します。(下記のインスタンス名、データベース名などは、皆さんの環境にあわせて適宜変更しておいてください。なお、以下では、同時に、永続化データベースも初期化しています。)

    $ConfirmPreference = "None"Remove-ASPersistenceSqlDatabase -Force -Server ".sqlexpress" -Database "ApplicationServerExtensions"Remove-ASMonitoringSqlDatabase -Database "ApplicationServerExtensions" -Server ".sqlexpress"Initialize-ASMonitoringSqlDatabase -Admins machinenameAS_Administrators -Readers machinenameAS_Observers -Writers machinenameAS_Administrators -Database "ApplicationServerExtensions" -Server ".sqlexpress"Initialize-ASPersistenceSqlDatabase -Admins machinenameAS_Administrators -Readers machinenameAS_Observers -Users "BUILTINIIS_IUSRS" -Database "ApplicationServerExtensions" -Server ".sqlexpress"
  • データが ASWcfEventsTable, ASEventSourcesTable などのテーブルにちゃんと存在するにも関わらず、IIS の AppFabric ダッシュボードに表示されない場合は、構成 (.config) の不備ということになります。既定の構成は、ルートの Web.config (%windir%\Microsoft\.NETFramework64\[バージョン番号(v4.0)]\Config\web.config) に記載されているので、ここのデータベース接続文字列などが間違っていないか確認してください。
    なお、監視データをいったんクリアして確認したい場合 (データが溜まってきて確認しづらい場合) には、PowerShell で以下の通り実行すると良いでしょう。

     Clear-ASMonitoringSqlDatabase -Database "ApplicationServerExtensions" -Server ".sqlexpress"

    (データベースとアプリケーションの構成詳細については、Tech Ed で、バッチリ説明します。)

理由は Tech Ed で説明しますが、Dublin は、実用的なワークフローサービスを運用する上ではほぼ必須の機能と言っても過言ではありません。皆さんもきっと、この情報が必要になるときが来るのではないか、と。。。(そのときのために、メモしておきました。)

Categories: Uncategorized

Tagged as: ,

Leave a Reply