엔지니어링

AWS CloudWatch 를 통한 서버 메트릭, 로그 관리 하기 (기초)

당나귀🐴 2022. 11. 23. 01:02
AWS 에는 다양한 서비스들이 제공되고 있습니다. 
EC2, ECB, Lambda 처럼 컴퓨팅 서비스가 있고, SQS, S3 처럼 저장소와 관련된 서비스가 있습니다. 
서비스가 정상적으로 작동하고 있는지, 어느 정도의 성능을 내고 있는지를 확인하기 위해서 각 서비스가 제공하고 있는 모니터링 기능을
이용할 수 있지만 AWS 의 CloudWatch 를 이용하면 간단하게 여러 서비스들을 하나의 로그가 나오도록 묶을 수도 있습니다. 

 

우선 모니터링을 할땐 어떤 요소들을 고려해야할까요?

단순히 모니터링을 진행하려고한다면 갑자기 헷갈릴 수 있습니다.

서비스에서 제공하는 로그들을 보는건지, 아니면 시스템의 메모리 혹은 CPU 사용량을 봐야하는지 헷갈릴 수 있습니다.

 

모니터링을 시작할 때 아래의 4 가지를 기준으로 어떤 부분을 모니터링을 할 것인지 선택해봅시다.

  1. 서버 메트릭 모니터링 : CPU, MEM 과 같이 소프트웨어 및 하드웨어의 성능 모니터링
  2. 프로세스 로그 모니터링 : LOG 파일과 같이 프로세스에서 생성하는 로그를 파악하기 위한 모니터링
  3. 요청 추적 : 특정 API 혹은 요청에 대해 진행이 되고 있는지 파악하기 위한 모니터링
  4. 알림 : 특정 상황 및 수준 발생시 사용자에게 해당 상황을 전달해주는 기능

 

서버 메트릭 모니터링과 프로세스 로그 모니터링

CloudWatch 를 이용한 서버 메트릭 모니터링은 두 가지 선택이 있습니다.

 

1) Cloudwatch 의 기본 설정을 이용한 서버 메트릭 모니터링

AWS 의 여러 서비스들은 기본적으로 서버 메트릭 모니터링을 제공합니다. 예를 들어, EC2 는 CPU 사용량, 네트워크 IN/OUT 등을 제공합니다. 이는 AWS 기본 모니터링 및 세부 모니터링(https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html) 을 참고하시면 더 좋을 것 같습니다.

 

2) CloudAgent 를 이용한 서버 메트릭 모니터링

CloudAgent 를 EC2 에 설치하고 Cloudwatch 로 서버 메트릭을 전달할 수 있습니다. Cloudwatch 의 기본 설정 이외에 MEM, Disk 에 대한 내용도 수집할 수 있습니다. 좀 더 자세한 내용은 아래의 문서를 참고하시면 더 좋을 것 같습니다.  https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

 

CloudAgent 를 이용한다면 우리가 TOP 명령어를 사용했을 때 수집되는 메트릭들을 수집할 수 있습니다. (StatsD  collectd 프로토콜)

또한, CloudAgent 는 특정 서비스가 파일로 로그를 생성한다면 해당 파일에 작성되는 내용을 CloudWatch 로 전달할 수 있습니다. 그렇기 때문에 프로세스 로그 모니터링도 같이 진행할 수 있습니다.

 

한번 EC2 에 CloudWatch 를 이용해서 로그 모니터링 하는 것을 자세히 알아보겠습니다.

이 내용은 AWS 가 더 자세하게 작성되어 있기 때문에 AWS 문서를 보실 수 있다면 해당 내용을 보시는 것을 추천드립니다.

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html

 

저는 ubuntu 22.04 로 진행하였습니다.

 

 

(1) CloudWatch agent 설치 및 실행

 

  1. 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) amazon-cloudwatch-agent-config-wizard 를 통해서 cloudwatch-agent 의 설정파일을 생성합니다.



config-wizard 실행

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
  • 여러분이 제공할 지표를 config-wizard 실행 할때 설정할 수 있습니다.
  • cloudwatch 로 보낼 로그 파일이 있다면 위치를 알아두세오 config-wizard 에 작성해야합니다.
  • 처음하신다면 대부분 Default 로 진행하시겠지만, 그래도 잘 읽으시면서 Default 설정하시기 바랍니다.
💡  config-wizard 는 결과물로 config 파일을 생성합니다.

 생성된 config 파일은 AWS SSM(SyStem Manager) 의 파라미터 저장소에 저장되기 때문에
  config 파일 생성에 SSM 에 파일을 저장할 수 있는 권한을 가진 IAM 이 필요합니다.

config-wizard 실행 후 중간에 IAM 입력하는 부분

config file 적용 및 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

 

(3) 상태 확인

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

아래처럼 메시지가 나오면 성공입니다.

Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded

CloudWatch -> 모든지표 -> CWAgent -> InstanceId 에서 여러분이 보낸 지표를 확인했을 때 있으면 지표가 보내지고 있는 것입니다.

 

🔔 types.db 라는 파일이 없다는 에러가 나올 때

에러메시지 예시

Error running agent: Error loading config file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml: error parsing socket_listener, open /usr/share/collectd/types.db: no such file or directory

types.db 라는 빈 파일을 생성해야합니다.

$ sudo mkdir /usr/share/collectd
$ sudo touch /usr/share/collectd/types.db

 

🔔 위 과정 모두 성공인데 CloudWatch -> 모든지표 -> CWAgent -> InstanceId 에 보이지 않을 때

EC2 에 IAM CloudWatch 에 전달할 수 있는 권한이 설정되어 있어야합니다.

 

아래의 문서를 확인한후 Role 을 생성한뒤 EC2 선택 -> 작업 -> 보안 -> IAM 역할 수정에서 생성한 Role 을 선택하세요

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent-commandline.html

 

 

EC2를 Cloudwatch로 모니터링하는 내용은 여기서 끝입니다. 요청 추적은 AWS 에서 X-ray 라는 서비스를 제공하더라구요. X-ray 를 이용하거나 특정 서비스에 대한 과정을 파일 혹은 데이터베이스에 기록한 후 추후 쿼리를 통해  확인할 수 있습니다.

 

알림은 SNS + Lambda 를 통해 슬랙, 디스코드, 이메일 등에 알람을 보내실 수 있을겁니다