Configuration Manager의 상태 메시징에 대한 설명
이 문서에서는 Configuration Manager의 상태 메시징 시스템에 대해 설명합니다.
원래 제품 버전: Configuration Manager(현재 분기)
원래 KB 번호: 4459394
상태 메시징 이해
Configuration Manager의 상태 메시징은 특정 시점에 클라이언트 조건을 반영하는 메커니즘입니다. 반면 상태 메시지는 관리자가 다양한 Configuration Manager 구성 요소를 통해 데이터 워크플로를 추적하는 데 도움이 됩니다.
상태 메시지를 보고 추적할 수 있도록 상태 메시지 뷰어가 콘솔에 바로 빌드됩니다. 상태 메시지에 해당하는 뷰어가 없습니다. 상태 메시지의 결과는 다음과 같습니다.
- reports
- 업데이트해야 하는 시스템 수와 같은 콘솔의 다양한 데이터
- 클라이언트 로그
상태 메시지에는 클라이언트의 현재 위치에 있는 조건에 대한 간결한 정보가 포함됩니다. 상태 메시징 시스템은 다음을 포함하여 Configuration Manager의 특정 구성 요소에서 사용됩니다.
- 소프트웨어 업데이트
- 원하는 구성 관리
- 네트워크 액세스 보호
중요한 소프트웨어 업데이트 데이터는 Configuration Manager의 상태 메시징 시스템에 의존합니다. 더 많은 구성 요소가 이를 활용함에 따라 향후 버전의 Configuration Manager에서 상태 메시징을 이해하는 것이 훨씬 더 중요해질 것입니다.
다음 다이어그램은 상태 메시징 시스템의 작동 방식에 대한 좋은 설명을 제공합니다.
녹색 상자는 상태 메시징 시스템을 나타냅니다. 상자 안의 구성 요소는 시스템에 정보를 제공하는 구성 요소입니다.
상태 메시지가 수신되면 다음 두 가지가 발생합니다.
- 상태 메시지는 WMI(Windows Management Instrumentation) 공급자에 저장됩니다.
- 상태 시스템은 전송되지 않은 상태 메시지에 대해 15분 주기(기본값)로 WMI를 긁은 다음 관리 지점으로 전달합니다. 주기 기간을 변경할 수 있습니다.
다이어그램에서 클라이언트 설치 조각은 명확성을 위해 별도로 표시됩니다. 클라이언트를 설치하는 동안 관리 지점이 위치하고 상태 메시지의 대상이 지정됩니다. 클라이언트 설치에 대한 상태 메시지는 다음 조건 중 하나에서 FSP(대체 상태 지점)(구성된 경우)로 전달됩니다.
- 관리 지점에 도달하지 않습니다.
- 어떤 이유로 관리 지점이 중단되었습니다.
다른 모든 항목의 경우 트래픽은 관리 지점으로 직접 이동합니다.
관리 지점에 도착하는 상태 메시지는 MP Relay 구성 요소에 의해 파일로 .smx
처리되고 사이트 서버의 auth\statesys.box\incoming
폴더에 배치됩니다. 그런 다음, 워크플로를 완료하기 위해 데이터베이스로 처리됩니다.
심층 분석
자세한 정보 로깅이 다음을 사용하도록 설정되어 있는지 확인해야 합니다.
- 클라이언트
- 관리 지점
- 사이트 서버의 상태 메시징 구성 요소
Configuration Manager 클라이언트 또는 관리 지점에서 자세한 정보 표시 또는 디버그 로깅을 설정하려면 다음 레지스트리 항목을 편집하거나 만듭니다.
레지스트리 하위 키 | DWORD 이름 | 값 데이터 |
---|---|---|
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/CCM/Logging/@Global |
LogLevel | 0 |
KEY_LOCAL_MACHINE/SOFTWARE /Microsoft/CCM/Logging/DebugLogging |
사용 | 참 |
사이트 서버에서 다음 레지스트리 항목을 편집하여 자세한 로깅을 사용하도록 설정한 다음 서비스(또는 상태 시스템 구성 요소)를 다시 시작 SMS_Executive
합니다.
레지스트리 하위 키 | DWORD 이름 | 값 데이터 |
---|---|---|
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/SMS/Components/SMS_STATE_SYSTEM |
자세한 정보 로깅 | 1 |
SQL 명령을 추적하려면 Configuration Manager 구성 요소에 대해 SQL 추적을 사용하도록 설정해야 합니다. 그러나 추적에서 직접 가져올 수 있는 유용한 데이터는 많지 않습니다. Profiler를 사용하도록 설정한 경우에도 마찬가지입니다. 따라서 클라이언트의 Updatesdeployment.log 및 Statemessage.log 파일을 살펴보겠습니다. 이러한 로그의 상태 메시지를 해석하여 프로세스의 다양한 단계에서 발생하는 작업을 명확하게 파악할 수 있습니다.
로그 코드 예제를 검사하기 전에 상태 메시지 형식을 이해해야 합니다. 상태 메시지 자체는 토픽 유형 및 상태 메시지 ID를 비롯한 여러 부분으로 구성됩니다. 로그의 일부 위치에서 토픽 유형이 이미 해석된 것 같습니다.
동일한 로그에 항상 토픽 유형 및 상태 메시지 ID가 함께 표시되지는 않습니다. 다른 형식이 없는 데이터 형식은 필요한 항목을 결정하는 데 실제로 도움이 되지 않습니다. 그러나 토픽 유형과 상태 메시지 ID가 모두 있는 경우에도 해석할 수 없다면 정보가 유용하지 않습니다.
다음 차트는 의미 있는 데이터의 조합을 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 | Not Detected |
400 | 3 | 감지됨 |
401 | 0 | 준수 상태를 알 수 없음 |
401 | 1 | 준수 |
401 | 2 | 비준수 |
401 | 3 | 충돌이 감지됨 |
401 | 4 | Error |
401 | 5 | 해당 없음 |
401 | 6 | Not Detected |
401 | 7 | 적용 |
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
한 파란색 텍스트로 표시됩니다. 하나의 로그에 상태 메시징 데이터 차트에서 해석할 수 있는 실제 번호가 표시될 수 있습니다. 다른 하나는 제네릭 값(이미 해석됨)을 표시할 수 있습니다. 상태 메시지 ID(StateId
)는 자주색 텍스트로 표시됩니다.
차트의 TopicType
상태 메시지 ID()와 상태 메시지 ID 를StateId
결합하여 로그에서 발생하는 작업을 정확하게 추적할 수 있습니다. 이 예제에서 다음 코드 예제는 다음 정보를 보여 줍니다.
- 업데이트 평가
- 평가 결과
- 다운로드 중인 업데이트
- 설치 중인 업데이트
- 보류 중인 시스템 다시 시작
상태 메시지가 상태 시스템으로 전송되는 방법의 한 가지 예일 뿐입니다.
상태 메시징 데이터 흐름
다음 이미지는 상태 메시징 데이터가 관리 지점으로 이동하고 데이터베이스로 처리되는 방식의 실제 예입니다.
이 예제에서는 테스트 클라이언트를 사용합니다. 먼저 클라이언트가 모든 상태 메시징 정보에 대해 WMI를 긁어내도록 강요한 다음, 다음 폴링 주기에서 해당 정보를 관리 지점으로 보냅니다.
WMI에서 상태 메시지는 네임스페이스에 root\ccm\statemsg
저장됩니다. 해당 네임스페이스에는 두 가지 관심 CCM_StateMsg_SerialNum
클래스가 있습니다 CCM_StateMsg
.
클래스 CCM_StateMsg_SerialNum
는 상태 메시지에 사용되는 마지막 일련 번호를 기록하는 데 사용됩니다. 모든 상태 메시지에는 하드웨어 인벤토리와 유사한 고유한 일련 번호가 있습니다. 이러한 방식으로 사이트 서버는 시스템에서 상태 메시지가 누락되었는지 여부를 추적할 수 있습니다. 상태 메시지가 누락되면 불완전하거나 부정확한 상태 보고가 발생할 수 있으므로 중요합니다.
클래스에는 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()
이 스크립트는 웹에서 다양한 위치에서 찾을 수 있습니다. Configuration Manager SDK를 사용하여 클라이언트가 해당 데이터를 관리 지점에 다시 보내도록 합니다.
일반적으로 Visual Basic 스크립트(VBScript)는 .를 사용하여 cscript
실행됩니다. 직접 실행하려고 하면 스크립트가 실패할 수 있습니다. 문제는 Configuration Manager가 64비트 서버에서 실행되는 32비트 애플리케이션이라는 점입니다. 기본 버전은 cscript
64비트 버전이며 일반적으로 모든 VBScript에서 제대로 작동합니다. 그러나 이 경우 호출을 수행하려면 syswow64 폴더가 부족해야 하는 32비트 버전 cscript
이 필요합니다.
다음 상태 메시지 폴링 주기가 발생하면 모든 상태 메시지가 관리 지점으로 전송됩니다.
Statemessage.log 파일에서 상태 메시지 정보가 끌어오고 XML로 서식이 지정된 다음 관리 지점으로 전송되는 것을 볼 수 있습니다. 상태 메시지 정보는 다음 예제와 유사합니다.
<! [LOG[StateMessage body: <?xml version="1.0" encoding="UTF-16"?>
<ReportHeader Identification Machine ClientInstalled>1</ClientInstalled><ClientType>1</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 Data</ReportContent>
<ReportType>전체</ReportType><날짜>날짜</날짜><버전>1.0</버전><형식>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></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
볼 수 있습니다. 이 시점에서 무대 뒤에서 더 많은 것이 있습니다. 그러나 데이터를 관리 지점(이 경우 MP_Relay
구성 요소)으로 보내는 것을 CCMMessaging
아는 것으로 충분합니다.
<! [LOG[OutgoingMessage(Queue='mp_mp_relay엔드포인트', ID={A9E7A07D-223D-4F5D-93D5-15AF5B72E05C}): 'host_name'을 호스트하는 데 성공했습니다.]로그]!>
처리를 MP_Relay
위해 데이터가 도착하면 처리되고 파일 형식으로 .smx
변환된 다음 폴더에 auth\statesys.box\incoming
넣습니다.
Inv-Relay 작업: 메시지 본문 처리
Relay: FileType= SMX
릴레이: 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
추가하여 .xml
파일 이름을 file_name.smx.xml 지정한 다음 새 파일 이름을 두 번 클릭하면 XML 파일이 Internet Explorer에서 열리고 읽기가 훨씬 쉽습니다.
다음 이미지는 Internet Explorer에서 열린 XML 파일의 예입니다. 컴퓨터 및 상태 메시지의 세부 정보가 강조 표시됩니다. 여기에는 이전에 설명한 정보가 고유한 상태 메시지 ID 값과 결합되어 있습니다.
참고 항목
이러한 파일의 이름을 바꾸는 경우 먼저 Statesys.box 폴더에 영향을 주지 않도록 다른 폴더에 복사합니다.
마지막으로 상태 메시지를 데이터베이스로 처리해야 합니다. Statesys.log 파일에서 다음 예제와 유사한 메시지를 볼 수 있습니다.
처리할 새 상태 메시지를 찾은 후 스레드 처리를 시작합니다.
스레드 "상태 메시지 처리 스레드 #0" ID:5076 시작됨
CMessageProcessor - 검색된 부모 사이트 'site_name'
CMessageProcessor - 처리 파일: mdlbp169. SMW
CMessageProcessor - 잘못된 레코드가 0개인 1개의 레코드를 처리했습니다.
CMessageProcessor - 파일 "mdlbp169를 성공적으로 복제했습니다. SMW"를 부모 사이트 site_name.
CMessageProcessor - 0개의 잘못된 파일을 사용하여 이 일괄 처리에서 1개의 메시지 파일을 처리했습니다.
스레드 "상태 메시지 처리 스레드 #0" ID:5076이 정상적으로 종료됨
SQL 추적을 사용하도록 설정하여 데이터베이스 처리 구성 요소를 표시할 수 있지만 큰 도움이 되지는 않습니다. 대신 SQL 프로파일러를 사용해야 합니다. 프로파일러가 백그라운드에서 발생하는 일에 대한 힌트를 제공하지만 완전히는 아닙니다. 여러 SQL 저장 프로시저는 상태 메시지 처리를 담당합니다. 또한 데이터베이스의 여러 테이블은 상태 메시징 데이터를 저장합니다. 상태 메시지 처리를 수행하는 저장 프로시저는 일반적으로 이름으로 spProcess
시작합니다. 이러한 절차는 여러 가지가 있습니다.
사이트 서버는 도착 시 상태 메시지를 추적하므로 누락된 메시지에 플래그를 지정하고 필요한 경우 주기적으로 다시 동기화를 요청할 수 있습니다. 상태 메시지는 중요합니다. 당신은 어떤을 놓치고 싶지 않아요.
상태 메시지가 도착하면 고유 ID가 읽혀지고 데이터베이스에 저장됩니다. 처리가 계속되면 데이터가 정기적으로 업데이트됩니다. 간격이 감지되면 해당 데이터에 플래그가 지정되고 테이블에 누락된 상태 메시지 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 설정
속성 | Value1 | Value2 | Value3 |
---|---|---|---|
하트비트 Msg 간격 | 60 | ||
받은 편지함 폴링 간격 | 900 | ||
로더 청크 크기 | 256 | ||
로더 스레드 | 4 | ||
인출된 최대 청크 | 100 | ||
최소 누락 메시지 기간 | 2880 | ||
재동기 체크 인 | 15 | ||
다시 시도 구성 | REG_SZ | <Config><Retry PatternID="0" RetryQueue="0">7200,28800,86400</Retry></Config> | 0 |
참고 항목
- resync 체크 인terval은 60분으로 설정됩니다. 상태 메시지 다시 동기화가 필요한 시스템을 검사하기 위한 일정입니다.
- 최소 누락 메시지 기간은 2880으로 설정됩니다. 다시 동기화를 요청하기 전에 메시지가 누락되어야 하는 기간입니다.