EC2 기본 모니터링

  • EC2 인스턴스는 기본적으로 CPU, 네트워크, 디스크 I/O 등 일부 지표만 CloudWatch로 전송한다
  • 메모리 사용량 등은 기본 지표에 포함되어 있지 않아, 별도의 설정이 필요하다.

IAM 역할 연결

CloudWatch Agent가 메트릭을 전송하려면 EC2 인스턴스에 적절한 IAM 역할이 연결되어 있어야 한다.
역할이 연결이 안되어 있을 때 아래와 같은 오류가 발생했다.

"error":"NoCredentialProviders: no valid providers in chain
caused by: EnvAccessKeyNotFound: failed to find credentials in the environment.

방법

  • IAM 역할 생성
    • AWS 콘솔에서 IAM > 역할 > 역할 만들기
    • CloudWatchAgentServerPolicy정책 연결해서 역할 생성
  • EC2 인스턴스에 직접 연결
    • EC2 콘솔에서 인스턴스 선택 → 보안 → IAM 역할 수정
    • 위에서 만든 IAM 역할을 선택해 연결

CloudWatch Agent 설치 및 설정

  • OS에 맞는 에이전트 설치
    • ec2 amazon linux는 아래와 같이 설치가 가능하다.
sudo yum install amazon-cloudwatch-agent
 
# 이후 마법사를 열어서 설정 파일을 생성해 준다.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
  • 원하는 설정에 맞게 선택해주면 아래와 같은 config 파일이 생성된다.
  • /opt/aws/amazon-cloudwatch-agent/bin/config.json 생성 위치
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"metrics": {
		"aggregation_dimensions": [
			[
				"InstanceId"
			]
		],
		"append_dimensions": {
			"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
			"ImageId": "${aws:ImageId}",
			"InstanceId": "${aws:InstanceId}",
			"InstanceType": "${aws:InstanceType}"
		},
		"metrics_collected": {
			"cpu": {
				"measurement": [
					"cpu_usage_idle",
					"cpu_usage_iowait",
					"cpu_usage_user",
					"cpu_usage_system"
				],
				"metrics_collection_interval": 60,
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
 
  • 생성된 json을 적절한 위치로 옮겨서 agent를 실행한다.
    • 이번에 설정할 때는 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json로 위치해야 했다.
sudo systemctl restart amazon-cloudwatch-agent
  • 실행한 이후에 실행 상태를 확인해준다.
sudo systemctl status amazon-cloudwatch-agent
 
# 로그는 여기서 확인이 가능하다.
cat /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
  • runnging으로 현재 실행 중인 것을 확인할 수 있다.
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; disabled; preset: disabled)
     Active: active (running) since Tue 2025-06-10 23:36:42 UTC; 0h 18min ago
   Main PID: 410 (amazon-cloudwat)
      Tasks: 7 (limit: 1114)
     Memory: 57.0M
        CPU: 26.936s

CloudWatch 콘솔에서 확인

  • Cloudwatch 모든 지표 CWAgent(기본 값) 설정한 ec2의 인스턴스 아이디를 확인 하면 메트릭 정보를 확인할 수 있다.
  • 예시
    • mem_used_percent
    • swap_used_percent
  • 이후 원하는 임계치에 따라서 알람 설정이 가능해진다.

진행 중 발생한 문제

  • 인증 정보 관련 에러
    • EnvAccessKeyNotFound: failed to find credentials in the environment
      • IAM 역할이 인스턴스에 연결되어 있지 않거나, 권한이 부족한 경우 발생
      • 역할 연결 및 권한 정책(CloudWatchAgentServerPolicy) 확인
  • 매트릭이 안보일 때
    • 콘솔에서 CWAgent 네임스페이스를 제대로 보고 있는지 확인
    • 모든 지표 이후 EC2가 아닌 모두 상태에서 확인해야 한다.