[AWS CloudWatch] CloudWatch Agent와 stress를 통해 스왑 메모리 사용량 지표 추출하기
CloudWatch Agent를 설정하여 스왑 메모리 사용량 지표를 수집하고 전송하도록 구성해보겠습니다. 또한 구성 후 스왑 메모리를 할당하고 stress 명령을 실행하여 지표가 제대로 수집되는지 확인해보겠습니다.
저는 인스턴스 타입 t2.micro를 사용하고 Amazon Linux 2023을 사용했습니다.
1. EC2 → CloudWatch 로그 전송을 위한 권한 부여
가장 먼저 EC2에 IAM Role을 할당하여 로그를 전송할 권한을 부여합니다.
기본적으로 생성 시 인스턴스에 IAM Role이 할당되어 있지 않습니다. 매니지먼트 콘솔의 Instances에서 로그를 전송하고자 하는 인스턴스 선택 → Actions → Security → Modify IAM role 을 선택하여 IAM role 설정 창으로 이동합니다.
AWS는 AmazonEC2RoleForCloudWatch Role을 제공해줍니다. 이 Role은 CloudWatch Agent를 통해 CloudWatch로 로그를 전송하는 권한을 부여합니다. 직접 Role을 만들어서 사용하고자 한다면 CloudWatchAgentServerPolicy Policy를 포함한 Role을 생성하고 할당하세요. 자세한 방법은 다음을 참고하세요.
Role이 준비되었다면 Update IAM role 을 클릭하여 적용합니다.
2. CloudWatch Agent 설치
EC2 인스턴스에 CloudWatch Agent를 설치합니다.
sudo yum install amazon-cloudwatch-agent
3. CloudWatch Agent 설정 파일(amazon-cloudwatch-agent.json) 생성
amazon-cloudwatch-agent.json 파일을 생성하여 하단의 내용을 입력합니다.
vi amazon-cloudwatch-agent.json
amazon-cloudwatch-agent.json 내용:
{
"metrics": {
"namespace": "CustomMetrics",
"metrics_collected": {
"swap": {
"measurement": [
"used"
],
"metrics_collection_interval": 60
}
}
}
}
CloudWatch Agent는 단순히 스왑 메모리 사용량 뿐 아니라 굉장히 다양한 메트릭을 CloudWatch로 전송할 수 있습니다. 뿐만 아니라, EC2 인스턴스가 아닌 온프레미스 환경에서도 CloudWatch Agent를 설치한다면 Agent를 이용할 수 있습니다. Configuration File에 대한 자세한 내용은 다음을 참고하세요.
Configuration File에 대한 설명
- “metrics”: 해당 블럭은 CloudWatch Agent가 수집할 메트릭에 대한 구성을 정의합니다.
- “namespace”: (선택) 메트릭이 속할 CloudWatch 네임스페이스입니다.
- “metrics_collected”: (필수) 수집할 지표를 지정합니다. StatsD 또는 collectd를 통해 수집된 사용자 지정 지표를 포함합니다.
- “swap”: 스왑 메모리 지표가 수집됨을 나타냅니다. 이는 리눅스 인스턴스에만 유효합니다.
- “measurement”: 수집할 swap 지표의 배열을 지정합니다. free, used 및 used_percent 를 선택할 수 있습니다.
- “metrics_collection_interval”: 스왑 지표를 수집할 빈도를 지정합니다. 지정하지 않으면 agent 섹션에 지정되어 있는 글로벌 metrics_collection_interval 값을 사용할 수 있습니다.
4. CloudWatch Agent 시작
작성한 설정 파일을 기반으로 Agent를 시작합니다.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \\
-a fetch-config -m ec2 -c file:./amazon-cloudwatch-agent.json -s
5. CloudWatch 지표 확인
AWS Management Console의 CloudWatch 섹션에서 사용자 지정 네임스페이스(CustomMetrics)를 찾아 스왑 메모리 사용량을 확인합니다.
지표를 확인하는 방법
- AWS Management Console에서 CloudWatch를 검색하고 좌측의 Metrics → All metrics 를 선택합니다.
- Custom namespaces에 CustomMetrics가 생성된 것을 확인할 수 있습니다. 이를 선택하여 메트릭을 확인할 수 있습니다.
6. 스왑 메모리 할당
지표가 정상적으로 작동하는지 확인하기 위해 먼저 스왑 메모리를 할당합니다. 스왑 메모리를 할당하는 방법은 다음을 참고하세요.
다음의 명령어를 입력합니다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=32
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
스왑 메모리가 할당되고 sudo swapon -s 명령어가 수행되었다면 사진의 로그를 확인할 수 있습니다. Size에 4GB의 용량이 잡혀있는 것을 확인합니다.
/etc/fstab 파일을 편집기로 엽니다.
sudo vi /etc/fstab
파일 하단에 다음 라인을 추가합니다:
/swapfile swap swap defaults 0 0
7. stress 테스트
이제 스왑 메모리가 정삭적으로 작동하는지 확인하기 위해 stress를 사용합니다. 먼저 stress를 설치합니다.
sudo yum install stress
다음으로, stress 명령을 사용하여 메모리 사용량을 늘리고 스왑을 유발합니다. 물리적 메모리(1GB)를 초과하는 메모리 사용을 유발하기 위해 1.5GB의 메모리를 사용하는 스트레스 테스트를 실행합니다.
stress --vm 1 --vm-bytes 1500M --timeout 180s
- -vm 1: 하나의 메모리 워커 프로세스를 생성합니다.
- -vm-bytes 1500M: 워커 프로세스가 1.5GB의 메모리를 할당받습니다. 이는 물리 메모리(1GB)를 초과하여 스왑 메모리를 사용하도록 만듭니다.
- -timeout 180s: 3분 동안 스트레스를 가한 후 종료합니다.
충분히 기다린 후 지표를 확인합니다.
예상한 대로 스왑이 일어났습니다. 축하합니다!