Исправляем Hearbeat Discovery в SCCM 2007

SCCM крайне загадочный инструмент. Сколько с ним работаю, а он не перестает меня удивлять. Вот недавно у нас с ним опять возникло полное непонимание в моих желаниях и его возможностях.

В один прекрасный день, зайдя в консоль SCCM, я совершенно случайно  заметил, что у меня подозрительно много компьютеров со статусом Client=No. После недолгого изучения выяснилось, что из 700 зарегистрированных компьютеров, клиент видится на четырех. Сказать, что я испугался — значит ничего не сказать. В это время на фирме шел процесс разворачивания Office 2007, и если бы SCCM перестал работать, скорее всего перестал бы работать и я.

Сразу хочу сказать большое спасибо Александру Петлевому за моральную поддержку и несколько полезных ссылок.

Итак, я приступил к нервному изучению логов. Первое, что проверили — когда агенты последний раз сообщали о себе через Heartbeat Discovery. Для этого необходимо открыть в любой коллекции любой компьютер, открыть его свойства и по Agent Name найти соответствующую запись Agent Time. 

image

На скрине видно, что Heartbeat Discovery имеет номер 1, и последний раз агент сообщал сведения 29.04.2010 в 08:07:48.

В моем случае разбор “полетов” проходил 28го числа, а дата последнего Heartbeat Discovery была датирована 14м числом. Удостоверившись, что настройка Clear Insatall Flag стоит в 10 дней (это можно сделать здесь: Site Database –> Site management –> %SITE_CODE% –> Site Settings –> Site Maintance –> Tasks –> Clear Instal Flag –> Properties), причина удаления флага IsClient стала понятна: heartbeat не приходил, задача Clear Instal Flag честно сделала своё дело. Оставалось “малое” – найти причину, по которой агенты не сообщали о своем состоянии.

После беглой проверки логов, выяснилось, что весь функционал SCCM работает штатно – за день до этого на несколько десятков компьютеров был успешно развернут Office, OSD работало штатно, все другие Discovery тоже работали штатно. Т.е. сломано была только Heartbeat Discovery.

Пришлось углубиться в понимание того, как работает Heartbeat Discovery. Тут пригодились несколько ссылок – первая (разница между SMS2003 и SCCM2007 в этом плане минимальна) и вторая. Вкратце, процесс происходит следующим образом:

1. Согласно расписанию, агент формирует XML-файл. Файл сохраняется в примерно таком виде: %windir%\system32\CCM\Inventory\Temp\d0c06056-6363-41ce-9a2e-5409e7702cbe.xml
2. После формирование файл отправляется с помощью BITS на сервер SCCM (Management Point). На севере все XML-файлы попадают в папку %SCCM_DIR%\inboxes\auth\ddm.box\
3. После этого сервер обрабатывает полученные файлы и записывает полученные данные в базу.

Все процессы, связанные в Heartbeat Discovery можно посмотреть в лог-файлах, на строне агента это %windir%\system32\CCM\Logs\InventoryAgent.log, на стороне сервера это %SCCM_CCM%\Logs\MP)Ddr.log.

После изучения логов, я просто впал в ступор – как на агентах, так и на сервере в логах были только записи об успешной обработке файлов. Ни одной ошибки в них не было. Пришла идея посмотреть, что же там в папке inboxes\auth\ddm.box\. И вот тут меня ждал сюрприз – в этой папке находилось порядка 140000 файлов. Самый ранний файл был как раз датирован временем последнего сообщения агентов о себе. При этом в папке inboxes\auth\ddm.box\BAD_DDRS, куда попадают сбойные пакеты, ничего не было. Быстрый поиск в гугле особой информации не дал.

Явной причиной проблемы было нарушения процесса обработки пакетов DDR, поэтому появилась идея удалить несколько самых ранних файлов из папки inboxes\auth\ddm.box\. После удаление примерно 100 файлов и перезапуска службы SMS_EXECUTE на сервере, произошло чудо – процесс обработки файлов DDR стал вновь работать, и число файлов в inboxes\auth\ddm.box\ достаточно быстро сократилось до нуля. Версию о том, что процесс нарушился из-за сбойных файлов DDR подтвердило появление в папке inboxes\auth\ddm.box\BAD_DDRS порядка 1500 файлов.

Профит!

Новая версия SCCM Client Check 1.0.0.3

Новая версия тулзы по проверки клиента SCCM
Добавлено:
  • проверка сертификатов компьютера (для Native-режима). Проверяется наличие сертификата на удаленном компьютере, а также его валидность.
  • программу можно использовать из консоли SCCM
Инструкции:
  1. Всё содержимое архива извлечь в одну папку
  2. Поправить в файле SCCMClientCheck.xml путь до SCCMClientCheck.exe (см. тег <FilePath>). Путь может содержать пробелы, кавычки указывать не надо. 
  3. После изменение файл SCCMClientCheck.xml скопировать в папку %PROGRAMFILES%\Microsoft Configuration Manager Console\AdminUI\XmlStorage\Extensions\Actions\7ba8bf44-2344-4035-bdb4-16630291dcf6\ (создать необходимые подпаки при необходимости) на компьютеры, где установлена консоль
  4. Перезапустить консоль, в меню компьютера появится пункт SCCM Client Check

image

Подробнее почитать про внедрение своих команд в меню консоли SCCM можно здесь и здесь

Если у кого-то есть идеи, что можно было бы еще добавить в данную утилиту для облегчения диагностики клиентов – прошу высказываться.

Обновление SCCM Client Check

Выложил обновление программы для проверки клиентских компьютеров на предмет работы агента SCCM.

http://cid-9e1589588902dbaa.skydrive.live.com/embedicon.aspx/SCCMClientCheck/SCCMClientCheck_v1.0.0.2.zip

Добавлено:

  • Возможность открыть любой лог с клиента (кнопка open log file)
  • Возможность закрыть вкладку с логом двойным щелчком мыши (аля-Maxthon)

Исправлены баги:

  • время отображалось формате 12h. Теперь отображается в 24h.

Несколько картинок:

image image image