Como posso monitorar um pool de aplicativos do IIS 7.5 com o WMI?

3

Atualmente, tenho um aplicativo em um cluster de balanceamento de carga do IIS (NLB) no Server 2008 R2. Esse aplicativo aproveita alguns códigos de acesso a banco de dados herdados que ocasionalmente falham o suficiente para desabilitar o pool de aplicativos.

Gostaria de colocar um observador de eventos do WMI no local para monitorar a alteração no status do pool de aplicativos (outras sugestões serão bem-vindas), que reiniciarão o pool de aplicativos se ele entrar em um estado parado.

Isto é para uma solução temporária até que um novo código possa ser enviado, mas isso tem que passar por um ciclo Dev / QA / UAT.

Existe uma classe WMI para o ApplicationPool no namespace root \ webadministration, no entanto, para obter o status, você precisa chamar o método GetState nesse objeto, portanto, não sei como assistir a isso com um evento WMI.

    
por Steven Murawski 01.10.2012 / 20:29

2 respostas

3

Você pode fazer isso com o monitoramento interno do log de eventos.

Se o pool de aplicativos estiver sendo encerrado devido à proteção rápida contra falhas, provavelmente há um ID de evento 5002 como o seguinte no log de eventos do Sistema:

"Pool de aplicativos 'AppPoolName' está sendo desativado automaticamente devido a uma série de falhas no (s) processo (s) que atende a esse pool de aplicativos."

Crie uma tarefa agendada para um acionador de log de eventos personalizado. Uma consulta XML manual seria parecida com esta:

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

Sua ação de tarefa agendada pode ser executar um script que execute o appcmd para reiniciar o pool de aplicativos 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".

Se você tiver vários pools de aplicativos no mesmo servidor, talvez seja necessário refinar o filtro XML para especificar o ID do pool de aplicativos. Aqui está um exemplo de texto XML de evento:

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

Informações sobre Filtragem Avançada de Log de Eventos:
link

Use o APPCMD para reciclar um pool de aplicativos:
link

    
por 01.10.2012 / 22:00
3

FYI, se estiver falhando por causa da proteção rápida contra failover, você pode desativá-la em vez de andar na ponta dos pés:

link

    
por 14.11.2012 / 19:24