AWS CloudWatch는 애플리케이션을 모니터링할 수 있도록 해주는 서비스 입니다.

 

하지만 기본적으로 CPU 사용률, 디스크 I/O, 네트워크 부하 등 기본 지표는 제공을 하나

인스턴스 메모리 및 운영체제 디스크 사용률과 같은 운영체제의 지표는 가져오지 못합니다.

이를 위해서 CloudWatch Agent를 설치하여 메모리와 디스크 사용률을 가져올 수 있는 방법을 정리해보려고 합니다.

 

Linux(Ubuntu) 운영체제에서 진행해보겠습니다.

 

1. Aws IAM 역할 만들기

 

1) IAM 접속 > 역할 > 역할 생성 > AWS 서비스 > EC2 > CloudWatchAgentServerPolicy 

역할 생성
CloudWatchAgentServerPolicy 추가

2) 원하는 EC2 인스턴스에 IAM 역할을 수정해줍니다.


2. Ubuntu CloudWatchAgent 설치

 

1) CloudWatchAgent(amazon-cloudwatch-agent) 설치 합니다.

wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

 

2) 마법사 파일을 실행합니다.

 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

3) Log는 모니터링하지 않고 CPU, 메모리만 나오도록 진행합니다.

$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
2
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
1
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
1
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
1
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
3
Current config as follows:
{
	"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,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time",
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2

Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"logs": {
		"logs_collected": {
			"files": {
				"collect_list": [
					{
						"file_path": "/var/log/nginx/access.log",
						"log_group_name": "access.log",
						"log_stream_name": "{instance_id}",
						"retention_in_days": -1
					}
				]
			}
		}
	},
	"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,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time",
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.

 

4) 마법사로 만들어진 json 파일 호출합니다.

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

5) Agent를 실행시켜주세요.

# 서비스 실행
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start

# 서비스 실행 확인
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
more /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log

 

6) CloudWatch > 모든 지표 정상동작 확인

정상 동작 확인

감사합니다.😊

AWS CloudWatch는 애플리케이션을 모니터링할 수 있도록 해주는 서비스 입니다.

 

하지만 기본적으로 CPU 사용률, 디스크 I/O, 네트워크 부하 등 기본 지표는 제공을 하나

인스턴스 메모리 및 운영체제 디스크 사용률과 같은 운영체제의 지표는 가져오지 못합니다.

이를 위해서 CloudWatch Agent를 설치하여 메모리와 디스크 사용률을 가져올 수 있는 방법을 정리해보려고 합니다.

 

Linux(CentOS) 운영체제에서 진행해보겠습니다.

 

1. Aws IAM 역할 만들기

 

1) IAM 접속 > 역할 > 역할 생성 > AWS 서비스 > EC2 > CloudWatchAgentServerPolicy 

역할 생성
CloudWatchAgentServerPolicy 추가

2) 원하는 EC2 인스턴스에 IAM 역할을 수정해줍니다.


2. CentOS CloudWatchAgent 설치

 

1) CloudWatchAgent(amazon-cloudwatch-agent) 설치 합니다.

sudo yum install -y amazon-cloudwatch-agent

 

2) 설치된 마법사 파일을 찾아냅니다.

sudo find / -name amazon-cloudwatch-agent-config-wizard

 

3) 경로 이동 후 마법사 파일을 실행합니다.

cd /opt/aws/amazon-cloudwatch-agent/bin/
sudo ./amazon-cloudwatch-agent-config-wizard

4) Log는 모니터링하지 않고 CPU, 메모리만 나오도록 진행합니다.

$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
2
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
1
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
1
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
1
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
3
Current config as follows:
{
	"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,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time",
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2

Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"logs": {
		"logs_collected": {
			"files": {
				"collect_list": [
					{
						"file_path": "/var/log/nginx/access.log",
						"log_group_name": "access.log",
						"log_stream_name": "{instance_id}",
						"retention_in_days": -1
					}
				]
			}
		}
	},
	"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,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time",
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.

 

5) 마법사로 만들어진 json 파일 호출합니다.

sudo ./amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 fil
e://opt/aws/amazon-cloudwatch-agent/bin/config.json -s

6) Agent를 실행시켜주세요.

-- agent 상태
sudo amazon-cloudwatch-agent-ctl -m ec2 -a status

-- agent 실행
sudo amazon-cloudwatch-agent-ctl -m ec2 -a start

 

7) CloudWatch > 모든 지표 정상동작 확인

정상 동작 확인

감사합니다.😊

'Server > AWS' 카테고리의 다른 글

[linux] MongoDB AWS S3 백업하기  (0) 2023.08.07
[Windows] Aws CloudWatch Memory 및 용량 확인  (0) 2023.04.12
AWS Global Accelerator란?  (0) 2023.03.24

AWS CloudWatch는 애플리케이션을 모니터링할 수 있도록 해주는 서비스 입니다.

 

하지만 기본적으로 CPU 사용률, 디스크 I/O, 네트워크 부하 등 기본 지표는 제공을 하나

인스턴스 메모리 및 운영체제 디스크 사용률과 같은 운영체제의 지표는 가져오지 못합니다.

이를 위해서 CloudWatch Agent를 설치하여 메모리와 디스크 사용률을 가져올 수 있는 방법을 정리해보려고 합니다.


Windows 운영체제에서 진행해보겠습니다.

 

1. Aws IAM 역할 만들기

 

1) IAM 접속 > 역할 > 역할 생성 > AWS 서비스 > EC2 > CloudWatchAgentServerPolicy 

역할 생성
CloudWatchAgentServerPolicy 추가

2) 원하는 EC2 인스턴스에 IAM 역할을 수정해줍니다.


2. Windows CloudWatchAgent 설치

 

1) Windows PowerShell 관리자 권한 실행을 해줍니다.


2) CloudWatchAgent 설치 파일을 다운해주세요.

Invoke-WebRequest https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi -OutFile C:amazon-cloudwatch-agent.msi

 

3) 해당 설치 파일을 실행해주세요.

msiexec /i amazon-cloudwatch-agent.msi

 

4) Agent를 실행시켜주세요.

상태 확인
& $Env:ProgramFiles\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1 -m ec2 -a status

실행
& $Env:ProgramFiles\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1 -m ec2 -a start

 

5) 해당 위치로 접근하여 cw-config.json파일을 만들어주세요.

{
    "agent": {
        "metrics_collection_interval": 60,
        "region": "ap-northeast-2",
        "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
        "debug": false
    },
    "metrics": {
        "namespace": "Windows/CloudWatchAgent",
        "metrics_collected": {

            "LogicalDisk": {
                "measurement": [
                    {
                        "name":"% Free Space",
                        "rename":"DiskFreeSpaceUtilization",
                        "unit":"Percent"
                    }

                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "C:"
                ]
            },
            "Memory": {
                "measurement": [
                    {
                        "name":"% Committed Bytes In Use",
                        "unit":"Percent"
                    }
                ],
                "metrics_collection_interval": 60
            }

        },
        "append_dimensions": {
            "InstanceId": "${aws:InstanceId}"
        }
    }
}

 

6) 해당 json 파일을 실행해주세요.

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\cw-config.json"

 

7) CloudWatch > 모든 지표 정상동작 확인

정상 동작 확인

감사합니다.😊

'Server > AWS' 카테고리의 다른 글

[linux] MongoDB AWS S3 백업하기  (0) 2023.08.07
[CentOS] Aws CloudWatch Memory 및 용량 확인  (0) 2023.04.13
AWS Global Accelerator란?  (0) 2023.03.24

+ Recent posts