다음을 통해 공유


미리 구성된 원격 모니터링 솔루션 연습

미리 구성된 IoT Suite 원격 모니터링 솔루션은 원격 위치에서 실행되는 여러 머신에 대한 엔드투엔드 모니터링 솔루션을 구현합니다. 솔루션은 비즈니스 시나리오의 제네릭 구현을 제공하는 핵심 Azure 서비스를 결합합니다. 솔루션을 고유한 구현을 위한 시작점으로 사용하고 사용자의 특정 비즈니스 요구 사항에 맞게 사용자 지정할 수 있습니다.

이 문서는 작동 방식을 이해할 수 있도록 원격 모니터링 솔루션의 핵심 요소 중 일부를 안내합니다. 이 정보는 다음 항목을 도울 수 있습니다.

  • 솔루션의 문제를 해결합니다.
  • 솔루션을 사용자 지정하여 고유한 특정 요구 사항을 충족하는 방법을 계획합니다.
  • Azure 서비스를 사용하는 고유한 IoT 솔루션을 디자인합니다.

논리 아키텍처

다음 다이어그램에서는 미리 구성된 솔루션의 논리적 구성 요소를 간략히 보여줍니다.

논리 아키텍처

마이크로 서비스 및 Docker 컨테이너

원격 모니터링은 마이크로 서비스 아키텍처를 활용하도록 미리 구성된 첫 번째 솔루션입니다. 솔루션은 .NETJava 모두에서 사용할 수 있습니다. 마이크로 서비스는 개발 속도를 손상시키지 않고 확장성 및 유연성을 달성하기 위해(컨테이너를 개별적으로 크기 조정하도록 허용하여) 널리 알려진 패턴으로 부상했습니다. 마이크로 서비스는 코드를 구분하고 솔루션을 이해하기 쉽고 덜 모놀리식이 되도록 하는 잘 정의된 인터페이스를 제공합니다. 또한 수익화될 수 있는 완성된 솔루션을 빌드하도록 현재 솔루션을 확장하려는 파트너를 위해 추가로 옵션을 확장합니다.

Docker 컨테이너에 대해 자세히 알아보기

시뮬레이션된 디바이스

미리 구성된 솔루션에서 시뮬레이션된 디바이스가 냉각 디바이스(예: 건물 공조기 또는 시설 공기 처리 디바이스)를 나타냅니다. 미리 구성된 솔루션을 배포할 때 Azure WebJob에서 실행되는 네 개의 시뮬레이션된 디바이스도 자동으로 프로비전합니다. 시뮬레이션된 디바이스를 사용하면 물리적 디바이스를 배포하지 않고도 솔루션의 동작을 쉽게 탐색할 수 있습니다. 실제 물리적 디바이스를 배포하려면 미리 구성된 원격 모니터링 솔루션에 디바이스 연결 자습서를 참조하세요.

디바이스-클라우드 메시지

시뮬레이션된 디바이스는 각각 IoT Hub에 다음과 같은 메시지 유형을 보낼 수 있습니다.

메시지 Description
Startup 클래스 디바이스가 시작되면 백 엔드로 자체에 대한 정보를 포함하는 디바이스 정보 메시지를 보냅니다. 이 데이터에는 디바이스 ID와 디바이스에서 지원하는 명령 및 메서드 목록이 포함됩니다.
현재 상태 디바이스는 현재 상태 메시지를 정기적으로 전송하여 센서의 현재 상태를 감지할 수 있는지 여부를 보고합니다.
원격 분석 디바이스의 시뮬레이션된 센서에서 수집된 온도 및 습도에 대한 시뮬레이션된 값을 보고하는 원격 분석 메시지를 정기적으로 전송합니다.

참고

솔루션은 디바이스에서 지원하는 명령의 목록을 디바이스 쌍이 아니라 Cosmos DB 데이터베이스에 저장합니다.

속성 및 디바이스 쌍

시뮬레이션된 디바이스는 reported 속성으로 IoT Hub의 에 다음 디바이스 속성을 보냅니다. 디바이스는 시작 시와 디바이스 상태 변경 명령 또는 메서드에 대한 응답으로 reported 속성을 보냅니다.

속성 용도
Config.TelemetryInterval 디바이스가 원격 분석을 전송하는 빈도(초)
Config.TemperatureMeanValue 시뮬레이션된 온도 원격 분석에 대한 평균 값을 지정합니다.
Device.DeviceID 솔루션에서 디바이스를 만들 때 제공되거나 할당되는 ID
Device.DeviceState 디바이스에서 보고한 상태
Device.CreatedTime 솔루션에서 디바이스가 만들어진 시간
Device.StartupTime 디바이스가 시작된 시간
Device.LastDesiredPropertyChange 마지막 desired 속성 변경의 버전 번호
Device.Location.Latitude 디바이스의 위도 위치
Device.Location.Longitude 디바이스의 경도 위치
System.Manufacturer 디바이스 제조업체
System.ModelNumber 디바이스의 모델 번호
System.SerialNumber 디바이스의 일련 번호
System.FirmwareVersion 디바이스 펌웨어의 현재 버전
System.Platform 디바이스의 플랫폼 아키텍처
System.Processor 디바이스를 실행하는 프로세서
System.InstalledRAM 디바이스에 설치된 RAM의 양

시뮬레이터는 샘플 값으로 시뮬레이션된 디바이스에 이러한 속성을 시드합니다. 시뮬레이터가 시뮬레이션된 디바이스를 초기화할 때마다 디바이스는 reported 속성으로 IoT Hub에 미리 정의된 메타데이터를 보고합니다. Reported 속성은 디바이스에 의해 업데이트될 수만 있습니다. reported 속성을 변경하려면 솔루션 포털에서 desired 속성을 설정합니다. 다음은 디바이스의 책임입니다.

  1. IoT Hub에서 desired 속성을 주기적으로 검색합니다.
  2. desired 속성 값으로 해당 구성을 업데이트합니다.
  3. 새 값을 reported 속성으로 허브에 다시 보냅니다.

솔루션 대시보드에서 디바이스 쌍을 사용하여 디바이스의 속성을 설정하는 데 desired 속성을 사용할 수 있습니다. 일반적으로 디바이스는 허브에서 desired 속성 값을 읽어 내부 상태를 업데이트하고 reported 속성으로 변경을 다시 보고합니다.

참고

시뮬레이션된 디바이스 코드는 Desired.Config.TemperatureMeanValueDesired.Config.TelemetryInterval desired 속성만을 사용하여 IoT Hub로 다시 전송된 reported 속성을 업데이트합니다. 시뮬레이션된 디바이스에서 다른 모든 desired 속성 변경 요청은 무시됩니다.

메서드

시뮬레이션된 디바이스는 IoT Hub를 통해 솔루션 포털에서 호출된 다음 메서드(직접 메서드)를 처리할 수 있습니다.

메서드 Description
InitiateFirmwareUpdate 펌웨어 업데이트를 수행하도록 디바이스를 지시합니다.
다시 부팅 다시 부팅하도록 디바이스를 지시합니다.
FactoryReset 공장 재설정을 수행하도록 디바이스를 지시합니다.

일부 메서드는 reported 속성을 사용하여 진행 상태를 보고합니다. 예를 들어 InitiateFirmwareUpdate 메서드는 디바이스에서 업데이트 실행을 비동기적으로 시뮬레이션합니다. 메서드는 비동기 작업이 reported 속성을 사용하여 솔루션 대시보드에 상태 업데이트를 계속해서 다시 보내는 동안 디바이스에서 즉시 반환합니다.

명령

또한 시뮬레이션된 디바이스는 IoT Hub를 통해 솔루션 포털에서 보낸 다음 명령(클라우드-디바이스 메시지)을 처리할 수 있습니다.

명령 Description
PingDevice 디바이스에 ping 을 보내 활성 상태임을 확인합니다.
StartTelemetry 디바이스의 원격 분석 발신을 시작합니다.
StopTelemetry 디바이스의 원격 분석 발신을 차단합니다.
ChangeSetPointTemp 임의 데이터가 생성되는 지점 주위의 설정 지점 값을 변경합니다.
DiagnosticTelemetry 추가 원격 분석 값(externalTemp)을 보낼 디바이스 시뮬레이터를 트리거합니다.
ChangeDeviceState 디바이스의 확장된 상태 속성을 변경하고 디바이스로부터 받은 디바이스 정보 메시지를 전송합니다.

참고

이러한 명령(클라우드-디바이스 메시지) 및 메서드(직접 메서드)의 비교는 클라우드-디바이스 통신 지침을 참조하세요.

IoT Hub

IoT Hub는 디바이스에서 클라우드로 전송된 데이터를 수집하고 ASA(Azure Stream Analytics) 작업에 사용할 수 있도록 합니다. 각 스트림 ASA 작업은 디바이스에서 메시지 스트림을 읽는 데 별도 IoT Hub 소비자 그룹을 사용합니다.

또한 솔루션에서 IoT Hub는:

  • 포털에 연결하도록 허용되는 모든 디바이스의 ID 및 인증 키를 저장하는 ID 레지스트리를 유지 관리합니다. ID 레지스트리를 통해 디바이스를 활성화 및 비활성화할 수 있습니다.
  • 솔루션 포털을 대신하여 명령을 디바이스에 보냅니다.
  • 솔루션 포털을 대신하여 디바이스에서 메서드를 호출합니다.
  • 등록된 모든 디바이스에 대한 디바이스 쌍을 유지 관리합니다. 디바이스 쌍은 디바이스에서 보고한 속성 값을 저장합니다. 또한 디바이스 쌍은 다음에 연결할 때 검색하는 디바이스에 대해 솔루션 포털에서 설정한 desired 속성을 저장합니다.
  • 여러 디바이스에 대한 속성을 설정하거나 여러 디바이스에서 메서드를 호출하는 작업을 예약합니다.

Azure Stream Analytics

원격 모니터링 솔루션에서 ASA(Azure Stream Analytics)는 처리 또는 스토리지을 위해 다른 백 엔드 구성 요소에 IoT Hub에서 수신한 디바이스 메시지를 디스패치합니다. 다른 ASA 작업은 메시지의 내용을 기반으로 특정 기능을 수행합니다.

작업 1: 디바이스 정보 는 들어오는 메시지 스트림에서 디바이스 정보 메시지를 필터링하고 이벤트 허브 엔드포인트로 보냅니다. 디바이스는 시작 시 그리고 SendDeviceInfo 명령에 반응하여 디바이스 정보 메시지를 보냅니다. 이 작업은 다음 쿼리 정의를 사용하여 디바이스 정보 메시지를 식별합니다.

SELECT * FROM DeviceDataStream Partition By PartitionId WHERE  ObjectType = 'DeviceInfo'

이 작업은 추가 처리를 위해 이벤트 허브에 해당 출력을 보냅니다.

작업 2: 규칙 은 디바이스 단위 임계값에 대해 들어오는 온도 및 습도 원격 분석 값을 평가합니다. 임계값은 솔루션 포털에서 사용할 수 있는 규칙 편집기에서 설정됩니다. 각 디바이스/값 쌍은 참조 데이터로서 Stream Analytics에서 읽는 Blob의 타임스탬프에 의해 저장됩니다. 작업은 디바이스에 대해 설정한 임계값에 대해 비지 않은 값을 비교합니다. '>' 조건을 초과하는 경우 작업은 임계값이 초과되었음을 나타내는 경보 이벤트를 출력하고 디바이스, 값 및 타임스탬프 값을 제공합니다. 이 작업은 다음 쿼리 정의를 사용하여 알람을 트리거해야 하는 원격 분석 메시지를 식별합니다.

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 Storage로 보냅니다. 두 번째 방식은 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 작업은 Event Hubs에 해당 데이터를 출력하여 WebJob에서 실행되는 이벤트 프로세서에 안전하게 전달합니다.

Azure Storage

솔루션은 Azure Blob Storage를 사용하여 솔루션의 디바이스에서 모든 원시 데이터 및 요약된 원격 분석 데이터를 유지합니다. 포털은 차트를 채우기 위해 Blob Storage에서 원격 분석 데이터를 참고합니다. 경고를 표시하려면 솔루션 포털이 원격 분석 값이 구성된 임계값을 초과하는 시기를 기록한 Blob Storage에서 데이터를 읽습니다. 또한 솔루션은 Blob Storage를 사용하여 솔루션 포털에서 사용자가 설정한 임계값을 기록합니다.

WebJobs

디바이스 시뮬레이터를 호스팅하는 것 외에도 솔루션의 WebJobs는 명령 응답을 처리하는 Azure WebJob에서 실행되는 이벤트 프로세서를 호스팅합니다. 명령 응답 메시지를 사용하여 디바이스 명령 기록(Cosmos DB 데이터베이스에 저장됨)을 업데이트합니다.

Cosmos DB

솔루션은 Cosmos DB 데이터베이스를 사용하여 솔루션에 연결된 디바이스에 대한 정보를 저장합니다. 이 정보에는 솔루션 포털에서 디바이스에 전송된 명령 및 솔루션 포털에서 호출된 메서드의 기록이 포함됩니다.

솔루션 포털

솔루션 포털은 미리 구성된 솔루션의 일부로 배포된 웹앱입니다. 솔루션 포털의 키 페이지는 대시보드 및 디바이스 목록입니다.

대시보드

웹앱의 이 페이지는 PowerBI javascript 컨트롤(PowerBI-시각 리포지토리 참조)을 사용하여 디바이스에서 원격 분석 데이터를 시각화합니다. 솔루션은 ASA 원격 분석 작업을 사용하여 Blob Storage에 원격 분석 데이터를 작성합니다.

디바이스 목록

솔루션 포털의 이 페이지에서 다음을 수행할 수 있습니다.

  • 새 디바이스를 프로비전합니다. 이 작업은 고유 디바이스 ID를 설정하고 인증 키를 생성합니다. 디바이스에 대한 정보를 IoT Hub ID 레지스트리와 솔루션 관련 Cosmos DB 데이터베이스 모두에 기록합니다.
  • 디바이스 속성을 관리합니다. 이 작업은 기본 속성 보기 및 새 속성으로 업데이트를 포함합니다.
  • 명령을 디바이스로 보냅니다.
  • 디바이스의 명령 기록을 봅니다.
  • 디바이스를 활성화하고 비활성화합니다.

다음 단계

다음 TechNet 블로그 게시물은 미리 구성된 원격 모니터링 솔루션에 대한 더 많은 정보를 제공합니다.

다음 문서를 참조하여 IoT Suite 시작 작업을 계속할 수 있습니다.