CloudWatch Logs 적용하기

Hyunta·2022년 8월 11일
0

학습 동기

4차 데모 요구사항에 CloudWatch logs 대시보드를 구성한다 가 추가되었다. CloudWatch란 AWS 리소스 및 AWS에서 실행되는 애플리케이션을 실시간으로 모니터링하는 서비스다. CloudWatch를 사용하게 되면 시스템 전체의 리소스 사용률, 애플리케이션 성능, 운영 상태를 파악할 수 있다. 우리는 CPU 사용률, 메모리 사용률, 네트워크 송수신 상태와 출력된 로그들을 볼 수 있도록 설정을 할 것이다.

사전 정보

자료를 찾다보니 metric과 log를 따로 수집하는 Agent와 통합해서 한번에 받아오는 Agent가 있었습니다. 전자는 예전 방식이고 사용 중단되는 과정에 있어서 python 구버전이 필요하고, setUp하면서 손이 많이 갔습니다. AWS에서도 권장하지 않는 방식이니 권장하는 방식으로 진행하면 훨씬 수월하게 setUp 가능합니다.

준비

CloudWatch를 시험해보기 위해서 EC2 인스턴스를 하나 만들었습니다. 그리고 로그를 남기는 예시 프로젝트를 하나 만들었습니다. 해당 EC2에 예시 프로젝트를 실행시켜서 로그 파일을 생성하도록 만들면 준비는 끝입니다.

EC2 인스턴스에 IAM 역할 생성

AWS 리소스에 엑세스하려면 권한이 필요합니다. CloudWatch Agent가 metric과 log를 작성하려면 EC2와 통신하면서 권한이 필요하기 때문에 IAM 역할을 만들어줘야 합니다.

AWS에 로그인 한뒤 아래 링크를 누르면 IAM 콘솔 페이지로 이동합니다.
https://console.aws.amazon.com/iam/

역할 만들기를 누릅니다.

EC2만 선택한 뒤 다음을 누릅니다.

CloudWatchAgentServerPolicy 를 검색하고 적용합니다.

다음을 누르고 원하는 이름을 작성하고(ex: CloudWatchAgentAdminRole) 생성하면 IAM이 생성됩니다.

이제 역할 생성과 EC2에 해당 권한을 부여하는 과정이 끝났습니다.


CloudWatch Agent 설치 및 Configuration

CloudWatch Agent 설치

여러 방법이 있는데, CommandLine을 이용해 CloudWatch Agent 패키지를 다운하고 설치하는 방법을 알아보겠습니다.
해당 링크로 가셔서 우선 본인 EC2의 아키텍쳐와 플랫폼을 확인합니다.

저는 ARM64 아키텍쳐의 Ubuntu로 EC2를 구성하여 https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb 주소를 이용하겠습니다.

1. 
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb

2.
https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi

3. 해당 패키지가 있는 디렉터리에서 입력합니다.
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

위 3 과정을 거치면 CloudWatch Agent 설치가 완료됩니다.

CloudWatch Agent Configuration File 생성

Configuration 파일을 생성하는 방법은 두가지가 있습니다. 첫번째는 wizard를 이용하는 방식이고, 두번째는 수동으로 configuration 파일을 만들어주는 것입니다. 저는 두가지 방법 중 수동으로 configuration 파일을 만들어줬습니다.

소주캉이 공유해준 Cofig 예시입니다.

{
  "agent": {
   "metrics_collection_interval": 60,
   "region": "ap-northeast-2",
   "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
   "debug": false
  }
  ,
  "metrics": {
    "metrics_collected": {
      "collectd": {},
      "cpu": {
        "resources": [
          "*"
        ],
        "measurement": [
          {
            "name": "cpu_usage_idle",
            "rename": "CPU_USAGE_IDLE",
            "unit": "Percent"
          },
          {
            "name": "cpu_usage_nice",
            "unit": "Percent"
          },
          "cpu_usage_guest"
        ],
        "totalcpu": false,
        "metrics_collection_interval": 10,
        "append_dimensions": {
          "test": "test1",
          "date": "2017-10-01"
        }
      },
      "netstat": {
        "measurement": [
          "tcp_established",
          "tcp_syn_sent",
          "tcp_close"
        ],
        "metrics_collection_interval": 60
      },
      "disk": {
        "measurement": [
          "used_percent"
        ],
        "resources": [
          "*"
        ],
        "drop_device": true
      },
      "processes": {
        "measurement": [
          "running",
          "sleeping",
          "dead"
        ]
      }
    },
    "append_dimensions": {
      "ImageId": "${aws:ImageId}",
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}",
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    },
    "aggregation_dimensions": [
      [
        "AutoScalingGroupName"
      ],
      [
        "InstanceId",
        "InstanceType"
      ],
      []
    ]
  },
  "logs":
   {
       "logs_collected": {
           "files": {
               "collect_list": [
                   {
                       "file_path": "{보낼 로그 파일 위치}",
                       "log_group_name": "amazon-cloudwatch-agent.log",
                       "log_stream_name": "my_log_stream_name_1",
                       "timestamp_format": "%H: %M: %S%y%b%-d"
                   }
               ]
           },
           "windows_events": {
               "collect_list": [
                   {
                       "event_name": "System",
                       "event_levels": [
                           "INFORMATION",
                           "ERROR"
                       ],
                       "log_group_name": "System",
                       "log_stream_name": "System"
                   },
                   {
                       "event_name": "CustomizedName",
                       "event_levels": [
                           "INFORMATION",
                           "ERROR"
                       ],
                       "log_group_name": "CustomizedLogGroup",
                       "log_stream_name": "CustomizedLogStream"
                   }
               ]
           }
       },
       "log_stream_name": "my_log_stream_name"
}
}

보낼 로그 파일 위치를 절대값으로 입력하면 됩니다.

로그 파일이 생성 날짜에 따라 이름이 바뀐다면, 해당 링크 를 참고하여 설정해주면 됩니다.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:{configuration-file-path}

configuration-file-path 는 절대경로로 입력하세요.

해당 명령어를 작성하면 작성한 config 파일을 통해 cloudWatch를 구성하고 콘솔에서 확인 가능합니다.

Reference

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

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html#Saving-Agent-Configuration-File

https://prolog.techcourse.co.kr/studylogs/2529

https://medium.com/@labcloud/ec2%EC%97%90-cloudwatch-agent-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-e7113cdc396e

profile
세상을 아름답게!

0개의 댓글