BLOG
당사의 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페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.