지난 기사 에서 우리는 오늘날 데이터 중심 세계에서 기하급수적으로 증가하는 이벤트에 대해 논의했습니다. 우리 주변에는 수많은 앱, 스마트 기기, 기계가 있기 때문에 생성되는 데이터의 양이 엄청납니다. 또한 오케스트레이션 플랫폼이 이러한 이벤트를 적절한 애플리케이션에 전달하는 데 어떻게 도움이 될 수 있는지도 살펴보았습니다. 그러나 이벤트를 전달하는 것만으로는 기업이 영향을 미치기에 충분하지 않을 수 있습니다.
이러한 이벤트를 분석하여 사용자의 행동을 이해함으로써 기업은 더 현명한 결정을 내려 고객에게 더 나은 서비스를 제공할 수 있습니다. 실시간 분석 플랫폼은 이벤트 데이터를 의미 있는 인텔리전스로 변환하는 데 도움이 될 수 있습니다.
이 문서에서는 AWS를 사용하여 실시간 분석 플랫폼을 구축하는 방법, 가능한 솔루션을 평가하는 방법, 확장 가능하고 안정적인 플랫폼을 구현하기 위한 단계별 가이드를 제공합니다. 이 플랫폼을 구축하는 데는 데이터 수집, 처리, 쿼리의 세 단계가 포함됩니다. 실시간 분석은 종종 사용자 행동이든 시스템 성능이든 시간 경과에 따른 추세와 패턴에 초점을 맞춥니다.
시계열 데이터는 자연스럽게 이벤트를 순서대로 구성하여 순간마다 데이터를 쉽게 분석할 수 있습니다. 시계열 스토리지는 이러한 요구 사항과 완벽하게 일치하여 애플리케이션이 메트릭을 계산할 수 있도록 합니다. AWS는 SQS, Lambda, Timestream, Quicksight와 같은 도구를 제공하여 이 플랫폼을 구축하기 위해 원활하게 함께 작동합니다.
실시간 분석 플랫폼을 구축하는 데는 세 가지 주요 부분이 포함됩니다.
시각화 및 쿼리 : 사용자 정의 대시보드 또는 Quicksight는 시각화 및 통찰력을 위해 Timestream과 통합될 수 있습니다.
아래 다이어그램은 분석 플랫폼의 아키텍처를 보여줍니다.
AWS의 시계열 데이터베이스인 Amazon Timestream 은 방대한 양의 데이터를 효율적으로 처리하고 분석하는 과제를 충족하도록 설계되었습니다. Timestream은 서버리스이고 확장 가능하며 실시간 데이터 분석이 필요한 애플리케이션에 이상적입니다. 주요 기능은 다음과 같습니다.
필요한 모든 리소스에 대한 클라우드 형성(CFN) 템플릿은 Github Repo 에서 찾을 수 있습니다.
데이터 수집
서비스는 시스템의 메시지 큐 역할을 하는 SQS 큐에 관련 이벤트를 게시할 수 있습니다. 안정성을 높이기 위해 기본 SQS 큐 옆에 데드 레터 큐(DLQ)가 구성됩니다. 처리되지 않은 이벤트는 재시도 임계값 이후 DLQ로 이동합니다. 이러한 이벤트는 디버깅, 오류 처리 및 조사에 추가로 사용할 수 있습니다.
아래는 SQS 대기열과 관련 DLQ를 생성하는 CFN 템플릿의 스니펫입니다.
EventQueueDLQ: Description: 'An DLQ queue that receives failed events' Type: AWS::SQS::Queue Properties: FifoQueue: true ContentBasedDeduplication: true QueueName: !Ref DLQQueueName SqsManagedSseEnabled: true VisibilityTimeout: 240 EventQueue: Description: 'An SQS queue that receives events' Type: 'AWS::SQS::Queue' Properties: QueueName: !Ref SQSQueueName FifoQueue: true ContentBasedDeduplication: true KmsMasterKeyId: alias/aws/sqs VisibilityTimeout: 240 RedrivePolicy: deadLetterTargetArn: !Sub ${EventQueueDLQ.Arn} maxReceiveCount: 5
데이터 처리
AWS Lambda 함수는 SQS 대기열에 게시된 이벤트를 처리하고 처리하는 데이터 프로세서로 구성됩니다. 처리 후 이벤트를 메트릭으로 Timestream 데이터베이스에 푸시합니다.
아래는 Lambda용 CFN 템플릿의 스니펫과 SQS에 대한 매핑입니다.
EventProcessorLambda: Type: 'AWS::Lambda::Function' Description: 'Lambda function that processes events from the SQS queue and writes to Timestream.' Properties: FunctionName: !Ref LambdaFunctionName Handler: 'index.lambda_handler' Role: !GetAtt LambdaExecutionRole.Arn Runtime: 'python3.12' MemorySize: 1024 Timeout: 120 Environment: Variables: TIMESTREAM_DATABASE_NAME: !Ref EventsDatabaseName TIMESTREAM_TABLE_NAME: !Ref EventsTableName Code: ZipFile: | # Lambda function code goes here SQSToLambdaEventSourceMapping: Type: 'AWS::Lambda::EventSourceMapping' Description: 'Maps the SQS queue as the event source for the Lambda function.' Properties: BatchSize: 10 EventSourceArn: !GetAtt EventQueue.Arn FunctionName: !GetAtt EventProcessorLambda.Arn Enabled: 'True'
데이터 저장소
Amazon Timestream은 다양한 서비스에서 생성된 모든 이벤트에 대한 기본 데이터 저장소 역할을 합니다. 설정에는 다음이 포함됩니다.
아래는 Timestream 데이터베이스와 테이블을 만드는 CFN 템플릿의 스니펫입니다.
EventsDatabase: Description: 'Timestream database to store event data' Type: 'AWS::Timestream::Database' Properties: DatabaseName: !Ref EventsDatabaseName KmsKeyId: alias/aws/timestream EventsTable: Description: 'Timestream table that stores event metrics' Type: 'AWS::Timestream::Table' DependsOn: EventsDatabase Properties: DatabaseName: !Ref EventsDatabase TableName: !Ref EventsTableName RetentionProperties: MemoryStoreRetentionPeriodInHours: 72 MagneticStoreRetentionPeriodInDays: 365
시각화 및 쿼리
질문
Timestream은 사용자가 테이블에 대해 쿼리를 실행할 수 있는 쿼리 콘솔을 제공합니다. 예:
-- Get the 10 most recent metrics in the past 15 minutes. SELECT * FROM "events-db"."events-metrics" WHERE time between ago(15m) and now() ORDER BY time DESC LIMIT 10
심상
AWS는 Timestream과 즉시 사용 가능한 통합(예: QuickSight , Grafana )을 많이 제공하여 쉽게 분석, 시각화하고 통찰력을 얻을 수 있습니다.
서비스는 다음 형식으로 이벤트를 SQS에 게시하여 전체 처리 흐름을 트리거할 수 있습니다.
{ "order_id": "test-order-1", "customer_id": "test-customer-1", "event_type": "order_success", "metric_value": 1 }
이 아키텍처는 확장 가능하고 안정적인 분석 플랫폼을 구축하는 간단하고 효율적인 방법을 제공합니다. 이벤트 처리를 위한 AWS Kinesis Streams, 데이터 저장소를 위한 Prometheus, 일괄 처리 및 분석을 위한 S3+Athena를 포함하여 특정 요구 사항에 따라 다른 대안이 있습니다.