Просматривая в очередной раз журналы событий на серверах, я наконец решил взяться за массовые ошибки от WSUS, которые у нас возникают чуть ли не на каждом втором сервере. Вот как выглядела эта неприятность:
В массе своей ошибки сообщали о невозможности извлечь информацию из какого-нибудь счётчика сервера WSUS, например :
Log Name: Operations Manager
Source: Health Service Modules
Date: 24.03.2014 15:41:10
Event ID: 10102
Task Category: None
Level: Warning
Keywords: Classic
User: N/A
Computer: sql01.domain.int
Description:
In PerfDataSource, could not resolve counter WSUS: Reporting Web Service, Computer status rollups received, . Module will not be unloaded.One or more workflows were affected by this.
Workflow name: Microsoft.Windows.Server.UpdateServices.2012.Server.PerformanceCollection.
ReportingWebService.Computerstatusrollupsreceived
Instance name: WSUS
Instance ID: {409F1F3C-B8ED-FB6C-42F0-F28F1904E470}
Что в общем-то неудивительно, потому что подобные события регистрировались на серверах, которые к WSUS никакого отношения не имеют. Конечно на них нет таких счётчиков, неоткуда им там взяться. Дальше я решил посмотреть, зачем SCOM пытается вытаскивать с этих серверов счётчики WSUS. Не потому ли, что он принял их за серверы с ролью WSUS? И правда, соответствующий список в консоли SCOM оказался битком набит лишними сервера.
При этом в пакете управления для WSUS 2012 R2 такого безобразия не наблюдалось, там в списке серверов WSUS были только серверы WSUS и ничего лишнего. Дальше дело техники. Явно дело в дискаверах. Дискавер для WSUS 2012 R2 работает корректно, а для WSUS 2012 допускает массу ложных срабатываний. Посмотрим прямо из оперативной консоли, что там внутри дискаверов.
Дискавер для WSUS 2012:
Не всё так сложно, как может показаться на первый взгляд. Дискавер ищет в реестре ключ “SOFTWARE\Microsoft\Update Services\Server\Setup\Version”, и если там значение “4″, то SCOM считает, что на этом сервере проинсталлирована серверная роль WSUS. 4 – это версия WSUS, вероятно.
К сожалению, этот путь и этот ключ есть не только на сервере WSUS, но и на любой машине с оснасткой для управления WSUS. Оснастка эта входит в комплект RSAT (набор оснасток для управления серверными ролями), а этот комплект у нас установлен на всех серверах. Вот дискавер и срабатывает на всех серверах с Windows 2012, принимая их за WSUS. Дальше SCOM пытается опрашивать уникальные для WSUS счётчики, что и приводит к ошибкам в журналах событий.
Следующий шаг – посмотреть дискавер для WSUS 2012 R2 и понять, почему, там нет ложных срабатываний.
Тут логика чуть посложнее.
Дискавер считает, что на сервере проинсталлирован WSUS если одновременно выполняются 2 условия:
- ключ по пути “SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion” равен 6.3 (проверка, что Windows Server версии 2012 R2),
- ключ по пути “SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services\UpdateServices-Services” равен 2 (проверка, что установлена серверная роль WSUS).
Чтобы проверить справедливость пункта 2 для WSUS 2012 поищем эти ключи реестра на сервере, где установлена только оснастка управления WSUS:
Такого ключа нет.
А теперь посмотрим на сервере WSUS:
Ключ есть.
Итак, остались сущие мелочи, скопировать работющую логику из дискавера WSUS 2012 R2 в дискавер WSUS 2012. Для начала экспортируем оба пакета управления. Для этого из консоли Operations Management Shell выполняем команду:
Get-SCManagementPack | where {$_.name -like “*UpdateServices*”} | Export-SCManagementPack -path “c:\temp\”
В папке c:\temp (её нужно предварительно создать) у нас должны появиться 2 файла:
- Microsoft.Windows.Server.UpdateServices.2012.xml
- Microsoft.Windows.Server.UpdateServices.2012.R2.xml
Наша задача подсмотреть во втором файле дополнительное условие дискавера и внести его в первый файл. Открываем файл Microsoft.Windows.Server.UpdateServices.2012.xml, находим там нужный дискавер и для начала копируем в раздел “RegistryAttributeDefinition” опрос ключа реестра “SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services\UpdateServices-Services” из аналогичного места в файле Microsoft.Windows.Server.UpdateServices.2012.R2.xml.
Было:
<AttributeType>1</AttributeType>
</RegistryAttributeDefinition>
<RegistryAttributeDefinition>
<AttributeName>ContentDir</AttributeName>
<Path>SOFTWARE\Microsoft\Update Services\Server\Setup\ContentDir</Path>
<PathType>1</PathType>
<AttributeType>1</AttributeType>
</RegistryAttributeDefinition>
</RegistryAttributeDefinitions>
Стало (добавленный код выделен жирным):
<AttributeType>1</AttributeType>
</RegistryAttributeDefinition>
<RegistryAttributeDefinition>
<AttributeName>ContentDir</AttributeName>
<Path>SOFTWARE\Microsoft\Update Services\Server\Setup\ContentDir</Path>
<PathType>1</PathType>
<AttributeType>1</AttributeType>
</RegistryAttributeDefinition>
<RegistryAttributeDefinition>
<AttributeName>WsusRole</AttributeName>
<Path>SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services\UpdateServices-Services</Path>
<PathType>1</PathType>
<AttributeType>2</AttributeType>
</RegistryAttributeDefinition>
</RegistryAttributeDefinitions>
Теперь меняем условие с проверки одного атрибута на проверку двух атрибутов.
Было:
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Values/Version</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>4</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
Стало (добавленный код выделен жирным):
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Values/Version</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>4</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>Values/WsusRole</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>2</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
Сохраняем изменения в файл Microsoft.Windows.Server.UpdateServices.2012.xml . Удаляем из SCOM пакет управления “Microsoft Windows Server Update Services 2012″. Импортируем наш изменённый xml и ждём пока отработает дискавер с исправленной логикой.
Ура! В списке серверов WSUS ничего лишнего:
Нужно ли говорить, что многочисленные ошибки из журналов событий тоже исчезли.
Для самых ленивых выкладываю готовый к употреблению исправленный пакет управления в xml.
Microsoft.Windows.Server.UpdateServices.2012
Оставить комментарий или два