BLOG

AWS IoT Analytics 및 Amazon CloudWatch를 통한 실시간 메트릭스
작성일: 2018-12-21

당사의 AWS IoT Analytics 제품과 관련하여 고객이 자주 제기하는 질문은 IoT Analytics를 통해 흐르는 데이터의 실시간 대시보드를 어떻게 달성하느냐 하는 것입니다. 이 글에서는 Amazon CloudWatch와 파이프라인의 AWS Lambda 활동을 활용하여 실시간 메트릭스를 달성하는 한 가지 패턴을 보여 드리겠습니다.

물리적 디바이스를 구성 및 관리하거나 시간이 많이 걸리는 스크립트를 개발할 필요 없이 수백 개의 가상 연결 디바이스를 생성 및 시뮬레이션할 수 있는 솔루션인 IoT Device Simulator와 함께 사용할 때 메시지를 지속적으로 전송하는 25개의 스마트 펌프 디바이스를 시뮬레이션해 보았습니다. 이 스마트 펌프는 온도, 습도, 압력 및 진동 데이터를 보고합니다. 디바이스들의 메시지는 Amazon S3 버킷으로 들어갑니다. 이러한 스마트 펌프를 통해 흐르는 데이터를 실시간으로 시각화하여 비정상적인 패턴이나 위험한 패턴을 찾아 능동적으로 수리할 수 있도록 하십시오.

IoT Analytics는 몇 분 만에 설정할 수 있는 대시보드 및 분석 워크플로우를 구축할 수 있도록 지원하므로 스마트 펌프에서 데이터를 시각화할 수 있습니다. IoT Analytics의 BatchPutMessage API를 사용하여 저장된 메시지를 채널에 전송합니다. 메시지는 채널에서 파이프라인으로 흘러들어와서 처리됩니다. 처리 후 파이프라인은 데이터 저장소로 메시지를 전송합니다. 그 파이프라인은 거의 실시간으로 정보를 얻을 수 있는 핵심입니다.
먼저 저는 채널의 메시지 속성을 침범할 때 파이프라인에서 디바이스가 보내는 속성을 봅니다.

스마트 펌프 메시지를 전달하는 파이프라인

 

이제 첫 번째 단계는 데이터를 Amazon CloudWatch로 라우팅하는 Lambda 함수를 만드는 것이며, 여기서 대시보드를 만들 것입니다. 이 예에서는 Lambda 함수 metrics_to_cloudwatch라고 이름 지었습니다. 일단 Lambda 함수가 생성되면, 활동으로 저희의 파이프라인에 추가될 수 있습니다.

IoT 분석에서 Lambda 활동

 

이 Lambda 함수가 어떻게 작동하는지 자세히 살펴봅시다. 파이프라인에 관련되었을 때, 이 Lambda는 그들이 받은 메시지를 단순히 돌려주어서 그들이 계속 처리될 수 있도록 합니다.

 

import json

import boto3

 

cloudwatch = boto3.client(‘cloudwatch’)

 

# You can change these payload attributes based on your device message schema

ATTRIBUTES = [“temperature”, “pressure”, “vibration”, “humidity”]

# The payload attribute which represents your device identifier

DEVICE_ID_ATTRIBUTE = “_id_”

# You can change this namespace name per your device and preferences

CLOUDWATCH_NAMESPACE = “SmartPump/Monitoring”

 

# Publish metric data to CloudWatch

def cw(deviceId, metricValue, metricName):

    metric_data = {

        ‘MetricName’: metricName,

        ‘Dimensions’: [{‘Name’: ‘DeviceId’, ‘Value’: deviceId}],

        ‘Unit’: ‘None’,

        ‘Value’: metricValue

    }

 

    cloudwatch.put_metric_data(MetricData=[metric_data],Namespace=CLOUDWATCH_NAMESPACE)

    return

 

# The handler loops through all the messages and evaluates if the message

#  has attributes for pressure, humidity, vibration or temperature.

#  These are the attributes that I want to graph in near real-time in

#  this example. If the attribute exists in the message, we call the cw()

#  function to emit the custom metric to Amazon CloudWatch.

def lambda_handler(event, context):

    for e in event:

        print(“Received a message: {}”.format(str(e)))

        # Validate this event payload contains a device ID

        if DEVICE_ID_ATTRIBUTE in e:

            # Iterate through each attribute we want to publish to CloudWatch

            for attribute in ATTRIBUTES:

                # Validate the event payload contains the current attribute

                if attribute in e:

                    print(“publishing {} to CloudWatch”.format(attribute))

                    cw(e[DEVICE_ID_ATTRIBUTE],e[attribute], attribute)

 

    return event

 

코드가 자체 설명되기를 바라지만, 기본적으로 발생하는 것은 파이프라인의 Lambda 함수가 일련의 메시지를 전달하며, 활동에 대해 구성한 배치 크기에 따라 배열의 크기가 달라집니다. 기본값 1은 각 개별 메시지에 대해 Lambda 함수가 호출됨을 의미하며, 메시지가 몇 초마다 채널에 도착하는 시나리오에 적합합니다. 수신 메시지의 빈도가 높거나(예: 매 밀리초) BatchPutMessage API가 한 번에 여러 메시지를 채널에 넣을 때 Lambda 실행을 통합하기 위해 배치 크기를 1보다 크게 설정할 수 있습니다.

 

중요한 권한 단계는 사용자가 Amazon CloudWatch에 액세스할 수 있도록 Lambda 함수 권한을 부여했는지 확인해야 한다는 것입니다.

Lambda 기능은 Amazon CloudWatch로 메시지를 전송할 수 있음

 

또한 IoT Analytics에 Lambda 함수를 호출할 수 있는 권한을 부여했는지 확인하시고, 다음과 같은 AWS CLI 명령을 사용하여 이 작업을 수행할 수 있습니다.

 

aws lambda add-permission –*function*-name metrics_to_cloudwatch –statement-id

metrics_to_cloudwatch_perms –principal iotanalytics.amazonaws.com –action

lambda:InvokeFunction

 

이 문제를 잊고 로깅 옵션을 구성한 경우(CloudWatch 로그 설정 설명서 참조), Amazon CloudWatch 로그 스트림 “aw/iotanalysis/pipeline”에 대해 이와 같은 오류 메시지가 표시됩니다.

 

[ERROR] Unable to execute Lambda function due to insufficient permissions; dropping

the messages, number of messages dropped : 1, functionArn : arn:aws:lambda:us-west-2:

<accountid>:function:metrics_to_cloudwatch

 

다 됐습니다! 이제 Amazon CloudWatch의 대시보드 기능을 사용하여 세부적인 시간 확인을 통해 그래프와 대시보드에 사용자 지정 메트릭을 표시할 수 있습니다. 예를 들어, 30초 간격의 제 데이터의 대시보드입니다.

Amazon CloudWatch에 표시되는 IoT Analytics Pipeline의 실시간 메트릭 예

 

이 실시간 대시보드를 사용하여 스마트 펌프의 고온에 대한 CloudWatch 알람을 생성했습니다. 이 알람은 온도 값이 허용 임계값을 초과할 때 알람을 울립니다.

Amazon CloudWatch의 경보 예

 

결론적으로, AWS IoT Analytics 파이프라인에서 사용할 수 있는 Lambda 활동을 활용하여 AWS CloudWatch의 거의 실시간 대시보드로 원하는 메시지 속성을 라우팅하고 필요할 때 경보를 트리거하는 방법을 살펴보았습니다.

 

원문 URL : https://aws.amazon.com/ko/blogs/iot/real-time-metrics-with-aws-iot-analytics-and-amazon-cloudwatch/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.