미리 구성된 원격 모니터링 솔루션 연습
IoT Suite 원격 모니터링 미리 구성된 솔루션 원격 위치에서 실행되는 여러 컴퓨터에 대한 엔드투엔드 모니터링 솔루션의 구현입니다. 이 솔루션은 주요 Azure 서비스를 결합하여 비즈니스 시나리오의 일반적인 구현을 제공합니다. 자신의 구현의 시작점으로 솔루션을 활용하고, 자신의 특정 비즈니스 요구 사항을 충족하도록 사용자 지정할 수 있습니다.
이 문서에서는 작동 방식을 이해할 수 있도록 원격 모니터링 솔루션의 주요 요소 중 일부를 안내합니다. 이 지식은 다음을 수행할 수 있도록 도와줍니다.
- 솔루션의 문제를 해결합니다.
- 고유한 특정 요구 사항을 충족하도록 솔루션을 사용자 지정하는 방법을 계획합니다.
- Azure 서비스를 사용하는 고유한 IoT 솔루션을 디자인합니다.
논리 아키텍처
다음 다이어그램에서는 미리 구성된 솔루션의 논리적 구성 요소를 간략하게 설명합니다.
마이크로 서비스 & Docker 컨테이너
원격 모니터링은 마이크로 서비스 아키텍처를 활용하기 위해 미리 구성된 솔루션 중 첫 번째입니다. 이 솔루션은 .NET 및 Java둘 다에서 사용할 수 있습니다. 마이크로 서비스는 개발 속도를 손상시키지 않으면서 컨테이너의 크기를 개별적으로 조정하여 규모와 유연성을 달성하는 일반적인 패턴으로 부상했습니다. 마이크로 서비스는 코드를 구획화하고 솔루션을 이해하기 쉽고 모놀리식이 적은 잘 정의된 인터페이스를 제공합니다. 또한 수익을 창출할 수 있는 완성된 솔루션을 빌드하기 위해 현재 솔루션 가속기를 확장하려는 파트너에 대한 옵션을 추가로 확장합니다.
Docker 컨테이너 대해 자세히 알아보기
- Docker 설치
- 원격 모니터링 대한 일반적인 Docker 명령
- Docker 시작하기
시뮬레이션된 디바이스
미리 구성된 솔루션에서 시뮬레이션된 디바이스는 냉각 디바이스(예: 건물 공조 장치 또는 시설 공기 처리 장치)를 나타냅니다. 미리 구성된 솔루션을 배포하는 경우 Azure WebJob실행되는 4개의 시뮬레이션된 디바이스를 자동으로 프로비전합니다. 시뮬레이션된 디바이스를 사용하면 물리적 디바이스를 배포할 필요 없이 솔루션의 동작을 쉽게 탐색할 수 있습니다. 실제 물리적 디바이스를 배포하려면 미리 구성된 원격 모니터링 솔루션에 디바이스 연결 자습서를 참조하세요.
기기에서 클라우드로의 메시지
시뮬레이션된 각 디바이스는 IoT Hub에 다음 메시지 유형을 보낼 수 있습니다.
메시지 | 설명 |
---|---|
스타트업 | 디바이스가 시작되면 자체에 대한 정보가 포함된 디바이스 정보 메시지를 백 엔드로 보냅니다. 이 데이터에는 디바이스 ID와 디바이스가 지원하는 명령 및 메서드 목록이 포함됩니다. |
현재 상태 | 디바이스는 주기적으로 현재 상태 메시지를 전송하여 디바이스가 센서의 존재를 감지할 수 있는지 여부를 보고합니다. |
테레메트리 | 디바이스는 디바이스의 시뮬레이션된 센서에서 수집된 온도 및 습도에 대한 시뮬레이션된 값을 보고하는 원격 분석 메시지를 주기적으로 보냅니다. |
비고
솔루션은 디바이스 쌍이 아닌 Cosmos DB 데이터베이스에 디바이스에서 지원하는 명령 목록을 저장합니다.
속성 및 디바이스 트윈
시뮬레이션된 디바이스는 IoT 허브의 쌍에 대해 보고된 속성으로서 다음 디바이스 속성을 보냅니다. 디바이스는 시작 시 및 변경 디바이스 상태 명령 또는 메서드에 대한 응답으로 보고된 속성을 보냅니다.
재산 | 목적 |
---|---|
설정.원격 정보 전송 간격 | 장치가 원격 분석 데이터를 보내는 빈도(초) |
Config.온도평균값 | 시뮬레이션된 온도 원격 분석의 평균 값을 지정합니다. |
Device.DeviceID | 솔루션에서 디바이스를 만들 때 제공되거나 할당된 ID |
Device.DeviceState | 디바이스에서 보고한 상태 |
장치.생성시간 | 솔루션에서 디바이스를 만든 시간 |
기기.시작시간 | 디바이스가 시작된 시간 |
장치.마지막원하는속성변경 | 마지막으로 원하는 속성 변경의 버전 번호 |
장치.위치.위도 | 디바이스의 위도 위치 |
기기.위치.경도 (Device.Location.Longitude) | 디바이스의 경도 위치 |
시스템.제조업체 | 장치 제조업체 |
시스템.모델번호 | 디바이스의 모델 번호 |
시스템.시리얼 번호 | 디바이스의 일련 번호 |
시스템.펌웨어버전 | 디바이스의 현재 버전의 펌웨어 |
System.Platform | 디바이스의 플랫폼 아키텍처 |
시스템.프로세서 | 디바이스를 실행하는 프로세서 |
시스템.설치된RAM | 디바이스에 설치된 RAM 양 |
시뮬레이터는 샘플 값을 사용하여 시뮬레이션된 디바이스에서 이러한 속성을 시드합니다. 시뮬레이터가 시뮬레이션된 디바이스를 초기화할 때마다 디바이스는 미리 정의된 메타데이터를 보고된 속성으로 IoT Hub에 보고합니다. 보고된 속성은 디바이스에서만 업데이트할 수 있습니다. 변경할 reported 속성을 변경하려면 솔루션 포털에서 원하는 대로 속성을 설정합니다. 디바이스의 책임은 다음과 같습니다.
- IoT Hub에서 원하는 속성을 주기적으로 검색합니다.
- 원하는 속성 값으로 구성을 업데이트합니다.
- 새 값을 보고된 속성으로 허브로 다시 보냅니다.
솔루션 대시보드에서 원하는 속성을(를) 사용하여 디바이스 트윈으로 디바이스의 속성을 설정할 수 있습니다. 일반적으로 디바이스는 허브에서 원하는 속성 값을 읽어 내부 상태를 업데이트하고 변경 내용을 reported 속성으로 다시 보고합니다.
비고
시뮬레이션된 디바이스 코드는 오직 Desired.Config.TemperatureMeanValue와 Desired.Config.TelemetryInterval 원하는 속성만을 사용하여 IoT Hub로 다시 전송된 reported 속성을 업데이트합니다. 다른 원하는 속성 변경 요청은 모두 시뮬레이션된 디바이스에서 무시됩니다.
메서드
시뮬레이션된 디바이스는 솔루션 포털에서 IoT Hub를 통해 호출되는 다음 메서드(직접 메서드)를 처리할 수 있습니다.
메서드 | 설명 |
---|---|
펌웨어 업데이트 시작 | 디바이스에 펌웨어 업데이트를 수행하도록 지시합니다. |
재부팅 | 디바이스를 다시 부팅하도록 지시합니다. |
공장 초기화 | 디바이스에 공장 재설정을 수행하도록 지시합니다. |
일부 메서드는 reported 속성을 사용하여 진행 상황을 보고합니다. 예를 들어 InitiateFirmwareUpdate 메서드는 디바이스에서 비동기적으로 업데이트를 실행하는 것을 시뮬레이션합니다. 메서드는 디바이스에서 즉시 반환되며, 비동기 작업은 보고된 속성을 사용하여 상태 업데이트를 솔루션 대시보드로 계속 보냅니다.
명령어
시뮬레이션된 디바이스는 솔루션 포털에서 IoT Hub를 통해 보낸 다음 명령(클라우드-디바이스 메시지)을 처리할 수 있습니다.
명령어 | 설명 |
---|---|
PingDevice | 디바이스에 ping 보내 활성 상태인지 확인합니다. |
텔레메트리 시작 | 원격 분석을 보내는 디바이스를 시작합니다. |
원격 측정 중지 | 장치에서 원격 분석 전송을 중지합니다. |
설정점온도 변경 | 임의 데이터가 생성되는 설정 지점 값을 변경합니다. |
DiagnosticTelemetry | 디바이스 시뮬레이터를 트리거하여 추가 원격 분석 값(externalTemp)을 보냅니다. |
디바이스 상태 변경 | 디바이스의 확장 상태 속성을 변경하고 디바이스에서 디바이스 정보 메시지를 보냅니다. |
비고
이러한 명령(클라우드-디바이스 메시지) 및 메서드(직접 메서드)의 비교는 클라우드-디바이스 통신 지침참조하세요.
IoT Hub
IoT Hub는 디바이스에서 클라우드로 전송된 데이터를 수집하여 ASA(Azure Stream Analytics) 작업에 사용할 수 있도록. 각 스트림 ASA 작업은 별도의 IoT Hub 소비자 그룹을 사용하여 디바이스에서 메시지 스트림을 읽습니다.
솔루션의 IoT Hub도 다음과 같습니다.
- 포털에 연결할 수 있는 모든 디바이스의 ID 및 인증 키를 저장하는 ID 레지스트리를 유지 관리합니다. ID 레지스트리를 통해 디바이스를 사용하거나 사용하지 않도록 설정할 수 있습니다.
- 솔루션 포털을 대신하여 디바이스에 명령을 보냅니다.
- 솔루션 포털을 대신하여 디바이스에서 메서드를 호출합니다.
- 등록된 모든 디바이스에 대해 디바이스 쌍을 유지 관리합니다. 디바이스 쌍은 디바이스에서 보고한 속성 값을 저장합니다. 디바이스 트윈은 또한 디바이스가 다음에 연결할 때 검색할 수 있도록 솔루션 포털에 설정된 원하는 속성을 저장합니다.
- 여러 디바이스에 대한 속성을 설정하거나 여러 디바이스에서 메서드를 호출하도록 작업을 예약합니다.
Azure Stream Analytics
원격 모니터링 솔루션에서 ASA(Azure Stream Analytics)는 처리 또는 스토리지를 위해 IoT Hub에서 받은 디바이스 메시지를 다른 백 엔드 구성 요소로 디스패치합니다. 다른 ASA 작업은 메시지의 내용에 따라 특정 함수를 수행합니다.
작업 1: 디바이스 정보 들어오는 메시지 스트림에서 디바이스 정보 메시지를 필터링하고 Event Hub 엔드포인트로 보냅니다. 디바이스는 시작 시 및 SendDeviceInfo 명령에 대한 응답으로 디바이스 정보 메시지를 보냅니다. 이 작업은 다음 쿼리 정의를 사용하여 디바이스 정보 메시지를 식별합니다.
SELECT * FROM DeviceDataStream Partition By PartitionId WHERE ObjectType = 'DeviceInfo'
이 작업은 추가 처리를 위해 이벤트 허브로 출력을 보냅니다.
작업 2: 규칙 디바이스별 임계값에 대해 들어오는 온도 및 습도 원격 분석 값을 평가합니다. 임계값은 솔루션 포털에서 사용할 수 있는 규칙 편집기에서 설정됩니다. 각 디바이스/값 쌍은 Blob의 타임스탬프에 따라 저장되며, 이 Blob은 참조 데이터로서 Stream Analytics가 읽습니다. 이 작업은 비어 있지 않은 값을 디바이스의 설정된 임계값과 비교합니다. '>' 조건을 초과하면 작업은 임계값이 초과되었음을 나타내는 경보 이벤트를 출력하고 디바이스, 값 및 타임스탬프 값을 제공합니다. 이 작업은 다음 쿼리 정의를 사용하여 경보를 트리거해야 하는 원격 분석 메시지를 식별합니다.
WITH AlarmsData AS
(
SELECT
Stream.IoTHub.ConnectionDeviceId AS DeviceId,
'Temperature' as ReadingType,
Stream.Temperature as Reading,
Ref.Temperature as Threshold,
Ref.TemperatureRuleOutput as RuleOutput,
Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
UNION ALL
SELECT
Stream.IoTHub.ConnectionDeviceId AS DeviceId,
'Humidity' as ReadingType,
Stream.Humidity as Reading,
Ref.Humidity as Threshold,
Ref.HumidityRuleOutput as RuleOutput,
Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
)
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
작업은 추가 처리를 위해 이벤트 허브로 출력을 보내고 솔루션 포털에서 경고 정보를 읽을 수 있는 Blob Storage에 각 경고의 세부 정보를 저장합니다.
작업 3: 원격 분석 두 가지 방법으로 들어오는 디바이스 원격 분석 스트림에서 작동합니다. 첫 번째는 모든 원격 분석 메시지를 장기 저장을 위해 장치에서 영구 Blob 스토리지로 보냅니다. 두 번째는 5분 슬라이딩 윈도우에서 평균, 최소 및 최대 습도 값을 계산하고 이 데이터를 Blob Storage로 보냅니다. 솔루션 포털은 Blob Storage에서 원격 분석 데이터를 읽고 차트를 채웁니다. 이 작업은 다음 쿼리 정의를 사용합니다.
WITH
[StreamData]
AS (
SELECT
*
FROM [IoTHubStream]
WHERE
[ObjectType] IS NULL -- Filter out device info and command responses
)
SELECT
IoTHub.ConnectionDeviceId AS DeviceId,
Temperature,
Humidity,
ExternalTemperature,
EventProcessedUtcTime,
PartitionId,
EventEnqueuedUtcTime,
*
INTO
[Telemetry]
FROM
[StreamData]
SELECT
IoTHub.ConnectionDeviceId AS DeviceId,
AVG (Humidity) AS [AverageHumidity],
MIN(Humidity) AS [MinimumHumidity],
MAX(Humidity) AS [MaxHumidity],
5.0 AS TimeframeMinutes
INTO
[TelemetrySummary]
FROM [StreamData]
WHERE
[Humidity] IS NOT NULL
GROUP BY
IoTHub.ConnectionDeviceId,
SlidingWindow (mi, 5)
이벤트 허브 (Event Hubs)
디바이스 정보와 규칙의 ASA 작업은 데이터가 WebJob에서 실행 중인 이벤트 프로세서로 안정적으로 전달될 수 있도록 Event Hubs에 데이터를 출력합니다.
Azure Storage
솔루션은 Azure Blob Storage를 사용하여 솔루션의 디바이스에서 모든 원시 및 요약된 원격 분석 데이터를 유지합니다. 포털은 Blob Storage에서 원격 분석 데이터를 읽고 차트를 채웁니다. 경고를 표시하기 위해 솔루션 포털은 원격 분석 값이 구성된 임계값을 초과했을 때 기록하는 Blob Storage에서 데이터를 읽습니다. 또한 솔루션은 Blob Storage를 사용하여 솔루션 포털에서 설정한 임계값을 기록합니다.
WebJobs
디바이스 시뮬레이터를 호스팅하는 것 외에도 솔루션의 WebJobs는 명령 응답을 처리하는 Azure WebJob에서 실행되는 이벤트 프로세서 호스트합니다. 명령 응답 메시지를 사용하여 디바이스 명령 기록을 업데이트합니다(Cosmos DB 데이터베이스에 저장됨).
Cosmos DB (코스모스 데이터베이스)
솔루션은 Cosmos DB 데이터베이스를 사용하여 솔루션에 연결된 디바이스에 대한 정보를 저장합니다. 이 정보에는 솔루션 포털에서 디바이스로 전송된 명령의 기록과 솔루션 포털에서 호출된 메서드가 포함됩니다.
솔루션 포털
솔루션 포털은 미리 구성된 솔루션의 일부로 배포된 웹앱입니다. 솔루션 포털의 주요 페이지는 대시보드 및 디바이스 목록입니다.
대시보드
웹앱의 이 페이지는 PowerBI 자바스크립트 제어(자세한 내용은 PowerBI-visuals 리포지토리참조)를 사용하여 장치에서 원격 분석 데이터를 시각화합니다. 이 솔루션은 ASA 원격 분석 작업을 사용하여 Blob Storage에 원격 분석 데이터를 씁니다.
디바이스 목록
솔루션 포털의 이 페이지에서 다음을 수행할 수 있습니다.
- 새 디바이스를 프로비전합니다. 이 작업은 고유한 디바이스 ID를 설정하고 인증 키를 생성합니다. 디바이스에 대한 정보를 IoT Hub ID 레지스트리와 솔루션별 Cosmos DB 데이터베이스 모두에 씁니다.
- 디바이스 속성을 관리합니다. 이 작업에는 기존 속성 보기 및 새 속성으로 업데이트가 포함됩니다.
- 디바이스에 명령을 보냅니다.
- 디바이스에 대한 명령 기록을 봅니다.
- 디바이스를 사용하도록 설정하고 사용하지 않도록 설정합니다.
다음 단계
다음 TechNet 블로그 게시물은 미리 구성된 원격 모니터링 솔루션에 대한 자세한 정보를 제공합니다.
다음 문서를 참조하여 IoT Suite를 계속 시작할 수 있습니다.