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 Ubuntu ec2 서버에 드라이브를 추가 세팅하는 방법을 알아보겠습니다.

AWS EBS Volumn을 추가하는 방법입니다.

 

1. EBS 볼륨 생성

륨 생성을 클릭 해줍니다.

연결 시킬 인스턴스 가용 영역을 선택해주세요.

2. 인스턴스 연결

볼륨 상태가 사용 가능으로 변하면 원하는 인스턴스에 볼륨 연결을 해줍니다.
EC2 > 스토리지에서 연결이 확인 되면
인스턴스 재부팅을 진행해주세요.

3. EBS 볼륨 연결 확인하기

$ lsblk # 파일 시스템 조회

lsblk 명령어로 새로 추가된 ebs 볼륨을 확인합니다.
Linux 커널로 인해 디바이스 이름이 변경이 될 수 있습니다.

4. EBS 볼륨을 파일시스탬 포맷하기

/dev/nvme0n1은 디렉토리가 아니여서 파일 시스템으로 포맷을 해주어야 쓸 수 있습니다.

$ sudo mkfs -t ext4 nvme0n1


5. EBS 볼륨 마운트 설정하기

마운트 작업이란 운영체제에 파일 시스템을 연결하는 것입니다.

(윈도우 E: 드라이브 처럼)

$ mkdir /backup
$ mount /dev/nvme0n1 /backup

저번 시간에는 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 Centos ec2 서버에 드라이브를 추가 세팅하여 MongoDB를 설치해보려고 합니다.

이에 앞서 EBS Volumn을 추가해보려고 합니다.

 

1. EBS 볼륨 생성

볼륨 생성을 클릭 해줍니다.

연결 시킬 인스턴스 가용 영역을 선택해주세요.

2. 인스턴스 연결

볼륨 상태가 사용 가능으로 변하면 원하는 인스턴스에 볼륨 연결을 해줍니다.
EC2 > 스토리지에서 연결이 확인 되면
인스턴스 재부팅을 진행해주세요.

3. EBS 볼륨 연결 확인하기

$ lsblk # 파일 시스템 조회

lsblk 명령어로 새로 추가된 ebs 볼륨을 확인합니다.
* Linux 커널로 인해 디바이스 이름이 변경이 될 수 있습니다.

4. EBS 볼륨을 파일시스탬 포맷하기

/dev/nvme1n1은 디렉토리가 아니여서 파일 시스템으로 포맷을 해주어야 쓸 수 있습니다.

# file -s <장치명>
$ file -s /dev/nvme1n1
# /dev/nvme1n1: data <- 파일시스템이 존재하지 않는다.
/dev/nvme1n1: data 확인
# 루트 권한 획득
$ sudo -s
# mkfs -t <볼륨타입> <볼륨장치명> -> 해당 볼륨을 파일시스템으로 포맷
$ mkfs -t ext4 /dev/nvme1n1

/dev/nvme1n1:  Linux rev 1.0 ext4 filesystem data 확인

5. EBS 볼륨 마운트 설정하기

마운트 작업이란 운영체제에 파일 시스템을 연결하는 것입니다.

(윈도우 E: 드라이브 처럼)

# 현재 파일시스템들의 UUID와 TYPE을 확인
$ blkid
UUID와 TYPE을 저장해줍니다.
$ vi /etc/fstab

UUID= "aaaaaaaa" /xvdb ext4 defaults,nofail 0 2 한 줄 추가해줍니다.
# /etc/fstab에 있는 파일시스템 전체를 mount
$ mount -a
# 리눅스 시스템 디스크 사용량 확인
$ df -h

연결 확인 완료

+ Recent posts