Cloudwatch Agent란?
클라우드워치 에이전트는 AWS의 모니터링 서비스인 Amazon CloudWatch와 함께 사용되는 소프트웨어입니다. Cloudwatch에서 기본으로 제공하는 모니터링 외에 추가로 메모리, 디스크 사용량 등 더 많은 지표들을 수집하려면 Cloudwatch Agent를 설치해야 됩니다. Cloudwatch Agent를 사용하면 추가비용이 들지만 더 많은 지표들을 추가할 수 있어 클라우드, 온프레미스에서의 원활한 모니터링과 운영에 도움이 되는 소프트웨어 입니다.
Cloudwatch Agent 설치
- IAM Role 생성
- EC2 인스턴스에 IAM Role 연결
- EC2 인스턴스에 CloudWatch Agent 설치
- CloudWatch Agent로 메모리 사용량 확인
- 부하테스트
- Disk 사용량 확인
IAM Role 생성
EC2에서 Cloudwatch Agent의 지표들을 수집할 수 있게 정책을 생성해줍니다.
생성한 정책은 EC2에 연결을 해줍니다.
IAM > 역할 > 역할 만들기를 선택해줍니다.
AWS 서비스 > 일반 사용 사례 EC2 선택
>"CloudWatchAgentServerPolicy"를 검색해서 해당 정책을 추가해줍니다.
> 역할이름을 지정해준 뒤 역할 생성
이렇게 해당 정책이 생성 됐습니다.
다음으로 모니터링할 인스턴스에 해당 정책을 연결 해주겠습니다.
EC2 인스턴스에 IAM Role 연결
EC2에 Role을 연결을 안하면 Cloudwatch agent를 설치해도 모니터링 항목이 안뜹니다.
보안 > IAM 역할 수정으로 이동해 줍니다.
위에서 만들었던 정책을 선택하고 IAM 역할 업데이트늘 선택해 줍니다.
EC2 인스턴스에 CloudWatch Agent 설치
Cloudwatch Agent를 설치하기 위해 EC2에 SSH 접속을 합니다.
// 해당 명령어를 입력하여 CloudWatch Agent를 설치해 줍니다.
sudo yum install -y amazon-cloudwatch-agent
// Cloudwatch Agent가 설치된 경로로 이동해서 설치된 파일을 실행시켜 줍니다.
cd /opt/aws/amazon-cloudwatch-agent/bin/
sudo ./amazon-cloudwatch-agent-config-wizard
Cloudwatch Agent 환경설정 목록입니다.
해당 환경설정은 자신이 필요로 하는 설정들을 추가,해제하여 설정해 줍니다.
해당 설정파일은 /opt/aws/amazon-cloudwatch-agent/bin/config.json 위치에 저장됩니다. 필요한 경우 이 파일을 직접 편집하여 설정을 수정할 수 있습니다.
만약 설정이 잘못되서 다시 설정해야 된다면 config.json파일을 편집기로 들어가서 수정하거나 삭제한 다음 다시 환경설정을 해주는 방법도 있습니다.
Cloudwatch Agent config wizard
# amazon-cloudwatch-agent-config-wizard
1. On which OS are you planning to use the agent? (사용할 OS선택)
1. Linux
2. Are you using EC2 or On-Premises hosts? (EC2, On-Premises 중 사용할 호스트 선택)
2. EC2
3. Which user are you planning to run the agent? (Agent를 실행할 사용자)
1. root
4. Do you want to turn on StatsD daemon? (StatsD 데몬의 활성화 여부)
2. no
5. Do you want to monitor metrics from CollectD? (CollectD에서 메트릭 모니터링 여부)
2. no
6. Do you want to monitor any host metrics? e.g. CPU, memory, etc. (메트릭 모니터링 여부)
1. yes
7. Do you want to monitor cpu metrics per core? (CPU 메트릭을 코어 당 모니터링할지 여부)
2. no
8. Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available? (EC2 dimensions를 모든 메트릭에 추가할지 여부)
1. yes
9. Do you want to aggregate ec2 dimensions (InstanceId)? (EC2 dimensions 집계 여부)
1. yes
10. Would you like to collect your metrics at high resolution (메트릭의 고해상도 수집 여부 및 기간)
4. 60s
11. Which default metrics config do you want? (Default 메트릭 설정)
3. Advanced
12. Are you satisfied with the above config? (위 구성에 만족하는지)
1. yes
13. Do you have any existing CloudWatch Log Agent (기존 CloudWatch Log 에이전트가 있는지 여부)
2. no
14. Do you want to monitor any log files? (Log 파일 모니터링 여부)
2. no
15. Do you want to store the config in the SSM parameter store? (Config를 SSM parameter store에 저장할지 여부)
2. no
Cloudwatch Agent를 실행합니다.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
해당 로그는 CloudWatch Agent를 구성하고 시작하는 과정을 보여줍니다.
1. CloudWatch Agent 구성 가져오기 : /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s 명령어를 사용하여 CloudWatch Agent 구성을 가져오고, Agent를 시작합니다. 이 명령어는 앞에서 생성한 구성 파일을 사용합니다.
2. 구성 검증: 가져온 구성이 유효한지 검사합니다. 이는 두 단계로 수행되며, 첫 번째 단계에서는 입력된 JSON 구성의 스키마가 유효한지, 두 번째 단계에서는 toml 파일의 구성이 유효한지 확인합니다.
3. Agent 시작: 마지막으로, 구성 검증이 성공한 후에 Amazon CloudWatch Agent가 시작됩니다. 이전에 실행 중이던 Agent는 먼저 중지되며, 새로운 Agent가 시작됩니다. CloudWatch Agent가 성공적으로 시작되면, 이제 CloudWatch 콘솔에서 이 인스턴스의 메트릭을 볼 수 있게 됩니다.
사용자가 앞에서 선택한 메트릭에 따라 다르며, CPU 사용량, 디스크 사용량, 네트워크 통계 등을 포함할 수 있습니다.
CloudWatch Agent로 메모리 사용량 확인
이제 Cloudwatch로 EC2의 메모리를 확인해 보겠습니다.
Cloudwatch > 대시보드 > 대시보드 생성
위젯추가는 자신이 원하는 그래프 타입을 선택해 주시면 됩니다.
대시보드를 생성하면 빈 그래프가 생성되는데 네임스페이스에 보시면 CWAgent가 우리가 EC2에 설치한 Cloudwatch Agent 입니다.
수집할 EC2 ID를 검색해 줍니다 > CWAgent > "Imageld, Instanceid, InstanceType"을 선택해 줍니다.
4가지의 지표가 보이는데 그 중 mem_used_percent가 메모리 사용률 입니다.
보시면 제가 EC2를 생성한지 얼마 안되서 수집된 지표가 별로 없습니다.
참고로 cloudwatch로 지표가 수집되는데 5분정도가 소요됩니다.
> 위젯생성 > 저장을 하시면 대시보드 생성 완료입니다.
부하테스트
메모리에 부하를 줘서 그래프가 상승하는지 확인해 보겠습니다.
부하테스트를 위해 메모리에 부하를 주는 stress라는 유틸리티를 설치해 줍니다.
sudo yum install -y stress
부하를 주기 전 사용 가능한 메모리의 크기를 확인합니다.
free -h
저는 사용가능한 메모리가 614M입니다. 그래서 최대 600M로 부하를 주겠습니다.
stress --vm 1 --vm-bytes 600M --timeout 600s
- --vm 1: 가상 메모리 부하 테스트를 실행하는 worker의 수를 지정합니다.
- --vm-bytes 600M: 각 worker가 할당하려는 메모리 양을 지정합니다.
- --timeout 600s: 부하를 주고 이를 600초 동안 유지합니다.
메모리에 부하를 줬더니 Cloudwatch가 지표를 수집해서 그래프가 상승하는 것을 볼 수 있습니다.
조금 더 큰 부하를 주니 세션이 끊어졌습니다.
메모리 부하를 너무 크게 가하게 되면, 시스템이 느려지거나, 네트워크 연결이 끊어지거나, 운영 체제가 Out of Memory (OOM) Killer를 활성화하여 프로세스를 강제로 종료할 수 있습니다. 이 때문에 원격에서 연결이 끊어질 수 있다.
메모리 부하를 줬을 때 CPU 그래프도 같이 상승한 걸 볼 수 있습니다.
'stress' 명령어를 실행하면, 메모리에 대한 요청이 생성되고, 이 요청들을 처리하기 위해 CPU 자원이 사용됩니다. 따라서 메모리에 부하를 주면 CPU 사용률이 상승하는 것이 일반적입니다
실제로, 컴퓨터 시스템에서 메모리는 CPU와 함께 가장 중요한 리소스 중 하나입니다. 메모리를 사용하여 데이터를 읽고 쓰는 것은 CPU에서 수행하는 작업의 일부입니다. 따라서 메모리 사용량이 증가하면, CPU는 그에 따라 더 많은 작업을 수행하게 되어 CPU 사용률이 증가합니다.
Disk 사용량 확인
이렇게 디스크 사용량도 확인해 볼 수 있습니다.
오늘은 이렇게 Cloudwatch Agent를 설치해서 메모리, disk 사용률을 모니터링해보는 실습을 해봤습니다
감사합니다 :)
참고자료
'AWS > CloudWatch' 카테고리의 다른 글
[CloudWatch #2] Cloudwatch 대시보드 구성 (0) | 2023.07.31 |
---|---|
[CloudWatch #1] Cloudwatch 란? (0) | 2023.07.31 |