본문 바로가기
클라우드/AWS

AWS CloudWatch(모니터링 및 관찰 시스템)

by 베어그릴스 2025. 2. 17.
반응형

CloudWatch란 무엇일까?

CloudTrail메인

Amazon CloudWatch는 AWS 리소스와 애플리케이션을 모니터링하고 관리하는

서비스입니다.

 

 

[개요]

1. 모니터링: AWS 리소스의 성능 지표를 실시간으로 수집.
2. 로그 관리: 애플리케이션 및 시스템 로그를 수집하고 분석.
3. 경고 설정: 특정 조건에 대한 알림 설정.
4. 자동화: 이벤트에 반응하여 자동으로 작업 수행.


다양한 이벤트들을 수집하여 로그파일로 저장(S3 버킷에 파일 업로드, 삭제, 접근 거부 등등..)

CloudWatch 사용 가능 서비스들 : EC2, RDS, S3, ELB, 등등! (예를 들면 EC2 서버 내에 아파치, 톰켓, pg 등이 설치돼 있는 경우 각각의 log들을 CloudWatch 에이전트를 통해 AWS로 전송할 수 있다.)

CloudWatch를 사용하면 시스템 전체의 리소스 사용률, 애플리케이션 성능, 운영 상태를 파악할 수 있습니다.

예를 들어 경보는 인스턴스 중지, 메모리, CPU, 하드 디스크의 임계값이 넘었다거나 등등..

 

사용사례

  1. 서버 모니터링: EC2 인스턴스의 CPU 사용률, 메모리, 디스크 I/O를 모니터링하여 성능 저하를 사전에 감지하고 대응
  2. 애플리케이션 성능 모니터링: 웹 애플리케이션의 응답 시간, 오류율 등을 모니터링하여 사용자 경험을 개선
  3. 로그 분석: CloudWatch Logs를 사용하여 애플리케이션 로그를 수집하고 분석하여 문제를 진단하고 성능 최적화
  4. 자동 확장: CloudWatch의 경고를 기반으로 Auto Scaling을 설정하여 트래픽 변화에 따라 인스턴스를 자동으로 추가하거나 제거
  5. 보안 모니터링: 비정상적인 활동이나 오류를 감지하기 위해 로그 데이터를 분석하고, 경고를 설정하여 보안 사고를 예방

이러한 사용사례를 통해 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

댓글