ASP.NET 2.0 は、フル機能のアプリケーション監視とヘルス監視も提供します。このシステムは、完全に拡張可能なイベント モデルと、さまざまな受信者にイベントを送信できるイベント エンジンで構成されています。たとえば、サーバーが実行中であることと使用可能なメモリの量を示す電子メールを毎日送信するように ASP.NET アプリケーションを構成できます。同様に、未処理の例外にリンクされたヘルス イベントを作成できます。例外の内容、リクエスト ヘッダー、日時はすべてエラー ログ データベースに送信できます。
ASP.NET 2.0 には、ハートビート、アプリケーション存続期間イベント (開始/停止/コンパイル)、エラー トラップ イベント (未処理の例外) などの組み込みイベントが含まれています。ただし、これらの基本クラスの上に簡単に構築して、アプリケーションから独自のイベントを再作成して発生させることができます。たとえば、100 人目のユーザーが特定のリンクをクリックしたときに記録するカスタム イベントを作成できます。
ASP.NET 2.0 ヘルス監視システムの非常に強力な機能は、web.config および machine.config ファイルを通じて完全に構成できることです。通常の XML を使用して、イベントを定義し、プロバイダー (イベント レシーバー) を定義し、特定のイベントを特定のプロバイダーに送信できます。
イベントの作成 イベントは例外と構造が似ています。つまり、イベント クラス自体はメッセージ コンテナとしての機能以外はほとんど機能を持ちません。正常性の監視に関しては、すべてのイベントは System.Web.Management.WebBaseEvent を継承します。ただし、HTTP 要求データの収集や例外の処理など、特殊な目的に使用される高レベルの基本クラスから派生することもできます。
リスト 4. System を使用したカスタム イベント
。
System.Web.Management の
パブリック クラス CustomEvent を使用します。
{
public const int EventCode = WebEventCodes.WebExtendedBase + 10;
public MyEvent(文字列メッセージ、オブジェクトeventSource)
:base(メッセージ、イベントソース、イベントコード)
{ }
カスタム イベントの作成で最も重要な部分は、一意の EventCode を提供することです
。
すべての組み込みイベント コードは WebEventCodes 列挙内にあります。カスタム イベントには、WebEventCodes.WebExtendedBase + 1 から始まる番号が必要です。それ以外で、カスタム イベントを作成する際の唯一の一般的なタスクは、イベントを正しく初期化することです。
イベントの使用 組み込みイベントは自動的に起動されますが、アプリケーションにコードを追加すると、いつでもカスタム イベントを起動できます。
リスト 5. イベントの発生
<script runat="server">
void Page_Load(オブジェクト送信者, EventArgs e)
{ // カスタム イベントを発生させます MyEvent myEvent =
new MyEvent("webevent サンプル ページを読み込み中", this);
</script>
ASP.NET ページからイベントを発生させる場合は、イベントの新しいインスタンスを作成し、Raise() メソッドを実行するだけです。 Raise() メソッドは、イベント インスタンスをヘルス モニタリング エンジンに自動的に配信します。次に、エンジンはイベントをプロファイルとプロバイダーにマッピングし、イベントを正しいプロバイダーに渡します。プロバイダーは最終的にイベントを正しい受信者に配信します。
ヘルス モニタリングの構成 ヘルス モニタリングは、machine.Config または Web.Config ファイルの新しい領域で構成されます。このセクションを構成して、アプリケーションのステータスを定期的に報告する Web ハートビートをセットアップできます。イベントを生成し、そのイベントをさまざまなプロバイダーを通じて渡すようにアプリケーションを構成することもできます。
イベントを設定するには、イベント マッピング領域内の各イベントを識別する必要があります。イベントは、一意の名前と完全なタイプによって識別されます。イベント名はルール領域のリンクとして使用されます。
リスト 6. イベント マッピング領域
<!-- イベント マッピングは監視されるイベントを定義します -->
<イベントマッピング>
<add name="サンプルWebリクエスト"
type="Samples.AspNet.SampleWebRequestEvent, SampleWebRequestEvent,
バージョン=0.0.0.0、カルチャー=中立、PublicKeyToken=f0c63b9a560d5e5a"/>
</eventMappings>
ASP.NET 2.0 には、次の名前で構成されたいくつかの組み込みイベントが付属しています。
• すべてのイベント。すべてのイベント名は WebBaseEvent をキャプチャします。このイベント クラスは、ヘルス モニタリング システムによってキャプチャされるすべてのイベントを幅広く網羅したものです。
• 心拍。ハートビート イベントは、WebHeartBeatEvent を使用して、Web アプリケーションのステータスに関する定期的な通知を提供します。
• アプリケーションのライフタイム イベント。アプリケーションの存続期間イベントには、アプリケーションの開始と停止、およびアプリケーションの一部または全体の再コンパイルが含まれます。これらのイベントは WebApplicationLifetimeEvent に基づいており、ライフタイム イベントが発生したときに日付、時刻、および現在のステータスを報告します。
• すべてのエラー。 [すべてのエラー] カテゴリでは、システムによって検出された異常またはエラーが収集されます。これらのイベントは WebBaseErrorEvent に基づいています。
• インフラストラクチャのエラー。 WebErrorEvent を使用して、ASP.NET ランタイムまたは IIS に関連するエラーを捕捉します。これらのイベントはすべてのエラー カテゴリのサブクラスであり、主にアプリケーション開発者ではなくシステム管理者に関係します。
• リクエスト処理エラー。リクエスト中にエラーや例外が発生すると、WebRequestErrorEvent がトリガーされます。このイベントは、受信リクエストとリクエストの処理に関連するエラーをログに記録します。リクエスト処理エラーも、すべてのエラー カテゴリのサブセットです。
• すべてのレビュー。ヘルス監視システムを使用して、WebAuditEvents を通じて監査を試みることができます。このイベントは、Web アプリケーション内のアクティブ ユーザーのアクションを自動的に記録します。偽装を使用している場合、イベントを監査すると、アプリケーションを誰が使用しているか、またどのように使用されているかを追跡するのに役立ちます。
• 失敗の監査。 WebFailureAuditEvent は、ユーザーが無効なユーザー名またはパスワードを使用して Web サイトにログインしようとしたときにトリガーされる特別な監査イベント タイプです。このイベントは、指定されたリソースに対してユーザーが認証できない場合にも発生します。
• レビューが成功した。 WebSuccessAuditEvent は、ユーザーが認証するか、監査ログを必要とするその他のアクションを実行するたびに発生する失敗イベントに相当します。
カスタム イベントは簡単に作成できますが、イベントを発生させるコードをアプリケーションに追加する必要があります。
プロバイダーの構成 各プロバイダーは構成ファイルに登録する必要があります。プロバイダーを登録するには、アプリケーションの一意の名前とタイプが必要です。この型には、実際のプロバイダー クラスの完全な厳密な名前が含まれます。プロバイダーの名前は、ルール領域のリンクとして使用されます。
リスト 7. プロバイダー
<healthMonitoring Enabled="true" heartBeatInterval="0">
<!-- プロバイダーは、正常性イベントを WMI や SMTP 電子メールなどのさまざまなターゲットにリンクします -->
<プロバイダー>
<add name="WmiEventProvider" type="System.Web.Management.WebWmiEventProvider,
System.Web,Version=1.2.3400.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
ASP.NET 2.0 には、WMI、Windows イベント モニター、SMTP 電子メール、および SQL Server データベース用のプロバイダーが付属しています。正しい基本クラスを拡張することで、他のイベント レシーバーに接続するためのカスタム プロバイダーを作成できます。
イベントをプロバイダーにマッピングする
ヘルス モニタリングの構成の最後のステップは、ルールを使用してイベントをプロバイダーに接続することです。ルールは、適切なイベント名、イベント クラス、プロバイダー、およびイベント プロファイルまたはカテゴリ間のリンクを提供します。ルールを使用して、特定のイベントをトリガーする最小時間間隔を定義することもできます。
リスト 8. ルール
<!-- ルールはイベントをプロバイダーとプロファイルにリンクし、イベント チェックの間隔を定義します -->
<ルール>
<add name="カスタム データベース イベント"eventName="CustomDBEvents"
Provider="WmiEventProvider" profile="データベース" minInterval="00:01:00" />
<add name="標準 Web リクエスト"eventName="すべてのイベント"
Provider="SqlEventProvider" profile="Default" minInterval="00:01:00" /> </rules>
</健康監視>
ルールは、さまざまなプロパティによって構成されたいくつかの異なるタスクを実行します。
• 名前。ルール名は、イベントが受信者に送信されるときに表示されるフレンドリ名です。
• イベント名。 eventName は、ゾーン内で構成されたイベントにマップされます。
• プロバイダー。プロバイダーは、ゾーン内で構成されたプロバイダーへのリンクです。このルールに一致するイベントは、このプロバイダーを介して、このプロバイダーがサポートするターゲットに配信されます。たとえば、System.Web.Management.SqlWebEventProvider は、イベントを SQL Server データベースに自動的に書き込みます。
• プロフィール。さまざまなプロバイダーが、イベントを表示するためのフィルターとしてプロファイル プロパティを使用します。たとえば、電子メール プロバイダーは、「緊急」プロファイルを持つイベントに対して即時メッセージを送信することもできますが、その日の「定型」プロファイル イベントをまとめた電子メールのみを毎日送信することもできます。
• 最小間隔。ハートビートなどの一部のイベントは、可能な限り短い時間間隔内で起動する必要があります。このプロパティを使用して、最小イベント間隔を設定できます。
この構成領域では、さまざまな健康関連イベントを設定し、イベントをさまざまなプロバイダーにマッピングできます。たとえば、10 分ごとに WMI イベントを送信するハートビートを設定できます。同様に、キャッチされなかった例外について電子メール アラートを設定できます。
関連記事:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.net/dshpsky/archive/2006/06/18/810893.aspx