Amazon Web Services 한국 블로그

Amazon Lookout for Equipment로 설비 데이터 실시간 전송하기

설비의 가동률을 높이려고 하는 많은 제조 기업들이 제조 설비에 부착된 센서를 통해서 설비 이상 예측을 하기 위해서 대용량 센서 데이터를 모니터링하고 있습니다. 하지만, 많은 수의 센서를 사람이 직접 보고 설비의 이상 유무를 판단하는 것은 한계가 있습니다. 설비 이상 예측을 성공적으로 구현하려면 많은 기계 센서에서 수집된 특정 데이터를 기계학습(ML)에 적용하여 매우 정확한 예측을 수행해야 합니다. 그러나 장비에 맞는 기계 학습 솔루션을 구현하려면 어렵고 시간이 오래 걸릴 수 있습니다. 이 글에서는 설비의 센서 데이터를 실시간으로 Amazon S3로 보내고 Amazon Lookout for Equipment가 이해할 수 있는 형태로 데이터를 변환하여 설비의 이상을 예측하는 방법을 소개합니다.

Amazon Lookout for Equipment란?

Amazon Lookout for Equipment는 장비 이상 동작을 감지하여 적합한 조치를 취하고 예기치 않은 다운 타임을 방지할 수 있도록 하는 Machine Learning(ML) 산업용 장비 모니터링 서비스입니다.

  1. 기존 센서의 데이터를 사용하여 장비에 맞는 사용자 지정 기계 학습 모델을 구축합니다.
  2. 하나의 모델에서 과거 로그와 함께 최대 300개의 센서 데이터를 처리하여 장비가 비정상적으로 작동할 때 정확한 경고를 제공합니다.
  3. 장비를 자동으로 모니터링하고 정상 작동과 비교하여 이상 징후를 식별합니다. 그런 다음 이상 징후를 나타내는 센서를 정확히 찾아주므로 신속하게 대응할 수 있습니다.

AWS IoT Core란?

AWS IoT Core는 연결된 디바이스가 쉽고 안전하게 클라우드 애플리케이션 및 다른 디바이스와 상호 작용할 수 있게 해주는 관리형 클라우드 플랫폼입니다. AWS IoT Core는 수십억 개의 디바이스와 수조 건의 메시지를 지원하고, 안전하고 안정적으로 이러한 메시지를 처리하여 AWS 엔드포인트 및 다른 디바이스로 라우팅할 수 있습니다. AWS IoT Core의 경우, 디바이스가 연결되어 있지 않더라도 언제든 애플리케이션에서 모든 디바이스를 추적하고 디바이스와 통신할 수 있습니다.

AWS IoT Core에는 연결된 디바이스에서 보낸 데이터를 지속적으로 처리해 주는 규칙 엔진도 포함됩니다. 데이터를 필터링하고 변환하도록 규칙을 구성할 수 있습니다. 또한, 추가 처리, 저장 또는 분석을 위해 Lambda를 통해 다른 AWS 서비스뿐만 아니라 비 AWS 서비스로 데이터를 라우팅하도록 규칙을 구성할 수 있습니다.

AWS IoT Core를 이용하여 Amazon S3로 센서 데이터 보내기

AWS IoT Core가 받은 MQTT 메시지를 규칙 엔진을 만들고 Amazon Kinesis Data Firehose 전송 스트림으로 보내서 Amazon S3에 저장하겠습니다.

AWS IoT Core의 Rules 메뉴에서 Create a rule을 눌러 규칙 엔진을 만듭니다.

관리 콘솔에서 규칙을 작성하거나 유사 SQL 구문을 사용하여 규칙을 작성할 수 있습니다. 규칙은 메시지의 콘텐츠에 따라 다르게 동작하도록 작성할 수 있습니다. 예를 들어, 특정 센서들에 대한 데이터를 선별하여 Amazon Kinesis로 전송하여 S3에 저장하도록 할 수 있습니다.

또한 규칙 엔진은 AWS IoT Analytics, AWS IoT Events, AWS Lambda, Amazon Kinesis, Amazon S3, Amazon DynamoDB, Amazon CloudWatch, Amazon Simple Notification Service(SNS), Amazon Simple Queue Service (SQS), Amazon OpenSearch Service (Amazon Elasticsearch Service 후속)AWS Step Functions를 포함하여 AWS 엔드포인트로 메시지를 라우팅할 수 있습니다. 외부 엔드 포인트에는 AWS Lambda, Amazon Kinesis, Amazon SNS 및 규칙 엔진의 네이티브 HTTP 작업을 사용하여 연결할 수 있습니다.

규칙 엔진에 해당하는 메시지를 Amazon Kinesis Data Firehose 전송 스트림으로 보냅니다.

Create a new resource 버튼을 눌러서 Amazon Kinesis Data Firehose 전송 스트림을 새롭게 생성합니다.

Amazon Kinesis Data Firehose 전송 스트림에서는 데이터의 목적지로 Amazon S3를 선택하여 AWS IoT Core에서 받은 센서 데이터를 S3에 저장할 수 있습니다.

AWS Lambda를 이용해서 Amazon Lookout for Equipment가 이해하는 형태로 메시지 저장

S3에 저장된 센서 데이터를 Amazon Lookout for Equipment가 이해하는 형태로 변환해 주는 것이 필요합니다. Lookout for Equipment는 CSV 파일을 읽어서 설비 이상 유무를 추론합니다. Amazon Kinesis Data Firehose 전송 스트림에서 S3에 JSON 파일을 저장하면 S3에 JSON 파일이 저장되었다는 이벤트를 받아서 AWS Lambda를 호출시킬 수 있습니다. 아래와 같은 코드를 실행하여 JSON을 CSV로 변환합니다. 자습서: Amazon S3 트리거를 사용하여 Lambda 함수 호출을 참고하여 Amazon S3 버킷에 객체를 추가할 때마다 함수를 호출하도록 합니다.

def lambda_handler(event, context):
    client = boto3.client('s3')
    lambda_tmp_dir = '/tmp'
    
    # Amazon Lookout for Equipment가 추론할 센서 데이터 파일 경로
    s3_csv_dir = 'data/scheduled_inference/input'
    output_file_list = []
    for r in event['Records']:
        s3 = r['s3']
        bucket = s3['bucket']['name']
        key = s3['object']['key']
        
        # S3에서 파일을 다운받아서 Lambda에 저장
        local_source_json = lambda_tmp_dir + "/" + key
        directory = os.path.dirname(local_source_json)
        if not os.path.exists(directory):
            os.makedirs(directory)
        client.download_file(bucket, key, local_source_json)
        
        # JSON으로 되어있는 센서 데이터 파일을 CSV로 변환
        output_file_list = convert_json_2_csv(local_source_json)
        
        # 변환된 CSV 파일을 Amazon Lookout for Equipment가 추론하기 위해 바라보고 있는 S3로 전송
        for local_csv_file in output_file_list:
            basename = os.path.basename(local_csv_file)
            full_key = "{0}/{1}".format(s3_csv_dir, basename)
            logger.debug('uploading to S3 bucket: {}, key: {}'.format(bucket, full_key))
            client.upload_file(local_csv_file, bucket, full_key)
            
    return True

더 자세한 코드는 Amazon Lookout for Equipment 예문 github에서 확인할 수 있습니다.

Amazon Kinesis Data Firehose 전송 스트림이 S3에 저장한 sensordata.json 파일은 아래와 같습니다.

sensordata.json

{
    "Timestamp": "2022-02-11 09:34:42",
    "signal-020": "0.84584323",
    "signal-021": "0.825545555",
    "Component": "subsystem-01"
}{
    "Timestamp": "2022-02-11 09:34:42",
    "signal-022": "0.41568561",
    "signal-023": "0.461784714",
    "Component": "subsystem-02"
}{
    "Timestamp": "2022-02-11 09:35:42",
    "signal-020": "0.853463464",
    "signal-021": "0.87345734",
    "Component": "subsystem-01"
}{
    "Timestamp": "2022-02-11 09:35:42",
    "signal-022": "0.436343463",
    "signal-023": "0.434534636",
    "Component": "subsystem-02"
}

Amazon Lookout for Equipment는 컴포넌트별로 CSV 파일을 나눠야 하며 파일의 이름은 ComponentName_%Y%m%d%H%M%S.csv 형식입니다. 위의 파일을 아래와 같이 변환할 수 있습니다.

subsystem-01_20220211093442.csv

Timestamp,signal-020,signal-021
2022-02-11 09:34:42,0.84584323,0.825545555
2022-02-11 09:35:42,0.853463464,0.87345734

subsystem-02_20220211093442.csv

Timestamp,signal-022,signal-023
2022-02-11 09:34:42,0.41568561,0.461784714
2022-02-11 09:35:42,0.436343463,0.434534636

Amazon Lookout for Equipment에서 실시간 설비 이상 유무 예측

Amazon Lookout for Equipment에서 Schedule inference를 수행하여 학습된 모델을 이용하여 추론을 시작할 수 있습니다. Amazon Lookout for Equipment의 모델을 학습하는 방법은 Amazon Lookout for Equipment Getting Started에서 확인할 수 있습니다.

학습한 모델을 선택하고 실시간으로 들어온 센서의 CSV 파일이 있는 경로를 추가하고 추론한 결과 데이터를 저장할 S3 경로를 넣어주면 추론을 시작할 수 있습니다.

추론의 결과는 Output data S3 location에 JSONL 형태로 저장됩니다.

results.jsonl

{"timestamp": "2022-02-11T22:25:00.000000", "prediction": 1, "diagnostics": [{"name": "subsystem-01\\signal-020", "value": 0.2346}, {"name": "subsystem-01\\signal-021", "value": 0.000}, {"name": "subsystem-02\\signal-022", "value": 0.1043}, {"name": "subsystem-02\\signal-023", "value": 0.0891}]}
{"timestamp": "2022-02-11T22:26:00.000000", "prediction": 0}
{"timestamp": "2022-02-11T22:27:00.000000", "prediction": 0}
{"timestamp": "2022-02-11T22:28:00.000000", "prediction": 0}
{"timestamp": "2022-02-11T22:29:00.000000", "prediction": 1, "diagnostics": [{"name": "subsystem-01\\signal-020", "value": 0.2134}, {"name": "subsystem-01\\signal-021", "value": 0.000}, {"name": "subsystem-02\\signal-022", "value": 0.1022}, {"name": "subsystem-02\\signal-023", "value": 0.0612}]}

마무리

설비의 데이터를 실시간으로 Amazon Lookout for Equipment로 보내서 설비의 이상 예측하는 방법을 알아보았습니다. 또한 Amazon S3에 설비 데이터를 모아서 사후 분석을 할 수도 있습니다. 설비의 고장을 예측하여 적절한 시기에 설비를 수리하고 설비 가동률을 높이는 것은 제조업에 혁신을 가져다줍니다. Amazon Lookout for Equipment에 대한 자세한 내용은 Amazon Lookout for Equipment 사용자 가이드를 통해 더 많은 정보를 접하실 수 있습니다. 또한 Amazon Lookout for Equipment API를 쿼리 하는 방법에 대한 실습은 Amazon Lookout for Equipment Getting Started에서 확인하실 수 있습니다. 주피터 노트북을 통한 설비에 대한 이상 탐지 애플리케이션을 구축하는 방법은 Amazon Lookout for Equipment 데모를 참고해 주세요.

– 문태양, AWS 솔루션즈 아키텍트