적용 대상: IoT Edge 1.5
중요합니다
IoT Edge 1.5 LTS는 지원되는 릴리스입니다. IoT Edge 1.4 LTS는 2024년 11월 12일부터 수명이 종료됩니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.
Azure IoT Hub의 모듈 쌍을 사용하면 IoT Edge 배포의 연결 및 상태를 모니터링할 수 있습니다. 모듈 쌍은 실행 중인 모듈의 성능에 대한 정보를 IoT Hub에 저장합니다.
IoT Edge 에이전트와 IoT Edge 허브 런타임 모듈은 각각 고유한 모듈 트윈: $edgeAgent
및 $edgeHub
을 유지 관리합니다.
-
$edgeAgent
에는 IoT Edge 에이전트, IoT Edge 허브 런타임 모듈 및 사용자 지정 모듈에 대한 상태 및 연결 데이터가 있습니다. IoT Edge 에이전트는 모듈을 배포하고 모니터링하며 Azure IoT Hub에 연결 상태를 보고합니다. -
$edgeHub
에는 디바이스에서 실행되는 IoT Edge 허브와 Azure IoT Hub 간의 통신에 대한 데이터가 있습니다. 여기에는 다운스트림 디바이스에서 들어오는 메시지의 처리가 포함됩니다. IoT Edge 허브는 Azure IoT Hub와 IoT Edge 디바이스 및 모듈 간의 통신을 처리합니다.
데이터는 모듈 트윈의 JSON 구조에서 메타데이터, 태그 및 원하는 속성 집합과 보고된 속성 집합으로 구성됩니다. deployment.json 파일에 지정한 원하는 속성이 모듈 쌍에 복사됩니다. IoT Edge 에이전트 및 IoT Edge 허브는 각각 해당 모듈에 대해 보고된 속성을 업데이트합니다.
마찬가지로 deployment.json 파일의 사용자 지정 모듈에 대해 지정한 원하는 속성은 모듈 쌍에 복사되지만 솔루션은 보고된 속성 값을 제공합니다.
이 문서에서는 Azure Portal, Azure CLI 및 Visual Studio Code에서 모듈 쌍을 검토하는 방법을 보여 줍니다. 디바이스가 배포를 수신하는 방법을 모니터하려면 IoT Edge 배포 모니터를 참조하세요. 모듈 쌍에 대한 개요는 IoT Hub에서 모듈 쌍 이해 및 사용을 참조하세요.
팁
IoT Edge 디바이스가 IoT Hub에서 연결이 끊어지면 런타임 모듈의 보고된 속성이 부실할 수 있습니다.
Ping$edgeAgent
모듈을 사용하여 연결이 끊어졌는지 확인합니다.
런타임 모듈 쌍 모니터
배포 연결 문제를 해결하려면 IoT Edge 에이전트 및 IoT Edge 허브 런타임 모듈 쌍을 검토한 후 다른 모듈로 드릴다운합니다.
IoT Edge 에이전트 모듈 쌍 모니터
이 JSON은 Visual Studio Code의 대부분의 섹션이 축소된 모듈 트윈을 보여줍니다.
{
"deviceId": "Windows109",
"moduleId": "$edgeAgent",
"etag": "AAAAAAAAAAU=",
"deviceEtag": "NzgwNjA1MDUz",
"status": "enabled",
"statusUpdateTime": "0001-01-01T00:00:00Z",
"connectionState": "Disconnected",
"lastActivityTime": "0001-01-01T00:00:00Z",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"version": 53,
"properties": {
"desired": { "···" },
"reported": {
"schemaVersion": "1.0",
"version": { "···" },
"lastDesiredStatus": { "···" },
"runtime": { "···" },
"systemModules": {
"edgeAgent": { "···" },
"edgeHub": { "···" }
},
"lastDesiredVersion": 5,
"modules": {
"SimulatedTemperatureSensor": { "···" }
},
"$metadata": { "···" },
"$version": 48
}
}
}
이 JSON에는 다음 섹션이 있습니다.
- 메타데이터 - 연결 데이터가 있습니다. IoT Edge 에이전트의 연결 상태는 항상
"Disconnected"
D2C(디바이스-클라우드) 메시지에 적용되고 IoT Edge 에이전트는 D2C 메시지를 보내지 않기 때문입니다. - 속성 -
desired
하위 섹션 및reported
하위 섹션이 있습니다. - Properties.desired - (축소된 것으로 표시됨) deployment.json 파일에 설정된 예상 속성 값입니다.
- Properties.reported - IoT Edge 에이전트에서 보고한 최신 속성 값입니다.
properties.desired
두 properties.reported
섹션 모두 비슷한 구조를 가지며 스키마, 버전 및 런타임 정보에 대한 메타데이터를 포함합니다.
modules
사용자 지정 모듈(SimulatedTemperatureSensor
와 같은)에 대한 섹션과 systemModules
, $edgeAgent
런타임 모듈에 대한 $edgeHub
섹션도 있습니다.
보고된 속성 값을 원하는 값과 비교하여 불일치를 찾고 문제를 해결하는 데 도움이 되는 연결 끊김을 식별합니다. 값을 비교할 때 조사 중인 속성의 $lastUpdated
섹션에 있는 metadata
보고된 값을 확인하세요.
문제 해결 시 다음 속성을 확인합니다.
exitcode - 0이 아닌 값은 모듈이 오류로 중지되었음을 의미합니다. 모듈이 의도적으로 중지된 상태로 설정된 경우 오류 코드 137 또는 143이 사용됩니다.
lastStartTimeUtc - 컨테이너가 마지막으로 시작된 날짜/시간을 표시합니다. 컨테이너가 시작되지 않은 경우 이 값은 0001-01-01T00:00:00Z입니다.
lastExitTimeUtc - 컨테이너가 마지막으로 완료된 날짜/시간을 표시합니다. 컨테이너가 실행 중이고 이전에 중지되지 않았으면 이 값이 0001-01-01T00:00:00Z입니다.
runtimeStatus - 다음 값 중 하나가 있습니다.
값 설명 알 수 없음 배포가 생성될 때까지의 기본 상태입니다. 백오프 모듈이 시작되도록 예약되었지만 실행되고 있지 않습니다. 이 값은 다시 시작하는 모듈에 유용합니다. 실패한 모듈이 쿨오프 기간 동안 다시 시작을 기다리는 경우 모듈은 백오프 상태입니다. 실행 중 모듈이 실행 중입니다. 비정상 상태 프로브 검사가 실패했거나 시간이 초과되었습니다. 중지됨 모듈이 성공적으로 종료되었습니다(종료 코드가 0개 있음). 실패 모듈이 실패 종료 코드(0이 아닌)로 종료되었습니다. 모듈은 다시 시작 정책에 따라 이 상태에서 백오프로 돌아갈 수 있습니다. 이 상태는 모듈에 복구할 수 없는 오류가 발생했음을 의미합니다. MMA(Microsoft Monitoring Agent)가 모듈을 다시 시작할 수 없어 새 배포가 필요한 경우 오류가 발생합니다.
자세한 내용은 EdgeAgent reported 속성을 참조하세요.
IoT Edge 허브 모듈 쌍 모니터
다음 JSON은 Visual Studio Code에서 대부분의 섹션이 축소된 상태로 $edgeHub
모듈 트윈을 표시합니다.
{
"deviceId": "Windows109",
"moduleId": "$edgeHub",
"etag": "AAAAAAAAAAU=",
"deviceEtag": "NzgwNjA1MDU2",
"status": "enabled",
"statusUpdateTime": "0001-01-01T00:00:00Z",
"connectionState": "Connected",
"lastActivityTime": "0001-01-01T00:00:00Z",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"version": 102,
"properties": {
"desired": { "···" },
"reported": {
"schemaVersion": "1.0",
"version": { "···" },
"lastDesiredVersion": 5,
"lastDesiredStatus": { "···" },
"clients": {
"Windows109/SimulatedTemperatureSensor": {
"status": "Disconnected",
"lastConnectedTimeUtc": "2020-04-08T21:42:42.1743956Z",
"lastDisconnectedTimeUtc": "2020-04-09T07:02:42.1398325Z"
}
},
"$metadata": { "···" },
"$version": 97
}
}
}
JSON에 대해서는 위쪽부터 시작하여 다음 섹션에서 설명합니다.
메타데이터 - 연결 데이터를 포함합니다.
속성 -
desired
및reported
하위 섹션을 포함합니다.Properties.desired - (축소된 상태로 표시) deployment.json 파일에서 연산자로 설정된 예상된 속성 값입니다.
Properties.reported - IoT Edge 허브에서 보고한 최신 속성 값입니다.
다운스트림 디바이스에 문제가 있는 경우 먼저 이 데이터를 확인합니다.
사용자 지정 모듈 쌍 모니터
IoT Edge 에이전트 모듈 쌍은 사용자 지정 모듈의 연결에 대한 정보를 유지합니다. 사용자 지정 모듈의 모듈 쌍은 주로 솔루션에 대한 데이터를 저장합니다. deployment.json 파일에 정의한 desired 속성은 모듈 트윈에 표시되며, 모듈은 필요에 따라 reported 속성 값을 업데이트할 수 있습니다.
기본 프로그래밍 언어를 Azure IoT Hub 디바이스 SDK 와 함께 사용하여 모듈의 애플리케이션 코드에 따라 모듈 쌍에서 보고된 속성 값을 업데이트합니다. 다음 절차에서는 .NET용 Azure SDK 및 SimulatedTemperatureSensor 모듈의 코드를 사용합니다.
CreateFromEnvironmentAsync 메서드를 사용하여 ModuleClient의 인스턴스를 만듭니다.
GetTwinAsync 메서드를 사용하여 모듈 쌍의 속성을 가져옵니다.
SetDesiredPropertyUpdateCallbackAsync 메서드를 사용하여 원하는 속성에 대한 변경 내용을 catch하는 콜백이 있는 수신기를 만듭니다.
콜백 메서드에서는 UpdateReportedPropertiesAsync 메서드를 사용하여 모듈 트윈의 보고된 속성을 업데이트하고, 설정할 속성 값이 포함된 TwinCollection을 전달합니다.
모듈 쌍 액세스
Azure IoT Hub, Visual Studio Code 또는 Azure CLI에서 모듈 쌍에 대한 JSON을 검토합니다.
Azure IoT Hub에서 모니터
모듈 트윈의 JSON을 확인합니다.
Azure Portal에 로그인하고 IoT Hub로 이동합니다.
장치 관리 메뉴 아래에서 디바이스를 선택합니다.
모니터링하려는 모듈이 있는 IoT Edge 디바이스의 디바이스 ID를 선택합니다.
모듈 탭에서 모듈 이름을 선택한 후 위쪽 메뉴 모음에서 모듈 ID 쌍을 선택합니다.
"이 모듈에 대한 모듈 ID가 없습니다."라는 메시지가 표시되면 이 오류는 원래 ID를 만든 백 엔드 솔루션을 사용할 수 없음을 의미합니다.
Visual Studio Code에서 모듈 쌍 모니터
모듈 트윈을 검토 및 수정합니다.
아직 설치되지 않은 경우 Azure IoT Edge 및 Azure IoT Hub 확장을 설치합니다. Visual Studio Code용 Azure IoT Edge 도구 확장은 유지 관리 모드에 있습니다.
탐색기에서 Azure IoT Hub를 확장한 다음 모니터링하려는 모듈을 사용하여 디바이스를 확장합니다.
모듈을 선택한 다음, 모듈 쌍 편집을 선택합니다. 모듈 쌍의 임시 파일이 컴퓨터에 다운로드되고 Visual Studio Code에서 열립니다.
변경한 후 편집기에서 코드 위의 모듈 쌍 업데이트를 선택하여 IoT Hub에 저장합니다.
Azure CLI에서 모듈 쌍 모니터
az iot hub invoke-module-method 명령을 사용하여 IoT Edge 에이전트를 ping하여 IoT Edge가 실행되고 있는지 확인합니다.
az iot hub module-twin 구조는 다음 명령을 제공합니다.
- az iot hub module-twin show - 모듈 쌍 정의를 표시합니다.
- az iot hub module-twin update - 모듈 쌍 정의를 업데이트합니다.
- az iot hub module-twin replace - 모듈 쌍 정의를 대상 JSON으로 바꿉니다.
팁
CLI 명령을 사용하여 런타임 모듈을 대상으로 지정하려면 모듈 ID 내의 $
문자를 이스케이프 처리해야 할 수도 있습니다. 예시:
az iot hub module-twin show -m '$edgeAgent' -n <hub name> -d <device name>
또는
az iot hub module-twin show -m \$edgeAgent -n <hub name> -d <device name>
다음 단계
기본 제공 직접 메서드를 사용하여 EdgeAgent와 통신하는 방법을 알아봅니다.