Назад | Перейти на главную страницу

Как я могу контролировать пул приложений IIS 7.5 с помощью WMI?

В настоящее время у меня есть приложение в кластере IIS с балансировкой нагрузки (NLB) на сервере 2008 R2. Это приложение использует устаревший код доступа к базе данных, который иногда дает сбой для отключения пула приложений.

Я хотел бы установить наблюдатель событий WMI для отслеживания изменения статуса пула приложений (другие предложения приветствуются), который перезапустит пул приложений, если он перейдет в остановленное состояние.

Это временный обходной путь до тех пор, пока не будет опубликован новый код, но он должен пройти цикл Dev / QA / UAT.

Существует класс WMI для ApplicationPool в пространстве имен root \ webadministration, однако, чтобы получить статус, вам нужно вызвать метод GetState для этого объекта, поэтому я не уверен, как это наблюдать с помощью события WMI.

К вашему сведению, если он не работает из-за быстрой защиты от сбоев, вы можете отключить это, а не ходить вокруг него на цыпочках:

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

Вы можете сделать это с помощью встроенного мониторинга журнала событий.

Если пул приложений закрывается из-за быстрой защиты от сбоев, вероятно, в журнале системных событий имеется идентификатор события 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, чтобы указать идентификатор пула приложений. Вот пример 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