共用方式為


擴充 ASP.NET 健康監視事件

更新:2007 年 11 月

您可以執行下列工作來擴充 ASP.NET 健康監視功能。

緩衝 ASP.NET 健康監視事件

您可以設定 SQL 和郵件健康監視事件提供者 (SqlWebEventProviderSimpleMailWebEventProviderTemplatedMailWebEventProvider) 以使用事件緩衝。這樣可以降低對經常傳送電子郵件訊息,或經常執行 SQL 伺服器插入的應用程式效能之影響。緩衝健康監視事件也可以保護 SMTP 伺服器和 SQL Server 不會因為高事件量而負載過重。

SQL 事件提供者緩衝

如果您啟用 SQL 事件提供者的緩衝,在將事件資訊以批次方式插入資料庫之前,提供者便會根據指定的緩衝模式緩衝事件資訊。

根據預設,SqlWebEventProvider 提供者不會設定為使用緩衝。每次引發事件時,其資訊就會立即插入資料庫中。您可以在指定 SQL 提供者之 Web.config 檔的 providers 項目中啟用緩衝以便覆寫這項預設值。您可以藉由將 add 項目的 buffer 屬性設定為 true 以進行這個動作。如果您設定自己的 SQL 提供者 (也就是說不使用 SqlWebEventProvider),並且如果不指定 buffer 屬性的值,則預設值為 true。

您可以選取預先定義的緩衝模式自訂緩衝行為。此外,您可以將自訂項目加入至 bufferModes 集合內。每個項目會定義緩衝大小以及清除緩衝頻率等屬性。接下來,就可以將提供者設定為使用其中一個已定義的緩衝模式。

下列程式碼範例示範啟用緩衝之 SQL 事件提供者的組態設定。

注意事項:

AnalysisbufferModes 項目已經在根目錄 Web.config 檔中設定,不需要在應用程式層級 Web.config 檔中再次宣告。SqlWebEventProviderproviders 項目也已經在根目錄 Web.config 檔中設定,但是 buffer 屬性會設定為 false,並且 bufferMode 屬性設定為 Notification。因此,顯示在範例中的 providers 項目必須在應用程式層級的 Web.config 檔案中宣告。您同時需要使用 clearremove 項目,來移除 SqlWebEventProvider 提供者的較高階組態。

在這個範例中,當啟用緩衝時 SQL 事件提供者設定為使用 Analysis 緩衝模式 (定義在 bufferModes 項目中)。在這個模式中,提供者每 5 分鐘會清除事件資訊。每次告知會清除最多 100 個事件,並且在事件頻率突然上升時能夠緩衝最多 1000 個事件。提供者會確保每分鐘不傳送一次以上的事件。

<healthMonitoring>
  <providers>
    <clear/>
    <add 
      ConnectionStringName="LocalSqlServer" 
      maxEventDetailsLength="1073741823"
      buffer="true" 
      bufferMode="Analysis" 
      name="SqlWebEventProvider"
      type="System.Web.Management.SqlWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 
    />
  </providers>
  <bufferModes>
    <add 
      name="Analysis" 
      maxBufferSize="1000" 
      maxFlushSize="100"
      urgentFlushThreshold="100" 
      regularFlushInterval="00:05:00"
      urgentFlushInterval="00:01:00" 
      maxBufferThreads="1"
    />
  </bufferModes>
</healthMonitoring>

電子郵件事件提供者緩衝

如果啟用電子郵件事件提供者的緩衝功能,提供者會在傳送電子郵件訊息當做事件告知之前緩衝事件。如果您設定了電子郵件事件提供者,但未指定電子郵件事件提供者的 add 項目 buffer 屬性的值,則預設為 true。您可以將 buffer 屬性設定為 false 以停用緩衝。

您可以選取預先定義的緩衝模式自訂緩衝行為。此外,您可以將自訂項目加入至 bufferModes 集合內。每個項目會定義緩衝大小以及清除緩衝頻率等屬性。接下來,就可以將提供者設定為使用其中一個已定義的緩衝模式。建議您使用 CriticalNotification 模式。

下列程式碼範例示範電子郵件事件提供者的組態設定,其中停用 SimpleMailWebEventProvider 類別的緩衝而啟用 TemplatedMailWebEventProvider 類別的緩衝。TemplatedMailWebEventProvider 提供者設定使用已經定義在根目錄 Web.config 檔中的 CriticalNotification 緩衝模式。在 CriticalNotification 模式中,提供者會在收到事件時,立即嘗試清除所有的事件資訊。但是,為了避免在電子郵件伺器上造成過度負載,每分鐘的清除嘗試動作只會成功一次。訊息將是可以管理的大小。資訊最多包含 20 則事件。

如果健康監視系統接收到的事件資訊超過允許的最大值,當產生新事件時就會開始拋棄最舊的事件。健康監視系統會在緩衝開始滿溢時,增加清除的頻率來嘗試避免拋棄事件。但是,它不會嘗試針對已經拋棄的事件傳送任何資訊 (它不會在拋棄事件時,將告知包含在下次清除作業)。如果提供者目前負載過重,最多在五分鐘內就會顯示較新的事件 (假設這些事件並未因為緩衝區溢滿而拋棄)。

<healthMonitoring>
  <providers>
    <!-- mail provider with attributes that are always relevant -->
    <add 
      name="SimpleMailWebEventProvider" 
      type="System.Web.Management.SimpleMailWebEventProvider"
      to="SystemAdministrator@contoso.com"
      from="HealthMonitoring@contoso.com"
      buffer="false" 
    />
    <!-- mail provider with attributes that are relevant only 
         when buffering is enabled -->
    <add 
      name="SampleTemplatedMailWebEventProvider" 
      type="System.Web.Management.TemplatedMailWebEventProvider"
      to="SystemAdministrator@contoso.com" 
      from="HealthMonitoring@contoso.com" 
      buffer="true" 
      bufferMode="Critical Notification"
      template="Template.aspx" />
  </providers>
  <bufferModes>
    <add 
      name="Critical Notification" 
      maxBufferSize="100" maxFlushSize="20"
      urgentFlushThreshold="1" 
      regularFlushInterval="Infinite" 
      urgentFlushInterval="00:01:00"
      maxBufferThreads="1"
    />
  </bufferModes> 
</healthMonitoring>

若要讓範例能夠運作,您必須如下列範例所示,在組態檔中設定 SMTP 伺服器。

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network">
      <network 
        defaultCredentials="true" 
        host="127.0.0.1" 
        port="25" 
        username="username" 
        password="password" />
    </smtp>
  </mailSettings>
</system.net>

如需詳細資訊,請參閱 <mailSettings> 項目 (網路設定)

注意事項:

將明文密碼儲存在組態檔中是有安全性風險的。如果您將認證放在組態檔中,就應該使用受保護的組態來加密 <mailSettings> 組態項目的內容。如需詳細資訊,請參閱使用受保護的組態加密組態資訊

緩衝模式設定

您可以在 bufferModes 項目中設定 add 項目的下列屬性以指定緩衝行為:

  • regularFlushInterval 規則性事件資訊清除間隔

  • urgentFlushThreshold 應該在清除緩衝之前就先緩衝處理其資訊的事件數量。

下列設定指定提供者對事件接收者做出的保證:

  • maxBufferSize 緩衝將保留其資訊的最大事件數目。如果緩衝中的事件數目超過這個值,舊的事件就會拋棄

  • maxFlushSize 提供者一次所清除的事件資訊最大數目

  • urgentFlushInterval 在執行其他緊急清除之前,提供者所等待的最短時間。如果從上一次清除後就沒有傳遞 urgentFlushInterval 屬性表示的時間,但是緩衝已經滿溢,則會從緩衝內捨棄較舊事件的資訊。提供者會持續追蹤已捨棄事件的數量,並且在下一次事件告知中包含警告訊息。

使用 WMI 來追蹤 ASP.NET 健康監視事件

監視 ASP.NET 健康事件的一種方法是使用 Windows Management Instrumentation (WMI) 事件提供者 (WmiWebEventProvider 類別)。這個提供者會將 Web 健康監視事件 (Web 事件) 轉換為 WMI 事件。WMI 提供一種標準物件模型,您想要監視的實體 (Entity) 在其中可以表示為物件。這些實體代表電腦、網路卡、印表機、軟體應用程式等。這些實體會對應至 WMI 物件模型,因此可以由自訂應用程式進行監視。下圖所示的是 ASP.NET Web 事件、WMI 和接聽 WMI 事件之消費者應用程式之間的關聯性。

ASP.NET 與 WMI 之間的關聯性

健康事件與 WMI 之間的連接

ASP.NET 健康監視提供了健康事件與 WMI 之間連接的基礎結構。執行的方式是將這些事件對應至 WMI 類別,以便可以將它們視為 WMI 物件。它還提供處理健康事件和將它們分派至 WMI 系統的支援。如需如何將 ASP.NET 事件對應至 WMI 的詳細資訊,請參閱逐步解說:在 ASP.NET 健康監視中接聽 WMI 事件。如需 WMI 詳細資訊,請參閱 MSDN 網站上的 Windows Management Instrumentation (英文)。

下列清單描述使用 WMI 監視健康事件所需的步驟:

  1. 定義 Web 事件類別與 WMI 物件之間的對應。每個標準 Web 事件類別都已為您完成這個步驟。這些對應包含在 ASP.NET 的 Managed 物件格式 (MOF) 檔案 (%SystemRoot%\Microsoft.NET\Framework\<version>\aspnet.mof 檔案) 中。

    注意事項:

    所有自訂事件都會對應至 WMI 中的基底事件型別。但您無法將自訂 ASP.NET 健康監視事件對應至任意 WMI 事件。

    例如,下列程式碼顯示對應至 WebHeartbeatEvent 型別之 WMI 類別的定義。

    class HeartbeatEvent : ManagementEvent {
        /*
         * ProcessStatistics    
         */
        DATETIME    ProcessStartTime;
        sint32      ThreadCount;
        sint64      WorkingSet;
        sint64      PeakWorkingSet;
        sint64      ManagedHeapSize;
        sint32      AppdomainCount;    
        sint32      RequestsExecuting;
        sint32      RequestsQueued;
        sint32      RequestsRejected;
    }; 
    

    如需 MOF 檔的詳細資訊,請參閱 MSDN 之 WMI SDK 中的 Managed 物件格式 (英文)。

  2. 定義將處理事件的 ASP.NET 健康監視提供者。

    WmiWebEventProvider 類別是標準提供者。根據預設,已經透過下列項目於根目錄 Web.config 檔案的 healthMonitoring 區段中設定此項目。

    <providers>
      <add 
        name="WmiWebEventProvider" 
        type="System.Web.Management.WmiWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 
      />
    </providers>
    
  3. 在組態檔的 healthMonitoring 區段中輸入適當的設定,以在 Web 事件類別與 WMI 事件提供者 (WmiWebEventProvider 類別) 之間建立關聯。

    根據預設,WMI 事件提供者沒有訂閱任何 Web 事件。您可以在應用程式層級的 Web.config 檔中使用下列項目,讓 WMI 事件提供者訂閱所有 Web 事件。根據預設,會於根目錄 Web.config 檔案的 eventMappings 項目中設定 All Events 事件類型。它會對應至 WebBaseEvent 類別。

    <rules>
      <add 
        name="Testing Wmi"
        eventName="All Events" 
        provider="WmiWebEventProvider" 
        profile="Critical"
      />
    </rules>
    
  4. 建立接聽 WMI 事件的應用程式,或使用協力廠商應用程式。

    逐步解說:在 ASP.NET 健康監視中接聽 WMI 事件中的程式碼範例會建立主控台應用程式,該應用程式會在引發 Web 事件時顯示事件資訊。

自訂 WMI 健康事件基礎結構

一旦發生 Web 事件,ASP.NET 健康監視就會將事件分派至 WmiWebEventProvider 物件。提供者物件會根據相關的 MOF 類別定義來處理事件並填入適當的資料。接著,提供者會透過對 Unmanaged 程式碼的呼叫,將此資料分派至 WMI 系統。

將 Web 事件傳送至 WMI 的唯一自訂選項是建立自訂應用程式,並讓該應用程式在 ASP.NET 健康監視事件做為 WMI 事件發佈後使用它們。在這種情況下,需要進行的唯一組態變更是設定新的 rules 項目,如先前所示。應用程式會以作業系統發佈的 WMI 事件形式接聽 ASP.NET 健康事件。如需詳細資訊,請參閱逐步解說:在 ASP.NET 健康監視中接聽 WMI 事件

注意事項:

您無法擴充 WmiWebEventProvider 類別。您可以擴充的事件提供者類別只有 WebEventProviderBufferedWebEventProvider 類別。

實作自訂 ASP.NET 健康監視事件和提供者

根據預設,某些事件已經在效能計數器或事件記錄檔中加以擷取,或是傳送至 ASP.NET 追蹤系統。您可以藉由將其他事件對應至現有提供者加以啟用。如需詳細資訊,請參閱 ASP.NET 健康監視事件概觀中的<使用事件提供者耗用 Web 事件>一節。

如果沒有任何現有的 Web 事件或提供者類別能夠滿足需求,您可以將其擴充。下表列出您可自訂 ASP.NET 健康監視的方式。

工作

實作

範例

建立自訂 Web 事件類別。

建立繼承自 WebBaseEvent 的類別,然後實作 Raise 虛擬方法。若要將自訂資料加入自訂事件,請覆寫 FormatCustomEventDetails 方法。

HOW TO:實作和引發自訂 ASP.NET 健康監視事件

建立自訂事件提供者以處理內建或自訂 Web 事件。

建立繼承自 WebEventProvider 類別 (或衍生類別之一) 的類別。如果提供者會執行記錄,請同時繼承自 WebEventFormatter 類別。

HOW TO:實作健康監視自訂提供者範例

請參閱

工作

HOW TO:鎖定 ASP.NET 組態設定

概念

ASP.NET 健康監視事件概觀

ASP.NET 組態概觀

參考

healthMonitoring 的 bufferModes 項目 (ASP.NET 設定結構描述)

healthMonitoring 的 providers 項目 (ASP.NET 設定結構描述)