Поделиться через


Описание сообщений о состоянии в Configuration Manager

В этой статье описывается система обмена сообщениями о состоянии в Configuration Manager.

Исходная версия продукта: Configuration Manager (текущая ветвь)
Исходный номер базы знаний: 4459394

Общие сведения о обмене сообщениями о состоянии

Обмен сообщениями о состоянии в Configuration Manager — это механизм, который отражает условие клиента в определенный момент времени. Сообщения о состоянии, напротив, помогают администраторам отслеживать рабочий процесс данных с помощью различных компонентов Configuration Manager.

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

  • Отчеты
  • различные данные в консоли, например количество систем, которые необходимо обновить
  • журналы клиента

Сообщения о состоянии содержат краткие сведения об условиях на месте клиента. Система обмена сообщениями о состоянии используется определенными компонентами Configuration Manager, в том числе:

  • обновления программного обеспечения
  • управление требуемой конфигурацией
  • защита сетевого доступа

Критически важные данные обновления программного обеспечения зависят от системы обмена сообщениями о состоянии в Configuration Manager. Понимание сообщений о состоянии станет еще более важным в будущих версиях Configuration Manager, так как все больше компонентов пользуются этим.

На следующей схеме показано, как работает система обмена сообщениями о состоянии.

На схеме показано, как работает система обмена сообщениями о состоянии.

Зеленый прямоугольник представляет систему обмена сообщениями о состоянии. Компоненты внутри коробки являются компонентами, которые передают информацию в систему.

При получении сообщений о состоянии возникают две вещи:

  1. Сообщения о состоянии хранятся в поставщике инструментария управления Windows (WMI).
  2. Система состояний выполняет очистку WMI за 15-минутный цикл (по умолчанию) для всех сообщений о состоянии, которые не были отправлены, а затем перенаправляет их в точку управления. Период цикла можно изменить.

На схеме часть установки клиента показана отдельно для ясности. Во время установки клиента точка управления находится и предназначена для сообщений о состоянии. Сообщения о состоянии об установке клиента перенаправляются в резервную точку состояния (FSP) (если она настроена) при одном из следующих условий:

  • Точка управления не достигнута.
  • По какой-то причине точка управления не работает.

Во всех остальных ситуациях трафик направляется непосредственно к точке управления.

Сообщения о состоянии, поступающие в точку .smx управления, обрабатываются в файлах компонентом MP Relay и помещаются в папку auth\statesys.box\incoming на сервере сайта. Затем они обрабатываются в базе данных для завершения рабочего процесса.

Копание глубже

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

  • клиент
  • точка управления
  • компоненты обмена сообщениями о состоянии на сервере сайта;

Чтобы настроить подробное ведение журнала или ведение журнала отладки в Configuration Manager клиенте или точке управления, измените или создайте следующие записи реестра:

Подраздел реестра Имя DWORD Value data
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/CCM/Logging/@Global Loglevel 0
KEY_LOCAL_MACHINE/SOFTWARE /Microsoft/CCM/Logging/DebugLogging Включено Верно

На сервере сайта измените следующую запись реестра, чтобы включить подробное ведение журнала, а затем перезапустите SMS_Executive службу (или компонент системы состояния):

Подраздел реестра Имя DWORD Value data
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/SMS/Components/SMS_STATE_SYSTEM Подробное ведение журнала 1

Трассировка команд SQL требует включения трассировки SQL для Configuration Manager компонентов. Но не так много полезных данных можно получить непосредственно из трассировки. Это верно, даже если profiler включен. Поэтому мы рассмотрим Updatesdeployment.log и Statemessage.log файлы на клиенте. Интерпретируя сообщения о состоянии в этих журналах, мы можем получить четкое представление о том, что происходит на различных этапах процесса.

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

Тип раздела и идентификатор сообщения состояния не всегда отображаются вместе в одном журнале. Один тип данных без другого на самом деле не помогает определить, что необходимо. Однако даже если у вас есть как тип раздела , так и идентификатор сообщения состояния, эти сведения не будут полезны, если вы не можете интерпретировать их.

Следующая диаграмма поможет вам интерпретировать сочетание TopicType и StateID получить значимые данные.

select * from v_StateNames  

Примечание.

На следующей диаграмме представлены коды типов тем серий 300, 400 и 500.

Данные сообщений о состоянии

TopicType StateID StateName
300 0 Состояние соответствия неизвестно
300 1 Соответствует
300 2 Не соответствует требованиям
300 3 Обнаружен конфликт
301 0 Неизвестное состояние принудительного применения
301 1 Установка обновлений
301 2 Ожидание перезапуска
301 3 Ожидание завершения другой установки
301 4 Обновления успешно установлены
301 5 Ожидающий перезапуск системы
301 6 Не удалось установить обновления
301 7 Скачивание обновлений
301 8 Скачанные обновления
301 9 Не удалось скачать обновления
301 10 Ожидание периода обслуживания перед установкой
301 11 Ожидание запуска установки сторонним оркестратором
302 0 Состояние оценки неизвестно
302 1 Активация оценки
302 2 Оценка выполнена успешно
302 3 Сбой оценки
400 0 Состояние обнаружения неизвестно
400 1 Не требуется
400 2 Не обнаружено
400 3 Обнаружено
401 0 Состояние соответствия неизвестно
401 1 Соответствует
401 2 Не соответствует требованиям
401 3 Обнаружен конфликт
401 4 Error
401 5 Неприменимо
401 6 Не обнаружено
401 7 Enforced
402 0 Неизвестное состояние принудительного применения
402 1 Начало принудительного применения
402 2 Принудительное применение в ожидании содержимого
402 3 Ожидание завершения другой установки
402 4 Ожидание периода обслуживания перед установкой
402 5 Перед установкой требуется перезагрузка
402 6 Общий сбой
402 7 Ожидающая установка
402 8 Установка обновления
402 9 Ожидающий перезапуск системы
402 10 Обновление успешно установлено
402 11 Не удалось установить обновление
402 12 Скачивание обновления
402 13 Скачаемое обновление
402 14 Не удалось загрузить обновление
500 0 Состояние обнаружения неизвестно
500 1 Обновление не требуется
500 2 Требуется обновление
500 3 Обновление установлено
501 0 Состояние сканирования неизвестно
501 1 Сканирование ожидает расположения каталога
501 2 Проверка выполняется
501 3 Сканирование завершено
501 4 Проверка ожидает повтора
501 5 Сбой сканирования
501 6 Проверка завершена с ошибками

Дополнительные сведения см. в разделе Сообщения о состоянии в Configuration Manager.

В следующем примере выполняется выравнивание и сравнение файлов Updatesdeployment.log и Statemessage.log. Убедитесь, что журналы ссылаются на одно и то же сообщение о состоянии, выравнивая один и тот же TopicID (зеленый текст). Он четко указывает, что два журнала ссылаются на одно и то же сообщение о состоянии. Отображается TopicType светло-синим текстом. Обратите внимание, что в одном журнале может отображаться фактическое число, которое можно интерпретировать из диаграммы данных сообщений о состоянии . В другом может отображаться универсальное значение (уже интерпретируемое). Идентификатор сообщения о состоянии (StateId) отображается фиолетовым текстом.

Снимок экрана: подробные сведения о сообщениях журнала.

Объединяя TopicTypeидентификатор сообщения о состоянии и (StateId) из диаграммы, можно точно отслеживать, что происходит в журналах. В этом примере в этих примерах кода отображаются следующие сведения:

  • Оценка обновлений
  • Результат оценки
  • Скачиваемое обновление
  • Устанавливаемое обновление
  • Ожидающий перезапуск системы

Это лишь один из примеров отправки сообщений о состоянии в систему состояний.

Поток данных обмена сообщениями о состоянии

На следующем рисунке показан фактический пример того, как данные сообщений о состоянии поставляются в точку управления и обрабатываются в базу данных.

В этом примере используется тестовый клиент. Он начинается с принудительного извлечения WMI для всех сведений о состоянии сообщений, а затем отправляет эти сведения в точку управления в следующем цикле опроса.

В WMI сообщения о состоянии хранятся в root\ccm\statemsg пространстве имен. В этом пространстве имен есть два интересующих класса: CCM_StateMsg_SerialNum и CCM_StateMsg.

Класс CCM_StateMsg_SerialNum используется для записи последнего серийного номера, используемого для сообщения о состоянии. Каждое сообщение о состоянии имеет уникальный серийный номер, аналогичный инвентаризации оборудования. Таким образом, сервер сайта может отслеживать отсутствие каких-либо сообщений о состоянии из системы. Это важно, так как отсутствующие сообщения о состоянии могут привести к неполным или неточным отчетам о состоянии.

Снимок экрана: класс CCM_StateMsg_SerialNum.

Класс CCM_StateMsg содержит сами сообщения о состоянии. В экземпляре класса можно найти все записанные сообщения о состоянии.

Снимок экрана: экземпляр CCM_StateMsg.

Если открыть одно из этих сообщений, вы найдете сведения о сообщении о состоянии и некоторые данные, которые мы обсуждали ранее, как показано в следующем примере.

Снимок экрана: подробные сведения о сообщении о состоянии.

Мы можем повторно отправить данные в точку управления и отслеживать ход их выполнения с помощью следующих скриптов повторной синхронизации.

RefreshServerComplianceState()

Sub RefreshServerComplianceState()
dim newCCMUpdatesStore
set newCCMUpdatesStore = CreateObject ("Microsoft.CCM.UpdatesStore")
newCCMUpdatesStore.RefreshServerComplianceState
wscript.echo "Ran RefreshServerComplianceState."
End Sub
$UpdatesStore = New-Object -ComObject Microsoft.CCM.UpdatesStore
$UpdatesStore.RefreshServerComplianceState()

Этот скрипт можно найти в Интернете в разных местах. Пакет SDK для Configuration Manager используется для повторной отправки данных клиентом в точку управления.

Как правило, скрипт Visual Basic (VBScript) выполняется с помощью cscript. Обратите внимание, что сценарий может завершиться ошибкой, если вы попытаетесь запустить его самостоятельно. Проблема заключается в том, что Configuration Manager — это 32-разрядное приложение, работающее на 64-разрядном сервере. Версия cscript по умолчанию — это 64-разрядная версия и, как правило, хорошо работает с любым VBScript. Однако в этом случае для выполняемого вызова требуется 32-разрядная версия cscript папки syswow64.

Снимок экрана: командная строка администратора, выполняющая cscript.

При выполнении следующего цикла опроса сообщений о состоянии все сообщения о состоянии отправляются в точку управления.

В файле Statemessage.log видно, что сведения о сообщении о состоянии извлекаются, форматируются в ФОРМАТЕ XML, а затем отправляются в точку управления. Сведения о сообщении о состоянии должны выглядеть примерно так:

<! [LOG[Текст StateMessage: <?xml version="1.0" encoding="UTF-16"?>
<Report><ReportHeader><Identification><Machine><ClientInstalled>1</ClientInstalled><ClientType>1</ClientType ClientType><ClientID>GUID:GUID</ClientID>
<ClientVersion>client_version_number</ClientVersion><NetBIOSName>name</NetBIOSName><CodePage>437</CodePage>
<SystemDefaultLCID>1033</SystemDefaultLCID></Machine></Identification><ReportDetails><ReportContent>State Message/<ReportContent>
<ReportType>Full</ReportType><Date<>/Date/Date><Version>1.0</Version><Format>1.0</Format></ReportDetails></ReportHeader><ReportBody><StateMessage MessageTime="time" SerialNumber="serial_number"><Topic ID="21e49ac6-a273-4a61-9794-eb675bc743e5" Type="500" IDType="3"/><State ID="2" Criticality="0"/><UserParameters Flags="0" Count="1"><Param>102</ Param></UserParameters></StateMessageserParameters></StateMessage></Report><>
]LOG<![ LOG[CStateMsgManager::GetSignEncyptMode]LOG]!><time="time" date="date" component="StateMessage" context="" type="1" thread="3592" file="statemsg.cpp:1820">
<! [LOG[Успешно перенаправлены сообщения о состоянии в точку управления]LOG]!><time="time" date="date" component="StateMessage" context="" type="1" thread="3592" file="statemsg.cpp:1527">

Примечание.

Этот пример усекается до одного сообщения о состоянии из-за размера XML-файла.

Хотя файл Statemessage.log записывает, что сообщения отправляются в точку управления, система обмена сообщениями о состоянии фактически не перемещает данные в точку управления. В следующем примере показано, что CCMMessaging выполняет эту операцию. На данный момент еще больше, что происходит за кулисами. Однако достаточно знать, что CCMMessaging отправляет данные в точку управления (в данном случае компонент MP_Relay ).

<! [LOG[OutgoingMessage(Queue='mp_mp_relay endpoint', ID={A9E7A07D-223D-4F5D-93D5-15AF5B72E05C}): успешно доставлено для размещения host_name.] LOG]!>

Когда данные поступают для обработки в MP_Relay, они обрабатываются и переводятся в .smx формат файла, а затем помещают в папку auth\statesys.box\incoming .

Задача Inv-Relay: обработка текста сообщения
Ретранслятор: FileType= SMX
Relay: Outbox dir: C:\Program Files (x86)\Microsoft Configuration Manager\inboxes\auth\statesys.box\incoming
Ретранслятор: получено 0 вложений
Ретранслятор: 0 из 0 вложений успешно обработаны
Inv-Relay: задача успешно завершена

В папке auth\statesys.box\incoming отображаются обрабатываемые .smx файлы. Как правило, вы не увидите их здесь. Но если файлы остаются в этой папке, необходимо выяснить, что такое сообщения и почему они не обрабатываются. Если вы нашли .smx файл, его можно открыть с помощью текстового редактора, например Блокнота, чтобы просмотреть подробные сведения. Однако форматирование файла может быть нечитаемым, как показано в следующем примере:

Снимок экрана: пример SMX-файла в Блокноте.

Если переименовать .smx файл, добавив .xml расширение, чтобы файл получил имя file_name.smx.xml, а затем дважды щелкнуть новое имя файла, XML-файл откроется в Интернет-Обозреватель и его гораздо проще прочитать.

На следующем рисунке показан пример XML-файла, открытого в Обозреватель Интернета. Выделены сведения о компьютере и сообщении о состоянии. Он содержит сведения, которые мы обсуждали ранее, в сочетании с уникальным значением идентификатора сообщения о состоянии .

Примечание.

При переименовании этих файлов сначала скопируйте их в другую папку, чтобы не влиять на папку Statesys.box .

Снимок экрана: пример smx.xml-файла в Обозреватель Интернета.

Наконец, сообщения о состоянии должны быть обработаны в базе данных. В файле Statesys.log отображаются такие сообщения, как в следующем примере:

Обнаружены новые сообщения о состоянии для обработки, запуск потока обработки
Поток "Поток обработки сообщений о состоянии #0" id:5076 запущен
CMessageProcessor — обнаружен родительский сайт "site_name"
CMessageProcessor — файл обработки: mdlbp169. SMW
CMessageProcessor — обработана 1 запись с 0 недопустимыми записями.
CMessageProcessor — успешно реплицированный файл mdlbp169. SMW" для родительского сайта site_name.
CMessageProcessor — обработано 1 файл сообщения в этом пакете с 0 плохими файлами.
Поток "Поток обработки сообщений о состоянии #0" id:5076 завершается обычно

Компонент обработки базы данных можно сделать видимым, включив трассировку SQL, но это не очень помогает. Вместо этого необходимо использовать профилировщик SQL. Профилировщик дает нам намек на то, что происходит за кулисами, но не полностью. За обработку сообщений о состоянии отвечает несколько хранимых процедур SQL. Кроме того, в нескольких таблицах в базе данных хранятся данные сообщений о состоянии. Хранимые процедуры, которые выполняют обработку сообщений о состоянии, обычно начинаются с имени spProcess. Существует множество таких процедур.

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

По мере поступления сообщений о состоянии уникальный идентификатор считывается и сохраняется в базе данных. По мере продолжения обработки данные регулярно обновляются. При обнаружении пробела эти данные помечаются и сохраняются как отсутствующие сообщения о состоянии в SR_MissingMessageRanges таблице. В идеале эта таблица будет пустой. Однако в рабочей среде могут отображаться данные в таблице. Эта таблица помогает отслеживать сообщения о состоянии, для которых требуется повторная синхронизация.

Файл элемента управления сайтом находится в базе данных. Чтобы получить определенные параметры для STATE_MESSAGE_SYSTEM, выполните следующий запрос на первичном сайте или сайте CAS:

select * from SC_Component_Property where ComponentID in (select ID from SC_Component where ComponentName like 'SMS_STATE_SYSTEM') and sitenumber in (select SiteNumber from SC_SiteDefinition where Sitecode = (Select ThisSiteCode from SMSData))

параметры STATE_MESSAGE_SYSTEM

Имя Значение1 Value2 Значение 3
Интервал msg heartbeat 60
Интервал опроса папки "Входящие" 900
Размер блока загрузчика 256
Потоки загрузчика 4
Максимальное число фрагментов, извлекаемых 100
Минимальный возраст отсутствующих сообщений 2880
Интервал проверки повторной синхронизации 15
Конфигурация повторных попыток REG_SZ <Config><Retry PatternID="0" RetryQueue="0">7200,28800,86400</Retry></Config> 0

Примечание.

  • Параметр Resync Check Interval имеет значение 60 минут. Это расписание для проверки систем, требующих повторной синхронизации сообщений о состоянии.
  • Минимальный возраст отсутствующих сообщений имеет значение 2880. Это то, сколько времени должно отсутствовать сообщение, прежде чем запрашивается повторная синхронизация.