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 Linux 시간을 서울 시간으로 변경하는 법을 진행해보겠습니다.

1. 서울 시간이 있는지 확인하기

timedatectl list-timezones | grep Seoul

2. 시간 변경하기

sudo timedatectl set-timezone Asia/Seoul

3. 변경 확인하기

date

docker로 배포 한 웹 서비스를 외부에서 확인할 수 있도록 linux Firewalld를 활용하여 방화벽 설정을 하는 법을 알아보겠습니다.

 

1. Aws EC2 보안그룹 설정

 

 

2. Aws EC2 배포용 Ubuntu Server Firewalld 설치 및 설정

# apt 명령어로 firewalld 설치
sudo apt update && sudo apt install firewalld -y

# firewalld 설치 확인
sudo firewall-cmd --version

# 8080 port 추가
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp

# 재로딩
sudo firewall-cmd --reload

# 방화벽 리스트 확인
sudo firewall-cmd --list-all

저번 시간에는 aws ec2 centos linux에 MongoDB를 설치하기 위해

드라이브 공간을 추가해보는 작업을 진행하였습니다.
[linux] AWS Centos EBS Volume 추가하기 (tistory.com)

 

[linux] AWS Centos EBS Volume 추가하기

AWS Centos ec2 서버에 드라이브를 추가 세팅하여 MongoDB를 설치해보려고 합니다. 이에 앞서 EBS Volumn을 추가해보려고 합니다. 1. EBS 볼륨 생성 볼륨 생성을 클릭 해줍니다. 연결 시킬 인스턴스 가용 영

nitpick92.tistory.com

 

이어서 mongodb를 설치하는 방법을 알아보겠습니다.

https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-amazon/ 참고 하였습니다.

 

1. MongoDB 설치

# 파일 생성 후 내용 저장
https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-amazon/
# 해당 텍스트 붙혀넣기 후 저장
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
# 설치 시작
sudo yum install -y mongodb-org

2. MongoDB 데이터 삽입 공간 변경

# 빈 폴더 생성
sudo mkdir -p /xvdb/mongodb/data/mongo

# 추가 된 스토리지 경로로 설치된 mongo 폴더 카피
cp -ra /var/lib/mongo /xvdb/mongodb/data/mongo

# conf파일 열기
sudo vi /etc/mongod.conf

# 추가 된 스토리지 경로로 dbPath 변경
storage:
	dbPath: /xvdb/mongodb/data/mongo

# 외부에서 접속할 수 있도록 net 변경
net:
	port: 27017
    bindIp: 0.0.0.0

# 권한 부여
sudo chown mongod:mongod /xvdb/mongodb/data/mongo

3. MongoDB 시작

# MongoDB 실행 확인 (없는 거 확인)
ps -ef | grep mongo

# 몽고 디비 실행
sudo systemctl start mongod

# 몽고 디비 상태 확인
sudo systemctl status mongod

# 접속 확인
mongo 혹은 netstat -ano | grep mongo

 

4. 서버 방화벽 오픈

linux 서버 방화벽 오픈

linux CentOS 외부 접속(방화벽 오픈) 허용 (tistory.com)

 

linux CentOS 외부 접속(방화벽 오픈) 허용

# firewalld 설치 sudo yum install firewalld # firewalld 시작 sudo systemctl start firewalld sudo systemctl enable firewalld # port 추가 sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # firewalld 재로드 sudo firewall-cmd --reload #

nitpick92.tistory.com

aws ec2 보안 그룹 설정 > 인바운드 규칙 > 27017

5. 외부 접속 확인

 

DB Enterprise Server Download | MongoDB

접속 확인

 

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