AWS

[AWS] 부하 테스트를 위한 CloudWatch 대시보드 구축 : 메모리 사용률까지 띄워보기

sian han 2025. 5. 30. 20:46

 

개인 프로젝트에서 부하 테스트를 진행하면서, CPU 사용률은 바로 시각화할 수 있었지만 메모리 사용률을 CloudWatch에 시각화하려고 하니 꽤나 복잡했다. 나중에 잊어버릴 것 같아서 이 글로 과정을 정리해보려 한다.

 

참고 강의: 수많은 EC2 인스턴스의 CPU/메모리 시각화해서 확인하기 : CloudWatch Resource Health

 

 

📚 전체 단계 요약 (목차)

  • IAM 역할 생성
  • EC2 인스턴스에 IAM 역할 할당
  • CloudWatch Agent 설치
  • 파라미터 스토어에 Agent 설정 등록
  • CloudWatch Agent 시작 명령 실행
  • 리소스 상태 확인
  • CloudWatch Dashboard 생성

💡 CloudWatch Resource Health란?

CloudWatch Resource Health는 Amazon EC2 인스턴스의 상태를 종합적으로 보여주는 서비스다.

  • 별도 설정 없이 모든 EC2의 메트릭, 태그를 종합해 시각화
  • CPU 사용률, 상태, 메모리 등을 색상으로 표현
  • Group By, Filter By 기능으로 인스턴스를 묶어 확인 가능
  • 임계값마다 색상을 달리 설정 가능

 

설정하면 위 그림과 같이 인스턴스별 Resource Health 를 한눈에 볼 수 있다. 

 

메모리를 제외한 다른 지표(CPU, Status) 등은 별도의 설정 없이 수집할 수 있지만 메모리의 경우 CWAgent 를 활용해서 직접 수집해야한다. Linux 기준 CWAgent namespace 로 "mem_used_percent" 매트릭의 수집이 필요하다. 

 

메모리를 수집하도록 설정할때 AWS Systems Manager Run Command 를 사용할 예정이다. 

 

Systems Manager 로 Run command 를 통해서 CloudWatch Agent 를 설치한다. 

CloudWatch 가 설정되어있는 Instance 들이 지속적으로 CloudWatch 로 메모리 사용량을 주거나 혹은 매트릭으로 수집하게 된다.

이걸 기반으로 대시보드를 만들어주는 아키텍쳐이다. 

 

📌 1단계: IAM 역할 생성

CloudWatch Agent가 EC2 내부 데이터를 외부로 전송하려면 권한이 필요하다.

이유: EC2 인스턴스가 SSM과 CloudWatch Agent를 사용하려면 명시적으로 권한을 위임해야 한다.

 

필요한 권한 정책

  • AmazonEC2RoleforSSM
  • AmazonSSMFullAccess
  • CloudWatchAgentServerPolicy

이 세 가지를 포함한 IAM 역할을 생성한다.

 

 

📌 2단계: IAM 역할을 EC2 인스턴스에 할당

EC2 대시보드에서 작업 → 보안 → IAM 역할 수정을 클릭하여 1단계에서 만든 역할을 인스턴스에 할당한다.

이 역할이 있어야 이후 SSM 명령 실행과 CloudWatch Agent 설정이 EC2에서 실행될 수 있다.

※ 이 설정 후에는 반드시 인스턴스 중지 → 시작 순서로 재부팅해야 적용된다.

 

📌 3단계: CloudWatch Agent 설치

AWS Systems Manager의 Run Command 기능을 사용한다.

 

Systems Manager 접속

 

 

좌측 메뉴 → 노드 도구 → 명령실행 → 명령 실행 버튼 클릭

 

 

AWS-ConfigureAWSPackage 선택 → 명령 실행

 

 

명령 파라미터 입력 : Name 필드에 AmazonCloudWatchAgent 입력

주의 ! 이때 철자 맞춰서 작성해야 함

 

 

수동으로 인스턴스 선택 → 본인이 모니터링할 인스턴스를 선택 (2번에서 IAM 역할을 부여한 인스턴스) 실행

🚨 그런데 이때 만약 `등록된 관리형 인스턴스 없음` 라는 글이 보인다면

  • 1. 권한 설정을 잘못했다 → (1번부터 다시 놓친게 있는지 확인해본다)
  • 2. 권한 설정을 했는데 EC2 재부팅이 안되었다. 
    • IAM 권한 설정 후 재부팅을 해줘야 권한이 완전하게 설정된다. 

나의 경우 2번에 해당되었는데, IAM 권한 설정 후

EC2 재부팅 버튼을 눌러 재부팅 하지 말고 !

인스턴스 중지인스턴스 시작 버튼을 눌러 재부팅 해주니까 해결되었다 (한참 헤멨다)

 

 

📌 4단계: 파라미터 스토어에 Agent 설정 등록

CloudWatch Agent는 어떤 메트릭을 얼마 주기로 수집할지를 파라미터 스토어의 JSON 파일로 지정해야 한다.

 

SSM → 애플리케이션 도구 → 파라미터 스토어

 

 

파라미터 생성 

Agent가 수집할 메트릭을 알 수 있도록 설정 정보를 등록하는 단계다.

 

값 필드에 아래 json 데이터를 넣어준다.  

{
  "agent": {
    "metrics_collection_interval": 10,
    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
  },
  "metrics": {
    "namespace": "CWAgent",
    "metrics_collected": {
      "cpu": {
        "resources": ["*"],
        "measurement": [
          {
            "name": "cpu_usage_idle",
            "rename": "CPU_USAGE_IDLE",
            "unit": "Percent"
          },
          {
            "name": "cpu_usage_nice",
            "unit": "Percent"
          },
          "cpu_usage_guest"
        ],
        "totalcpu": false,
        "metrics_collection_interval": 10,
        "append_dimensions": {
          "customized_dimension_key_1": "customized_dimension_value_1",
          "customized_dimension_key_2": "customized_dimension_value_2"
        }
      },
      "disk": {
        "resources": ["/", "/tmp"],
        "measurement": [
          {
            "name": "free",
            "rename": "DISK_FREE",
            "unit": "Gigabytes"
          },
          "total",
          "used"
        ],
        "ignore_file_system_types": ["sysfs", "devtmpfs"],
        "metrics_collection_interval": 60,
        "append_dimensions": {
          "customized_dimension_key_3": "customized_dimension_value_3",
          "customized_dimension_key_4": "customized_dimension_value_4"
        }
      },
      "diskio": {
        "resources": ["*"],
        "measurement": ["reads", "writes", "read_time", "write_time", "io_time"],
        "metrics_collection_interval": 60
      },
      "swap": {
        "measurement": ["swap_used", "swap_free", "swap_used_percent"]
      },
      "mem": {
        "measurement": ["mem_used", "mem_cached", "mem_total", "mem_used_percent"],
        "metrics_collection_interval": 60
      },
      "net": {
        "resources": ["eth0"],
        "measurement": ["bytes_sent", "bytes_recv", "drop_in", "drop_out"]
      },
      "netstat": {
        "measurement": ["tcp_established", "tcp_syn_sent", "tcp_close"],
        "metrics_collection_interval": 60
      },
      "processes": {
        "measurement": ["running", "sleeping", "dead"]
      }
    },
    "append_dimensions": {
      "ImageId": "${aws:ImageId}",
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}",
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    },
    "aggregation_dimensions": [["ImageId"], ["InstanceId", "InstanceType"], ["d1"], []],
    "force_flush_interval": 30
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
            "log_group_name": "MyEc2InstanceAgentLog.log",
            "log_stream_name": "MyEc2InstanceAgentLog.log",
            "timezone": "LOCAL"
          }
        ]
      }
    },
    "log_stream_name": "my_log_stream_name",
    "force_flush_interval": 15
  }
}

 

 

위 파일에서 가장 중요한 내용은 메모리(mem) 관련 내용이다

["mem_used", "mem_cached", "mem_total", "mem_used_percent"] 를 60초마다 수집하도록 설정되어있다.

 

 

📌 5단계: CloudWatch Agent 시작 명령 실행

두번째 명령어 : AmazonCloudWatch-ManageAgent    명령 실행

 

Optional Configuration Location 필드에 위 단계에서 만든 파라미터 이름을 입력

 

대상 인스턴스 선택 후 실행

이 단계가 Agent 실행의 실제 트리거가 된다.

 

 

📌 6단계: 리소스 상태 확인

CloudWatch 인사이트  EC2 리소스 상태

 

 

EC2 리소스 상태 탭에서

  • CPU 사용률
  • 메모리 사용률
  • 네트워크 트래픽

을 인스턴스별로 한눈에 확인 가능하다.

실시간 상황 파악이 가능해 병목 탐지 시 매우 유용함.

 

 

📌 7단계: CloudWatch Dashboard 생성

이번에는 실시간 모니터링뿐 아니라 지표를 그래프로 시각화하고 싶었다. 특히 병목을 시각적으로 분석하기 위해서였다.

 

CloudWatch  대시보드 대시보드 생성

 

 

 

내가 시각화하고자 했던 항목

  • Application CPU 사용량
  • Application 메모리 사용량
  • DB CPU 사용량
  • DB 메모리 사용량

 

CPU 사용량 위젯 추가

우측 상단 + 버튼 클릭 AWS 네임 스페이스 EC2 인스턴스별 지표 옵션 CPUUtilization 선택 위젯 생성

 

 

 

메모리 사용량 위젯 추가

우측 상단 + 버튼 클릭  사용자 지정 네임 스페이스 CWAgent ImageId, InstanceId, InstanceType mem_used_percent 선택 위젯 생성

 

 

 

이렇게 설정하면CloudWatch Dashboard에서 원하는 리소스들을 그래프로 모니터링할 수 있게 된다. 

 


✅ 마치며

CloudWatch는 기본적으로 CPU만 쉽게 모니터링할 수 있지만, 메모리 사용률 시각화는 위 단계를 차례로 진행해야 한다. 특히

  • IAM 역할 부여
  • 파라미터 스토어 설정
  • SSM 명령 실행

이 세 가지를 기억하면 대부분의 CloudWatch 시각화 과정을 원활하게 해결할 수 있다.
구성한 CloudWatch Dashboard 덕분에 부하 테스트 중 병목 원인을 훨씬 빠르게 식별할 수 있었다.