Сегодня мы продолжим доводить до ума пакет управления Windows Server DHCP Management Pack for System Center Operations Manager 2007. В прошлой серии мы выяснили, что для устранения ошибок в логах и логике работы мониторинга нужно серьёзно потрудиться.

Фактически у нас есть правила и мониторы, которые применяются на всё, а должны применяться выборочно:

  1. на Windows Server 2003, 2008, 2008R2,
  2. только на Windows Server 2008 и 2008 R2,
  3. только на Windows Server 2008,
  4. только на Windows Server 2008 R2.

Значит, нам нужно либо разбить пакет управления на 3 разных (по одному для каждой операционной системы), либо нам придётся делать три класса в рамках одного пакета управления. Если мы пойдём первым путём, то сильно увеличим количество папок в консоли оператора, которых и там не мало, так что будем хитрить с классами. К тому же, это будет интересно. Для правильного нацеливания правил и мониторов и минимизации работ, нам понадобится 4 класса.

Старшим классом, на который останутся нацелены большинство правил и мониторов мы оставим класс Microsoft.Windows.2008R2.DHCP.Server.Role, из него мы отфильтруем лишние операционки: 2012 и 2012R2 – они нам не нужны. На этот класс мы нацелим правила и мониторы, которые могут отрабатывать на всех ОС: Windows Server 2003, 2008 и 2008R2

С этим классом мы свяжем отношениями hosted 2 новых класса:

  • Microsoft.Windows.2008R2.DHCP.Server.Role.2008and2008R2Only – сюда мы поместим DHCP серверы на Windows Server 2008 и 2008 R2,
  • Microsoft.Windows.2008R2.DHCP.Server.Role.2008R2Only – сюда мы поместим DHCP серверы только на Windows Server 2008 R2.

Предварительный план работ такой:

  1. Изменить дискавер класса Microsoft.Windows.2008R2.DHCP.Server.Role, чтобы он не обнаруживал DHCP на Windows Server 2012/2012R2
  2. Добавить ещё один 2 класса, связанные отношениями типа hosted с классом Microsoft.Windows.2008R2.DHCP.Server.Role.
  3. Сделать дискаверы для новых классов.
  4. Перенацелить обращающиеся к журналам событий “Microsoft-Windows-Dhcp-Server/FilterNotifications” и “Microsoft-Windows-Dhcp-Server/Operational” правила и мониторы  на класс с DHCP серверами только на Windows Server 2008 R2.
  5. Перенацелить все правила и мониторы, обращающиеся к уникальным для Windows Server 2008R2 счётчикам производительности на новые классы.
  6. Что-то придумать со счётчиками, которые существуют на Windows Server 2008, но к которым указаны неверные пути.

Начнём, пожалуй.

1. Меняем дискавер, чтобы он не обнаруживал DHCP на Windows Server 2012/2012R2.

Рассмотрим исходный дискавер. Логика его работы проста. Он нацелен на класс ”Windows!Microsoft.Windows.Server.Computer”, соответственно срабатывает он на всех компьютерах с любой операционной системой Windows. Если находит там службу DHCP в состоянии не Disabled, считает, что объект искомого класса ”Microsoft.Windows.2008R2.DHCP.Server.Role” обнаружен.

 Чтобы дискавер не обнаруживал DHCP на серверах Windows Server 2012/R2 есть как минимум 2 способа:

  1. сузить область поиска с класса ”Windows!Microsoft.Windows.Server.Computer” на что-то, что не включает в себя сервераы Windows Server 2012/R2,
  2. ввести в дискавер дополнительное условие, проверяющее версию операционной системы.

Мы пойдём по второму пути. Нам нужно, чтобы дискавер находил DHCP только на операционных системах Windows Server 2003, 2008, 2008R2. Версию операционной системы мы будем брать из ключа реестра “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion”. Для Windows Server 2003, 2008, 2008R2 там должно быть 5.2, 6.0 и 6.1 соответственно.

Поскольку мы всё равно будем вытаскивать из реестра версию операционной системы, давайте расширим класс атрибутом OSCurrentVersion, и в процессе дискавера запишем туда значение .

Класс, исходный:

 Класс с новым атрибутом:

Вот как будет выглядеть наш новый дискавер (добавленные части выделены):

Отлично, с дискавером разобрались, переходим к следующему пункту.

2. Добавляем 2 класса, hosted по отношению к классу Microsoft.Windows.2008R2.DHCP.Server.Role. В одном будут DHCP на серверах Windows Server 2008/2008R2, в другом – только на серверах Windows Server 2008R2.

Нам нужно фактически добавить 2 класса и 2 отношения типа Hosted (новое выделено):

Зачем мы добавили 3 класса: Microsoft.Windows.2008R2.DHCP.Server.Role.2008and2008R2Only, Microsoft.Windows.2008R2.DHCP.Server.Role.2008R2Only и Microsoft.Windows.2008R2.DHCP.Server.Role.2008Only? На них мы перевесим всю активность, уникальную для Windows 2008 и 2008 R2. Почему они хостятся в старом классе? Благодаря этому все правила и мониторы, общие для всех ОС будут применяться также и на эти классы. Также нам не придётся переделывать вьюшки.

3. Делаем дискаверы для новых классов.

Дискаверить будем внутри класса “Microsoft.Windows.2008R2.DHCP.Server.Role”. Фильтровать будем по версии OS. Всё, что не 5.2 – это Windows Server 2008 и 2008R2.

Всё, что 6.1 – это Windows Server 2008 R2.

Всё, что 6.0 – это Microsoft.Windows.2008R2.DHCP.Server.Role.2008Only:

Прежде, чем заняться перенацеливанием правил и мониторов, давайте проверим, что наши изменения работают. Заодно, пожалуй, стоит переименовать классы и вьюшки в секции LanguagePack.

Итак, удаляем старый пакет управления, импортируем новый. Что изменилось? В список больше не попадают серверы на Windows 2012/2012R2, заполняется новый атрибут “Версия ОС”, обнаруживаются сущности новых классов: с Windows 2008/2008R2 и только с Windows 2008R2 (проверяем корректность наполнения классов по версиям ОС). Неплохо для начала.

Нам остаётся самое простое – перенацелить правила и мониторы, обращающиеся к счётчикам и журналам Windows 2008/2008R2 на новые классы. И ещё нужно что-то решить с несовпадающими именами объектов у счётчиков в Windows Server 2008 и 2008R2. Оставим всё это на финальную часть статьи.