CloudWatch란 무엇일까?
Amazon CloudWatch는 AWS 리소스와 애플리케이션을 모니터링하고 관리하는
서비스입니다.
[개요]
1. 모니터링: AWS 리소스의 성능 지표를 실시간으로 수집.
2. 로그 관리: 애플리케이션 및 시스템 로그를 수집하고 분석.
3. 경고 설정: 특정 조건에 대한 알림 설정.
4. 자동화: 이벤트에 반응하여 자동으로 작업 수행.
다양한 이벤트들을 수집하여 로그파일로 저장(S3 버킷에 파일 업로드, 삭제, 접근 거부 등등..)
CloudWatch 사용 가능 서비스들 : EC2, RDS, S3, ELB, 등등! (예를 들면 EC2 서버 내에 아파치, 톰켓, pg 등이 설치돼 있는 경우 각각의 log들을 CloudWatch 에이전트를 통해 AWS로 전송할 수 있다.)
CloudWatch를 사용하면 시스템 전체의 리소스 사용률, 애플리케이션 성능, 운영 상태를 파악할 수 있습니다.
예를 들어 경보는 인스턴스 중지, 메모리, CPU, 하드 디스크의 임계값이 넘었다거나 등등..
사용사례
- 서버 모니터링: EC2 인스턴스의 CPU 사용률, 메모리, 디스크 I/O를 모니터링하여 성능 저하를 사전에 감지하고 대응
- 애플리케이션 성능 모니터링: 웹 애플리케이션의 응답 시간, 오류율 등을 모니터링하여 사용자 경험을 개선
- 로그 분석: CloudWatch Logs를 사용하여 애플리케이션 로그를 수집하고 분석하여 문제를 진단하고 성능 최적화
- 자동 확장: CloudWatch의 경고를 기반으로 Auto Scaling을 설정하여 트래픽 변화에 따라 인스턴스를 자동으로 추가하거나 제거
- 보안 모니터링: 비정상적인 활동이나 오류를 감지하기 위해 로그 데이터를 분석하고, 경고를 설정하여 보안 사고를 예방
이러한 사용사례를 통해 CloudWatch는 AWS 환경에서 안정적이고 효율적인 시스템 관리를 지원한다.
1. 다운로드 및 설치
[CloudWatch 에이전트 다운로드]
sudo wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
[CloudWatch 에이전트 설치]
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
[CloudWatch 설정]
보관 주기 : 14일
실행유저 : root
[메트릭스]
메트릭스 수집 간격 : 60초
CPU, 디스크, 메모리 사용률 각각의 메트릭을 수집하도록 설정
[EC2 인스턴스 내 애플리케이션 로그]
애플리케이션 및 리눅스 시스템 로그들을 각각의 로그그룹으로 묶어 관리하기 편하게 설정하였다.
보관 주기 : 14일
톰캣 로그(4개), 아파치 로그, 시스템 로그(auth.log, syslog)
sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"comment": "메모리 및 디스크 사용량을 추가로 수집",
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"disk": {
"measurement": [
"disk_used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"/"
]
}
}
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/home/tomcat/sharedir/logs/tomcat9usr1/AV_OD_WEB.log",
"log_group_name": "tomcat_LogGroup",
"log_stream_name": "[WEB] {instance_id} (usr1.log)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/home/tomcat/sharedir/logs/tomcat9usr2/AV_OD_WEB.log",
"log_group_name": "tomcat_LogGroup",
"log_stream_name": "[WEB] {instance_id} (usr2.log)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/home/tomcat/sharedir/logs/tomcat9adm1/LB_OD_AMD.log",
"log_group_name": "tomcat_LogGroup",
"log_stream_name": "[WEB] {instance_id} (adm1.log)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/home/tomcat/sharedir/logs/tomcat9adm2/LB_OD_AMD.log",
"log_group_name": "tomcat_LogGroup",
"log_stream_name": "[WEB] {instance_id} (adm2.log)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/home/tomcat/sharedir/logs/http/customlog_ssl.log",
"log_group_name": "apache_LogGroup",
"log_stream_name": "[WEB] {instance_id} (http_customlog_ssl.log)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/var/log/syslog",
"log_group_name": "ubuntu_LogGroup",
"log_stream_name": "[SYSTEM] {instance_id} (syslog)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/var/log/auth.log",
"log_group_name": "ubuntu_LogGroup",
"log_stream_name": "[SYSTEM] {instance_id} (auth.log)",
"retention_in_days": 14,
"timezone": "UTC"
},
{
"file_path": "/var/log/kern.log",
"log_group_name": "ubuntu_LogGroup",
"log_stream_name": "[SYSTEM] {instance_id} (kern.log)",
"retention_in_days": 14,
"timezone": "UTC"
}
]
}
}
}
}
위의 json 형식을 보면 metrics와 logs로 나뉘어 있다. 차이점을 살펴보자
디스크, 메모리, CPU는 왜 메트릭스로 수집하지?
메트릭스(Metrics)로 수집하는 이유는 시스템 성능을 실시간으로 모니터링하고, 이상 징후를 빠르게 감지하기 위함
로그(Log)는 이벤트 기반 기록이고,
메트릭스(Metrics)는 시간 기반 성능 지표라는 차이가 있습니다.
이쯤에서 리눅스의 시스템 로그는 어떤 게 있나 살펴보자
/var/log 디렉터리는 리눅스 시스템에서 로그 파일이 기록되는 기본 디렉터리입니다. 이 디렉터리는 대부분의 리눅스 배포판에서 사용되며, 시스템의 다양한 컴포넌트와 애플리케이션에서 생성되는 로그 파일을 저장하는 공간입니다.
콘솔 로그 (/dev/console)
커널(kernel)에 관련된 내용을 시스템 콘솔에 뿌려주는 로그이다. messages 내용과 일치하지는 않지만 시스템에 관련된 중요한 내용들에 대한 로그를 관리자에게 알리고자 함이 목적이며, 출력을 파일로 저장하는 것이 아니라 장치명(/dev/console)을 사용하여 콘솔로 로그를 뿌려준다.
시스템 로그 (/var/log/messages)
주로 접속 시 인증에 관한 것과 메일에 관한 내용, 시스템에 관한 변경 사항 등 시스템에 관련된 전반적인 로그를 기록하는 파일이다.
/var/log/messages: 일반적인 시스템 이벤트와 메시지를 기록한다.
/var/log/syslog: 시스템 관련 로그를 기록한다.
/var/log/kern.log: 커널 관련 이벤트 및 오류를 기록한다.
보안 로그 (/var/log/secure)
모든 접속과 관련하여 언제 어디서 어떤 서비스를 사용했는지 기록한다. 보통 login, tcp_wrappers, xinetd 관련 로그들이 남는다.
/var/log/auth.log: SSH 로그인 및 인증에 대한 로그를 기록한다.
/var/log/secure: 시스템 보안과 관련된 로그를 기록한다.
메일 로그 (/var/log/maillog)
sendmail이나 pop 등의 실행에 관한 기록이다. 메일을 주고받을 때에 이 로그 파일에 기록된다.
크론 로그 (/var/log/cron)
시스템의 정기적인 작업에 대한 모든 작업한 기록을 보관하고 있는 파일이다. 크론 데몬(crond)에 의해서 실행되었던 데몬(프로세스)들이 기록되어 있다.
부팅 로그 (/var/log/boot.log)
시스템의 데몬들이 실행되거나 재시작되었을 때 기록되는 로그 파일이다. 부팅 시 에러나 조치 사항을 확인할 때 활용이 가능하다.
아래는
위에서 수집한 tomcat_LogGroup, apache_LogGroup이 적재되고 있다.
tomcat_LogGroup 안에 4개의 톰캣 log들이 적재되고 있다.
CPU, 디스크, 메모리 지표
AWS 서비스 및 EC2 내 로그들을 관리 모니터링 알람을 줄 수 있습니다.
AWS CloudTrail과도 긴밀한 연관관계가 있으므로 AWS 서비스들은 서로 연계되었을 때 큰 시너지를 발휘하게 됩니다.
또한 AWS내 다양한 서비스들을 묶어서 모니터링 자동화 시스템도 구현할 수 있습니다.
'클라우드 > AWS' 카테고리의 다른 글
AWS - goofys 설치 및 S3 마운트 (4) | 2022.12.05 |
---|---|
AWS S3 연동 가이드(s3fs-fuse / cli) (0) | 2022.11.17 |
AWS 리눅스 초기셋팅 (0) | 2022.07.21 |
AWS - EC2 하드디스크 용량 늘리기 (0) | 2022.07.21 |
AWS 비용 계산 (2) | 2022.07.21 |
댓글