AWS ETC/AWS 알아두면 좋은 지식

[AWS] CloudWatch agent를 통한 Group 레벨 메모리 메트릭 관찰하기

[앙금빵] 2023. 11. 10.

 

Goal

Auto Scaling Group 내 인스턴스들의 Memory 지표값들을 Group Level에서 산출하여 관측하는 것을 목적으로 한다.

 

Issue

Cloudwatch agent 설치시 인스턴스 개별적으로만 메모리 메트릭이 확인 가능한 상황이다. 인스턴스들의 메모리 메트릭을 그룹 레벨에서(인스턴스 집합의 평균 값) 확인을 해야하는 경우 별도 설정이 추가적으로 요구되어진다.

 

Solution

Config 파일 설정 및 내용 적용은 ASG group instance 모든 인스턴스 대상으로 공통적으로 적용을 진행해야 한다. 그렇기에 골든이미지로 별도로 구성하는 것이 효율적이다. 만약 당장 골든 이미지에 적용하기 어려운 환경이라면 앤서블이나 SSM Run command 기능을 활용하여 일괄적으로 적용이 필요하다.  (필자는 SSM Run command를 통해 해당 기능을 배포하였고 다음 골든 이미지 업데이트 시기까지 /etc/rc.local에서 cwagent config가 적용되는 스크립트를 부팅될 시 실행되어지도록 설정하였다.)

 

<스크립트 내용>

(1) /opt/aws/amazon-cloudwatch-agent/etc 경로에 config 파일 덮어 씌우기
(config 파일 내용 아래 Step 1 참조)

cp /your_path/config.json /opt/aws/amazon-cloudwatch-agent/etc/config.json

 

(2) config 파일 내용 적용

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/config.json

 


이제, 수동으로 cwagent 설정 구성을 진행하는 방법에 대해서 알아보자.

 

Step 1. config 파일 작성

디렉토리: /opt/aws/amazon-cloudwatch-agent/etc/config.json (개인 맞춤 설정 가능)

파일내용:

{
    "agent": {
        "run_as_user": "cwagent"
    },
    "metrics": {
        "aggregation_dimensions" : [["AutoScalingGroupName"]],
        "metrics_collected": {
            "mem": {
                "measurement": ["mem_used_percent"]
            },
            "disk": {
                "measurement": ["used_percent"],
                "resources": ["*"]
            }
        },
        "append_dimensions": {
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}",
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
        }
    }
}

 

Step 2. config 내용 적용

#config 디렉토리가 "/opt/aws/amazon-cloudwatch-agent/etc"에 있는 경우
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/config.json

 

Step 3.  동작 확인 및 메트릭 생성확인

# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
>>
{
  "status": "running",
  "starttime": "2023-09-11T23:48:44+0000",
  "configstatus": "configured",
  "version": "1.300026.3"
}

 

상태 체크가 확인되면 이제 정상적으로 그룹레벨에서 메트릭 관찰이 가능한지 확인을 진행 해보자.

# Cloudwatch Metric 화면 (All > CWAgent 항목에서 'AutoScalingGroupName' 항목이 보여야 한다.)

 

# 들어가보면 mem_used_percent 항목이 보인다.

 

# Statistic=Sample Count, Period = 1 minute 으로 두었을 때, AutoScaling Group 인스턴스 개수와 동일하는지 확인해보자.

  • Sample Count = ASG 인스턴스 수와 동일하다면 정상적으로 설치에 성공한 것이다.
  • Period = 1 minute 으로 두는 이유는 cwagent가 1분주기로 메트릭을 수집하기 때문이다.

 

 

이제, Cloudwatch를 통해 그룹레벨에서 메모리 지표 확인이 가능하다.

 

이를 바탕으로 다른 Third Party tool과 연동이 가능하다. 필자는 그라파나에 적용하여 알람설정까지 적용한 상황이다.

 

참조

https://aws.amazon.com/ko/blogs/mt/create-amazon-ec2-auto-scaling-policy-memory-utilization-metric-linux/

 

댓글