Udostępnij za pośrednictwem


Opis komunikatów o stanie w programie Configuration Manager

W tym artykule opisano system obsługi komunikatów o stanie w programie Configuration Manager.

Oryginalna wersja produktu: Configuration Manager (current branch)
Oryginalny numer KB: 4459394

Opis komunikatów o stanie

Komunikaty o stanie w programie Configuration Manager to mechanizm, który odzwierciedla warunek klienta w określonym momencie. Natomiast komunikaty o stanie ułatwiają administratorom śledzenie przepływu pracy danych za pomocą różnych składników programu Configuration Manager.

Przeglądarka komunikatów o stanie jest wbudowana bezpośrednio w konsolę, dzięki czemu komunikaty o stanie mogą być wyświetlane i śledzone. Brak równoważnej przeglądarki komunikatów o stanie. Wynik komunikatów o stanie jest widoczny w:

  • reports
  • różne dane w konsoli programu, takie jak liczba systemów, które muszą zostać zaktualizowane
  • dzienniki klienta

Komunikaty o stanie zawierają zwięzłe informacje o warunkach w miejscu na kliencie. System obsługi komunikatów stanu jest używany przez określone składniki programu Configuration Manager, w tym:

  • aktualizacje oprogramowania
  • żądane zarządzanie konfiguracją
  • ochrona dostępu do sieci

Krytyczne dane aktualizacji oprogramowania opierają się na systemie obsługi komunikatów o stanie w programie Configuration Manager. Zrozumienie komunikatów o stanie stanie się jeszcze ważniejsze w przyszłych wersjach programu Configuration Manager, ponieważ coraz więcej składników z nich korzysta.

Na poniższym diagramie przedstawiono dobry opis działania systemu obsługi komunikatów stanu.

Diagram przedstawia sposób działania systemu obsługi komunikatów stanu.

Zielone pole reprezentuje system obsługi komunikatów stanu. Składniki w polu to składniki, które zawierają informacje do systemu.

Po odebraniu komunikatów o stanie występują dwie rzeczy:

  1. Komunikaty o stanie są przechowywane w dostawcy instrumentacji zarządzania Windows (WMI).
  2. System stanu złomuje usługę WMI w 15-minutowym cyklu (wartość domyślna) dla wszystkich komunikatów o stanie, które nie zostały wysłane, a następnie przekazuje je do punktu zarządzania. Okres cyklu można zmienić.

Na diagramie fragment instalacji klienta jest pokazany oddzielnie w celu zapewnienia przejrzystości. Podczas instalacji klienta punkt zarządzania znajduje się i jest przeznaczony dla komunikatów o stanie. Komunikaty o stanie instalacji klienta są przekazywane do rezerwowego punktu stanu (FSP) (jeśli jest skonfigurowany) w jednym z następujących warunków:

  • Punkt zarządzania nie jest osiągany.
  • Z jakiegoś powodu punkt zarządzania nie działa.

W przypadku wszystkich innych elementów ruch przechodzi bezpośrednio do punktu zarządzania.

Komunikaty o stanie, które docierają do punktu zarządzania, są przetwarzane do .smx plików przez składnik MP Relay i umieszczane w auth\statesys.box\incoming folderze na serwerze lokacji. Następnie są one przetwarzane w bazie danych w celu ukończenia przepływu pracy.

Bliższe informacje

Musimy upewnić się, że pełne rejestrowanie jest włączone dla:

  • klient
  • punkt zarządzania
  • składniki obsługi komunikatów stanu na serwerze lokacji

Aby ustawić pełne lub debugowanie rejestrowania na kliencie programu Configuration Manager lub w punkcie zarządzania, edytuj lub utwórz następujące wpisy rejestru:

Podklucz rejestru Nazwa DWORD Dane wartości
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/CCM/Logging/@Global PoziomRejestrowania 0
KEY_LOCAL_MACHINE/SOFTWARE /Microsoft/CCM/Logging/DebugLogging Włączona True

Na serwerze lokacji zmodyfikuj następujący wpis rejestru, aby włączyć pełne rejestrowanie, a następnie uruchom ponownie usługę SMS_Executive (lub składnik systemu stanu):

Podklucz rejestru Nazwa DWORD Dane wartości
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/SMS/Components/SMS_STATE_SYSTEM Pełne rejestrowanie 1

Śledzenie poleceń SQL wymaga włączenia śledzenia SQL dla składników programu Configuration Manager. Jednak nie wiele przydatnych danych można uzyskać bezpośrednio ze śledzenia. To prawda, nawet jeśli profiler jest włączony. Przeanalizujemy więc pliki Updatesdeployment.log i Statemessage.log na kliencie. Interpretując komunikaty o stanie w tych dziennikach, możemy uzyskać jasny obraz tego, co dzieje się w różnych krokach procesu.

Zanim przeanalizujemy przykłady kodu dziennika, musimy zrozumieć format komunikatu o stanie. Sam komunikat o stanie składa się z kilku części, w tym typu tematu i identyfikatora komunikatu stanu. W niektórych lokalizacjach w dziennikach typ tematu wydaje się być już interpretowany.

Typ tematu i identyfikator komunikatu stanu nie zawsze będą widoczne razem w tym samym dzienniku. Jeden typ danych bez drugiego nie pomaga określić, co jest potrzebne. Jednak nawet jeśli masz zarówno typ tematu, jak i identyfikator komunikatu o stanie, informacje nie są przydatne, chyba że można je interpretować.

Poniższy wykres może pomóc w interpretowaniu kombinacji elementów i StateID uzyskiwaniu znaczących TopicType danych.

select * from v_StateNames  

Uwaga 16.

Poniższy wykres zawiera kody typów tematów serii 300, 400 i 500.

Dane komunikatów o stanie

Typ tematu Identyfikator stanu StateName
300 0 Nieznany stan zgodności
300 1 Zgodne
300 2 Niezgodne
300 3 Wykryto konflikt
301 0 Nieznany stan wymuszania
301 1 Instalowanie aktualizacji
301 2 Oczekiwanie na ponowne uruchomienie
301 3 Oczekiwanie na ukończenie kolejnej instalacji
301 100 Pomyślnie zainstalowano aktualizacje
301 5 Oczekiwanie na ponowne uruchomienie systemu
301 6 Nie można zainstalować aktualizacji
301 7 Pobieranie aktualizacji
301 8 Pobrane aktualizacje
301 9 Nie można pobrać aktualizacji
301 10 Oczekiwanie na okno obsługi przed zainstalowaniem
301 11 Oczekiwanie na zainicjowanie instalacji przez koordynatora innej firmy
302 0 Nieznany stan oceny
302 1 Aktywowano ocenę
302 2 Ocena powiodła się
302 3 Ocena nie powiodła się
400 0 Nieznany stan wykrywania
400 1 Niewymagane
400 2 Nie wykryto
400 3 Wykryte
401 0 Nieznany stan zgodności
401 1 Zgodne
401 2 Niezgodne
401 3 Wykryto konflikt
401 100 Błąd
401 5 Nie dotyczy
401 6 Nie wykryto
401 7 Wymuszone
402 0 Nieznany stan wymuszania
402 1 Wymuszanie rozpoczęte
402 2 Wymuszanie oczekiwania na zawartość
402 3 Oczekiwanie na ukończenie kolejnej instalacji
402 100 Oczekiwanie na okno obsługi przed zainstalowaniem
402 5 Przed zainstalowaniem wymagane jest ponowne uruchomienie
402 6 Błąd ogólny
402 7 Oczekująca instalacja
402 8 Instalowanie aktualizacji
402 9 Oczekiwanie na ponowne uruchomienie systemu
402 10 Pomyślnie zainstalowano aktualizację
402 11 Nie można zainstalować aktualizacji
402 12 Pobieranie aktualizacji
402 13 Pobrana aktualizacja
402 14 Nie można pobrać aktualizacji
500 0 Nieznany stan wykrywania
500 1 Aktualizacja nie jest wymagana
500 2 Aktualizacja jest wymagana
500 3 Aktualizacja jest zainstalowana
501 0 Nieznany stan skanowania
501 1 Skanowanie oczekuje na lokalizację katalogu
501 2 Skanowanie jest uruchomione
501 3 Ukończono skanowanie
501 100 Skanowanie oczekuje na ponowną próbę
501 5 Skanowanie nie powiodło się
501 6 Skanowanie ukończone z błędami

Aby uzyskać więcej informacji, zobacz Komunikaty o stanie w programie Configuration Manager.

Poniższy przykład wyrównuje i porównuje pliki Updatesdeployment.log i Statemessage.log. Upewnij się, że dzienniki odwołują się do tego samego komunikatu o stanie, wyrównając ten sam TopicID (zielony tekst). Wyraźnie wskazuje, że dwa dzienniki odwołują się do tego samego komunikatu o stanie. Element TopicType jest wyświetlany w jasnoniebieskim tekście. Zwróć uwagę, że jeden dziennik może wyświetlać rzeczywistą liczbę, którą można interpretować na wykresie danych komunikatów stanu. Druga może pokazywać wartość ogólną (już zinterpretowana). Identyfikator komunikatu stanu (StateId) jest wyświetlany w fioletowym tekście.

Zrzut ekranu przedstawia szczegóły komunikatów dziennika.

Łącząc identyfikator komunikatu TopicType stanu i (StateId) z wykresu, możesz śledzić dokładnie to, co dzieje się w dziennikach. W tym przykładzie w poniższych przykładach kodu przedstawiono następujące informacje:

  • Ocena aktualizacji
  • Wynik oceny
  • Pobierana aktualizacja
  • Instalowana aktualizacja
  • Oczekujące ponowne uruchomienie systemu

Jest to tylko jeden przykład sposobu wysyłania komunikatów o stanie do systemu stanu.

Przepływ danych komunikatów o stanie

Na poniższej ilustracji przedstawiono rzeczywisty przykład sposobu przetwarzania danych komunikatów o stanie do punktu zarządzania i przetwarzania ich w bazie danych.

W tym przykładzie użyto klienta testowego. Zaczyna się od wymuszenia klienta na złomowanie usługi WMI dla wszystkich informacji o komunikatach o stanie, a następnie wysyła te informacje do punktu zarządzania w następnym cyklu sondowania.

W usłudze WMI komunikaty o stanie są przechowywane w root\ccm\statemsg przestrzeni nazw. W tej przestrzeni nazw istnieją dwie interesujące klasy: CCM_StateMsg_SerialNum i CCM_StateMsg.

Klasa CCM_StateMsg_SerialNum służy do rejestrowania ostatniego numeru seryjnego używanego dla komunikatu o stanie. Każdy komunikat o stanie ma unikatowy numer seryjny podobny do spisu sprzętu. W ten sposób serwer lokacji może śledzić, czy w systemie brakuje komunikatów o stanie. Jest to ważne, ponieważ brakujące komunikaty o stanie mogą powodować niekompletne lub niedokładne raportowanie stanu.

Zrzut ekranu przedstawiający klasę CCM_StateMsg_SerialNum.

Klasa CCM_StateMsg zawiera same komunikaty o stanie. W wystąpieniu klasy można znaleźć wszystkie zarejestrowane komunikaty o stanie.

Zrzut ekranu przedstawiający wystąpienie CCM_StateMsg.

Jeśli otworzysz jeden z tych komunikatów, znajdziesz szczegóły komunikatu o stanie i niektóre wcześniej omówione dane, jak pokazano w poniższym przykładzie.

Zrzut ekranu przedstawia szczegóły komunikatu o stanie.

Możemy ponownie wysłać dane do punktu zarządzania i śledzić jego postęp, używając poniższych skryptów ponownej synchronizacji.

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()

Ten skrypt można znaleźć w Internecie w różnych lokalizacjach. Używa zestawu SDK programu Configuration Manager, aby spowodować, że klient będzie ponownie wysłać dane do punktu zarządzania.

Zazwyczaj skrypt języka Visual Basic (VBScript) jest uruchamiany przy użyciu polecenia cscript. Zwróć uwagę, że skrypt może zakończyć się niepowodzeniem, jeśli spróbujesz uruchomić go samodzielnie. Problem polega na tym, że program Configuration Manager jest aplikacją 32-bitową działającą na serwerze 64-bitowym. Domyślną wersją programu jest wersja 64-bitowa cscript i ogólnie działa dobrze z dowolnym językiem VBScript. Jednak w tym przypadku wywołanie, które jest wykonywane, wymaga 32-bitowej wersji cscript , której należy uruchomić z folderu syswow64.

Zrzut ekranu przedstawiający wiersz polecenia administratora z uruchomionym skryptem cscript.

Po wystąpieniu następnego cyklu sondowania komunikatów o stanie wszystkie komunikaty o stanie są wysyłane do punktu zarządzania.

W pliku Statemessage.log widać, że informacje o komunikacie o stanie są ściągane, sformatowane w formacie XML, a następnie wysyłane do punktu zarządzania. Informacje o komunikacie o stanie powinny przypominać następujący przykład:

<! [LOG[StateMessage body: <?xml version="1.0" encoding="UTF-16"?>
<Report><ReportHeader><Identification><Machine><ClientInstalled>1/ClientInstalled><ClientType 1<</ClientType><>ClientID GUID:GUID</ClientID>>
<ClientVersion client_version_number</ClientVersion><>Nazwa NetBIOSName<>/NetBIOSName><CodePage>437</CodePage>
<SystemDefaultLCID>1033</SystemDefaultLCID></Machine></Identification><ReportDetails><ReportContent State Message Data</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></ReportBody/ReportBody><>
]LOG<![ LOG[CStateMsgManager::GetSignEncyptMode]LOG]!><time="time" date="date" component="StateMessage" context="" type="1" thread="3592" file="statemsg.cpp:1820">
<! [LOG[Pomyślnie przekazano komunikaty o stanie do punktu zarządzania]LOG]!><time="time" date="date" component="StateMessage" context="" type="1" thread="3592" file="statemsg.cpp:1527">

Uwaga 16.

Ten przykład jest obcinany do pojedynczego komunikatu o stanie z powodu rozmiaru pliku XML.

Mimo że plik Statemessage.log rejestruje, że komunikaty są wysyłane do punktu zarządzania, system obsługi komunikatów stanu nie przenosi danych do punktu zarządzania. W poniższym przykładzie widać, że CCMMessaging wykonuje tę operację. Jest więcej, które idą za kulisami w tym momencie. Jednak wystarczy wiedzieć, że CCMMessaging wysyła dane do punktu zarządzania (w tym przypadku MP_Relay składnika).

<! [LOG[OutgoingMessage(Queue='mp_mp_relayendpoint', ID={A9E7A07D-223D-4F5D-93D5-15AF5B72E05C}): Dostarczono pomyślnie do hosta "host_name".LOG]!>

Gdy dane docierają do przetwarzania w MP_Relayfolderze , są przetwarzane i tłumaczone na .smx format pliku, a następnie umieszczane w folderze auth\statesys.box\incoming .

Zadanie Inv-Relay: Przetwarzanie treści komunikatu
Przekaźnik: FileType= SMX
Przekaźnik: dir skrzynki nadawczej: C:\Program Files (x86)\Microsoft Configuration Manager\inboxes\auth\statesys.box\incoming
Przekaźnik: odebrano 0 załączników
Przekaźnik: pomyślnie przetworzyliśmy 0 z 0 załączników
Inv-Relay: Zadanie zostało ukończone pomyślnie

W folderze auth\statesys.box\incoming można zobaczyć .smx przetwarzane pliki. Zazwyczaj nie zobaczysz ich tutaj. Jeśli jednak pliki pozostaną w tym folderze, należy zbadać, czym są komunikaty i dlaczego nie są przetwarzane. Jeśli znajdziesz .smx plik, możesz go otworzyć przy użyciu edytora tekstów, takiego jak Notatnik, aby wyświetlić szczegóły. Jednak formatowanie pliku może być nieczytelne, jak w poniższym przykładzie:

Zrzut ekranu przedstawiający przykładowy plik SMX w Notatniku.

W przypadku zmiany nazwy .smx pliku przez dodanie .xml rozszerzenia tak, aby plik został nazwany file_name.smx.xml, a następnie dwukrotnie klikniesz nową nazwę pliku, plik XML zostanie otwarty w programie Internet Explorer i jest znacznie łatwiejszy do odczytania.

Na poniższej ilustracji przedstawiono przykład pliku XML otwartego w programie Internet Explorer. Szczegóły komputera i komunikatu o stanie są wyróżnione. Zawiera on informacje, które zostały wcześniej omówione, w połączeniu z unikatową wartością identyfikatora komunikatu stanu.

Uwaga 16.

Jeśli zmienisz nazwę tych plików, najpierw skopiuj je do innego folderu, aby nie wpływać na folder Statesys.box .

Zrzut ekranu przedstawiający przykładowy plik .smx.xml w programie Internet Explorer.

Na koniec komunikaty o stanie muszą być przetwarzane w bazie danych. W pliku Statesys.log można zobaczyć takie komunikaty podobne do następującego przykładu:

Znaleziono nowe komunikaty o stanie do przetworzenia, rozpoczynając przetwarzanie wątku
Wątek "State Message Processing Thread #0" id:5076 started
CMessageProcessor — wykryta witryna nadrzędna "site_name"
CMessageProcessor — plik przetwarzania: mdlbp169. SMW
CMessageProcessor — przetworzone 1 rekordy z nieprawidłowymi rekordami 0.
CMessageProcessor — pomyślnie zreplikowany plik "mdlbp169. SITE_NAME lokacji nadrzędnej w programie SMW".
CMessageProcessor — przetworzone 1 pliki komunikatów w tej partii z 0 nieprawidłowymi plikami.
Wątek "State Message Processing Thread #0" id:5076 zakończył się normalnie

Składnik przetwarzania bazy danych może być widoczny przez włączenie śledzenia SQL, ale nie pomaga zbyt wiele. Zamiast tego musimy użyć profilera SQL. Profiler daje nam wskazówkę, co dzieje się za kulisami, ale nie całkowicie. Kilka procedur składowanych SQL jest odpowiedzialnych za przetwarzanie komunikatów o stanie. Poza tym kilka tabel w bazie danych przechowuje dane komunikatów o stanie. Procedury składowane, które wykonują przetwarzanie komunikatów o stanie, zwykle zaczynają się od nazwy spProcess. Istnieje wiele takich procedur.

Serwer lokacji śledzi komunikaty o stanie podczas ich nadejścia, dzięki czemu może flagować wszystkie brakujące komunikaty i okresowo żądać ponownej synchronizacji w razie potrzeby. Komunikaty o stanie są ważne. Nie chcesz przegapić żadnego.

Po nadejściu komunikatów o stanie unikatowy identyfikator jest odczytywany i przechowywany w bazie danych. W miarę kontynuowania przetwarzania dane są regularnie aktualizowane. Jeśli zostanie wykryta luka, dane te są oflagowane i przechowywane jako brakujące komunikaty o stanie w SR_MissingMessageRanges tabeli. W idealnym przypadku ta tabela będzie pusta. Jednak w środowisku produkcyjnym dane mogą być widoczne w tabeli. Ta tabela ułatwia śledzenie komunikatów o stanie, które wymagają ponownej synchronizacji.

Plik kontroli lokacji znajduje się w bazie danych. Aby uzyskać określone ustawienia programu STATE_MESSAGE_SYSTEM, uruchom następujące zapytanie w lokacji głównej lub 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))

ustawienia STATE_MESSAGE_SYSTEM

Nazwisko Wartość1 Wartość2 Wartość3
Interwał pulsu msg 60
Interwał sondowania skrzynki odbiorczej 900
Rozmiar fragmentu modułu ładującego 256
Wątki modułu ładującego 100
Maksymalna liczba pobranych fragmentów 100
Minimalny brakujący wiek komunikatu 2880
Ponowne synchronizowanie Synchronizacja terval 15
Ponów próbę konfiguracji REG_SZ <Config><Retry PatternID="0" RetryQueue="0">7200,28800,86400</Retry></Config> 0

Uwaga 16.

  • Ponowna synchronizacja Synchronizacja terval jest ustawiona na 60 minut. Jest to harmonogram sprawdzania systemów wymagających ponownej synchronizacji komunikatów stanu.
  • Minimalny brakujący wiek komunikatu ma wartość 2880. Tak długo musi brakować komunikatu, zanim zażądano ponownej synchronizacji.