Cloud/Amazon Cloud

[AWS] Boto3를 이용해 CloudWatch에서 메트릭 데이터 가져오기

__Evening 2023. 4. 13. 16:07
반응형

안녕하세요

 

이번 시간에는 Python에서 제공하는 라이브러리인 Boto3를 이용해 CloudWatch에서

메트릭 데이터를 가져오는 실습을 진행하겠습니다.

 

1. Boto3로 CloudWatch에서 메트릭 데이터 가져오기(+matplotlib를 이용한 시각화)

import boto3
import matplotlib.pyplot as plt
import datetime
import pytz

# AWS 계정의 액세스 키와 시크릿 키
ACCESS_KEY = 'your_access_key'
SECRET_KEY = 'your_secret_key'
REGION_NAME = 'your_region'

# CloudWatch 클라이언트 생성
session = boto3.Session(
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    region_name=REGION_NAME
)

cloudwatch = session.client('cloudwatch')

# 한국 표준시 설정
KST = pytz.timezone('Asia/Seoul')

# 메트릭 데이터 조회
now = datetime.datetime.now(tz=pytz.utc).astimezone(KST)
utc_offset = datetime.timedelta(hours=9)
start_time = (now - datetime.timedelta(hours=1)).isoformat()
end_time = now.isoformat()
response = cloudwatch.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'm1',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/EC2',
                    'MetricName': 'CPUUtilization',
                    'Dimensions': [
                        {
                            'Name': 'InstanceId',
                            'Value': instance_id
                        },
                    ]
                },
                'Period': 300,
                'Stat': 'Average',
                'Unit': 'Percent'
            },
            'ReturnData': True
        },
    ],
    StartTime=start_time,
    EndTime=end_time
)

print(response)

# 데이터 시각화
timestamps = response['MetricDataResults'][0]['Timestamps']
values = response['MetricDataResults'][0]['Values']

# 그래프 생성
timestamps_kst = [timestamp.astimezone(KST) for timestamp in timestamps]
plt.figure(figsize=(10, 5))
plt.plot(timestamps_kst, values)
plt.xlabel('Time')
plt.ylabel('CPU Utilization (%)')
plt.title('EC2 CPU Utilization')
plt.show()
plt.savefig('./graph/cpu_util.png')

다음 코드에서 Access Key, Secret Key, Region 값을 Session 값에 설정한 후 Cloudwacth client를 이용할 수 있는데

client를 이용하여 Cloudwatch 데이터를 get_metric_data 함수로 가져올 수 있습니다.

 

2. get_metric_data() 함수와 속성 값

get_metric_data() AWS CloudWatch Metrics API를 사용하여 하나 이상의 메트릭 데이터 포인트 집합을 검색하는 함수
MetricDataQueries CloudWatch 메트릭 데이터를 조회하기 위한 필수 매개변수
Id 이 요청을 식별하기 위한 문자열 ID
MetricStat 조회할 메트릭에 대한 정보를 담은 객체
Metric 조회할 메트릭에 대한 정보를 담은 객체
Namespace 조회할 메트릭의 네임스페이스
MetricName 조회할 메트릭의 이름
Dimensions 조회할 메트릭의 디멘젼 정보(옵션)
Period 메트릭 데이터의 간격을 초 단위로 지정
Stat 조회할 메트릭의 통계 종류를 지정(예: Sum, Average, Maximum, Minimum 등)
Unit 조회할 메트릭의 단위를 지정(옵션, 예: igabits/Second, Gigabits, Percent, Terabits, Bits, Kilobits, Megabytes/Second, Kilobytes, Megabits/Second, Terabytes, Bytes, Count, Gigabytes, Milliseconds, Count/Second, Gigabytes/Second, None, Terabytes/Second, Bytes/Second, Megabits, Kilobytes/Second, Megabytes, Microseconds, Kilobits/Second, Terabits/Second, Bits/Second, Seconds)
ReturnData 조회 결과를 반환할 지 여부를 지정
StartTime 메트릭 데이터를 가져올 시작 시간 지정
EndTime 메트릭 데이터를 가져올 끝 시간 지정

위에서 response 값을 출력해보면 다음과 같은 MetricDataResults를 확인할 수 있는데 여기서 중요한 것은 Values 값입니다. Values 값이 실제 지표의 상태를 단위로서 나타낸 값이기 때문에 저의 경우 [Unit: Percent]이기 때문에 0.2%, 0.33% 등의 값이 그래프에 표시됩니다.

 

3. 각 속성을 AWS CloudWatch에서 확인해 보기

AWS 콘솔에서 [CloudWatch]를 선택하여 들어갑니다.

 

좌측 대시보드에서 [지표] - [모든 지표]를 눌렀을 때 [Namespace]를 확인할 수 있습니다. 

 

CloudWatch에서 Basic으로 제공하고 있는 [CPUUtilization] 메트릭을 검색합니다.

 

그중에서 아무거나 선택하는데 저는 [EC2 > 인스턴스별 지표]를 선택해 보겠습니다.

 

여기서 [InstanceId] 값은 Dimensions[Value] 값이고 [지표 이름]은 MetricName입니다.

 

그래프에서 보이는 값들은 순서대로 [Unit, StartTime, Period, EndTime]을 나타냅니다.

 

이번 시간에는 Boto3를 이용하여 Cloudwatch에서 메트릭 데이터를 가져오는 실습을 진행했습니다.

get_metric_data 함수와 많은 속성들에 대해 알아봤는데 이 내용을 활용하여 Cloudwatch에서 데이터를 가져올 수 있습니다. 

 

감사합니다.

반응형