¿Cómo puedo monitorear un grupo de aplicaciones IIS 7.5 con WMI?

¿Cómo puedo monitorear un grupo de aplicaciones IIS 7.5 con WMI?

Actualmente tengo una aplicación en un clúster IIS de carga equilibrada (NLB) en Server 2008 R2. Esta aplicación aprovecha algún código de acceso a la base de datos heredada que ocasionalmente falla lo suficiente como para deshabilitar el grupo de aplicaciones.

Me gustaría implementar un observador de eventos WMI para monitorear el cambio en el estado del grupo de aplicaciones (se aceptan otras sugerencias), que reiniciaría el grupo de aplicaciones si entra en estado detenido.

Esto es una solución temporal hasta que se pueda enviar código nuevo, pero tiene que pasar por un ciclo de desarrollo/calidad/UAT.

Hay una clase WMI para ApplicationPool en el espacio de nombres raíz\webadministration; sin embargo, para obtener el estado, debe llamar al método GetState en ese objeto, por lo que no estoy seguro de cómo verlo con un evento WMI.

Respuesta1

Es posible que pueda hacer esto con la supervisión integrada del registro de eventos.

Si el grupo de aplicaciones se cierra debido a la protección contra fallas rápidas, probablemente haya un ID de evento 5002 como el siguiente en el registro de eventos del sistema:

"El grupo de aplicaciones 'AppPoolName' se está deshabilitando automáticamente debido a una serie de fallas en los procesos que sirven a ese grupo de aplicaciones".

Cree una tarea programada para un desencadenador de registro de eventos personalizado. Una consulta XML manual se vería así:

<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>

La acción de su tarea programada podría ser ejecutar un script que ejecute appcmd para reiniciar el grupo de aplicaciones específico.

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".

Si tiene varios grupos de aplicaciones en el mismo servidor, es posible que deba refinar el filtro XML para especificar la identificación del grupo de aplicaciones. Aquí hay un texto XML de evento de muestra:

- <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>

Información sobre el filtrado avanzado del registro de eventos:
https://blogs.technet.com/b/askds/archive/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer.aspx

Utilice APPCMD para reciclar un grupo de aplicaciones:
http://technet.microsoft.com/en-us/library/cc770764%28v=ws.10%29.aspx

Respuesta2

Para su información, si falla debido a la protección de conmutación por error rápida, puede desactivarla en lugar de andar de puntillas:

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

información relacionada