如何使用 WMI 監控 IIS 7.5 應用程式集區?

如何使用 WMI 監控 IIS 7.5 應用程式集區?

我目前在 Server 2008 R2 上的負載平衡 IIS 群集 (NLB) 中有一個應用程式。此應用程式利用一些舊的資料庫存取程式碼,這些程式碼有時會失敗,足以停用應用程式集區。

我想放置一個 WMI 事件觀察器來監視應用程式集區狀態的變化(歡迎其他建議),如果應用程式集區進入停止狀態,它將重新啟動應用程式集區。

這是在可以推送新程式碼之前的臨時解決方法,但這必須經過 Dev/QA/UAT 週期。

root\webadministration 命名空間中有一個針對 ApplicationPool 的 WMI 類,但是要獲取狀態,您必須調用該物件上的 GetState 方法,因此我不確定如何使用 WMI 事件來觀察它。

答案1

您可以透過內建事件日誌監控來做到這一點。

如果應用程式集區因快速故障保護而關閉,則系統事件日誌中可能存在下列事件 ID 5002:

“由於為應用程式集區提供服務的進程出現一系列故障,應用程式集區“AppPoolName”會自動停用。”

為自訂事件日誌觸發器建立排程任務。手動 XML 查詢看起來像這樣:

<QueryList>
 <Query Id="0" Path="System">
 <Select Path="System">*[System[Provider[@Name='Microsoft-Windows-WAS'] and (EventID=5002)]] 
 and *[EventData[Data[@Name='AppPoolID'] and (Data='YourAppPoolFriendlyName')]]</Select>
 </Query>
</QueryList>

您的排程任務操作可能是執行一個執行 appcmd 的腳本來重新啟動特定的應用程式集區。

appcmd recycle apppool /?
Recycle application pool

APPCMD recycle APPPOOL <identifier> <-parameter1:value1 ...>

Recycles the specified application pool, recycling its the worker processes.
The exact application pool identifier must be provided and must resolve to an
existing application pool.

Supported parameters:

 identifier (required)

    Application pool name of the application pool to recycle

 /apppool.name

    Application pool name of the application pool to recycle (same as
    identifier)


Examples:

 appcmd recycle apppool "MyAppPool"

    Recycle the application pool "MyAppPool".

如果在同一伺服器上有多個應用程式集區,則可能需要細化 XML 篩選器以指定應用程式集區 ID。以下是事件 XML 文字範例:

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Microsoft-Windows-WAS" Guid="{524B5D04-133C-4A62-8362-64E8EDB9CE40}" EventSourceName="WAS" /> 
  <EventID Qualifiers="49152">5002</EventID> 
  <Version>0</Version> 
  <Level>2</Level> 
  <Task>0</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2012-10-01T19:41:43.000000000Z" /> 
  <EventRecordID>408764</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="0" ThreadID="0" /> 
  <Channel>System</Channel> 
  <Computer>WEBSERVERNAME.company.com</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data Name="AppPoolID">YourAppPoolFriendlyName</Data> 
  <Binary /> 
  </EventData>
  </Event>

有關事件日誌高級過濾的資訊:
https://blogs.technet.com/b/askds/archive/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer.aspx

使用APPCMD回收應用程式集區:
http://technet.microsoft.com/en-us/library/cc770764%28v=ws.10%29.aspx

答案2

僅供參考,如果由於快速故障轉移保護而失敗,您可以停用它,而不是小心翼翼地繞過它:

https://stackoverflow.com/a/4802309/448129

相關內容