안녕하세요
이번 시간에는 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에서 데이터를 가져올 수 있습니다.
감사합니다.
'Cloud > Amazon Cloud' 카테고리의 다른 글
[AWS] AWS SAM을 이용한 로컬 환경에서 Lambda-MySQL 연동하기 (0) | 2023.04.25 |
---|---|
[AWS] AWS CLI에 대해 알아보고 설치 및 IAM 생성 후 기본 설정하기 (0) | 2023.04.25 |
[AWS] matplotlib를 이용해 AWS CloudWatch 메트릭 정보를 시각화할 때 X축이나 Y축 값 반올림 처리하기 (0) | 2023.04.13 |
[AWS] AWS Hands-On 101 lab 2(4) - 커스텀 AMI 생성, EIP 변경하기 (0) | 2022.12.23 |
[AWS] AWS Hands-On 101 lab 2(3) - 스토리지 서비스 구성(EBS), Session Manager를 이용한 EC2 인스턴스 접속, Web Root Path 변경하기 (0) | 2022.12.22 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!