CloudWatch Agent

Falcon·2022년 4월 26일
1

aws

목록 보기
17/35
post-thumbnail

🎯Goals

  • EC2 의 로깅을 CloudWatch 로 할 수 있다.
  • 로깅 정책을 설정할 수 있다.

Settings

IndexValue
OSUbuntu 18.04 LTS
Service TypeEC2
Regionap-northeast-2 (Asia/Seoul)
Architecturex86-64

1. Agent-Install

# Install deb file
$ wget https://s3.ap-northeast-2.amazonaws.com/amazoncloudwatch-agent-ap-northeast-2/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb

# 압축해제
$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

2. Apply IAM role to EC2

IAM Role 생성

CloudWatchAgentServerRole 을 IAM 에서 생성

EC2 instance 에 적용

3. Configure

CloudWatch 는 쓴다는 것은 정책에 따라 로깅 및 모니터링을 하기 위해서 쓴다. 정책 지정을 위해
amazon-cloudwatch-agent-schema.json 파일을 설정해야한다.

# 다음 경로에 기본 설정파일이 설치되어있다.
$ [Install-Directory]/doc/amanzon-cloudwatch-agent-schema.json

총 3가지 섹션을 설정해야한다.

  1. agent
  2. metrics
  3. logs

설정파일 예시

amazon-cloudwatch-agent-schema.json

{
  "agent": {
    "metrics_collection_interval": 60,
    "region" : "ap-northeast-2",
    "debug" : false,
    "run_as_user": "ubuntu",
    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/service-backend.log"
  },
  "metrics": {
    "namespace": "Service-Backend",
    "metrics_collected": {
      "cpu": {
        "resources": [
          "*"
        ],
		// 중략..
      "net": {
        "resources": [
          "eth0"
        ],
        "measurement": [
          "bytes_sent",
          "bytes_recv",
          "drop_in",
          "drop_out"
        ]
      },
    },
// 중략..
      
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/Service-Backend.log",
            "log_group_name": "Service-Backend",
            "log_stream_name": "Service-Backend.log",
            "timezone": "Local"
          }
        ]
      }
    },
    "log_stream_name": "Service-Backend-Instance-Log",
    "force_flush_interval" : 15
  }
}

4. Execution

CloudWatch 에이전트 ctl 바이너리 파일에 -a fetch-config 옵션으로 위에서 설정한 .json 파일을 지정하면 에이전트가 시작된다.

다음과 같이 입력하자.

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config -m ec2 \
-s -c file:[Install-Directory]/doc/amanzon-cloudwatch-agent-schema.json

5. Check Log Event

Service-Backend.log

2022-04-26T03:00:06Z I! Starting AmazonCloudWatchAgent 1.247350.0
2022-04-26T03:00:06Z I! AWS SDK log level not set
2022-04-26T03:00:06Z I! Loaded inputs: processes cpu disk diskio logfile net mem netstat swap

CloudWatch-Logs

파일에 적힌 그대로 CloudWatch Log 에서 확인할 수 있다.

왜 CloudWatch Log 인가?

.log 파일을 자동으로 관리하게한다.

CloudWatch 에이전트는 생성한 로그 파일을 자동으로 교체합니다.
로그 파일의 크기가 100MB에 도달하면 교체됩니다.
에이전트는 교체된 로그 파일을 최대 7일 동안 보존하며 교체된 백업 로그 파일을 최대 5개까지 보존합니다. 백업 로그 파일의 파일 이름에는 타임스탬프가 추가됩니다. 이 타임스탬프는 파일이 교체된 날짜와 시간을 표시합니다
(예: amazon-cloudwatch-agent-2018-06-08T21-01-50.247.log.gz).
-AWS Documments

👉🏻 로그 파일이 과도하게 커지기 전에 알아서 타임스탬프를 붙여 백업해주고, 최신 로그 스트림을 차곡차곡 모니터링 할 수 있게한다. .log 파일이 지워져도 걱정 없다.
CloudWatch Log 에 보존기간을 만기 없음 으로 지정하면 영구보존이 가능하기 때문이다.👍🏻 (물론 요금은 과금된다)

More things (Optional)

pm2 같은 매니저 앱 사용시 cloudwatch log 파일에 쉽게 로깅할 수 있다. 앱 설정파일에서 대상 파일이름만 CloudWatch-Agent 에서 사용하는 .log 파일로 바꿔주면 된다.

pm2_app.json example

{
  "apps" : [
    {
      "name"            : "Error Test",
      "cwd"             : "src",
      "script"          : "ts-node error-test.ts",
      "watch"           : false,
      "autorestart"     : false,
      // 일반 로그 대상
      "out_file"        : "./aa.log",
      // 에러 로그 대상
      "error_file"      : "./error.log",
      // Timestamp format
      "log_date_format" : "YYYY-MM-DDTHH:mm:ssZ"
    }
  ]
}

다음처럼 로그를 남기면 CloudWatch Log 에서도 확인 가능하다.

2022-04-26T15:21:18+09:00: Type error bit

🔒 TimeZone Issue

TimeZone Issue

위에서 설정한 CloudWatch Agent json 파일의 타임존은 Local 로 AWS Region 이 ap-northeast-2 (서울) 이기 때문에 서울시간으로 타임스탬프가 찍히는 반면, pm2 의 기본 TimeZone 은 moment.js 를 따른다.

🔑 해결 방법

$ sudo rm /etc/localtime
# 기본 local timezone 을 Asia/Seoul 지역으로 설정.
$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

Tips

Lambda Timezone

AWS 람다에서는 TZ 환경 변수를 Asia/Seoul 로 추가하면 되고

pm2 Timezone

modment.js 를 사용하는 pm2 에서는 /etc/localtime 에 Asia/Seoul 타임존 정보파일을 링킹해주면된다.


🔗 Referecne

profile
I'm still hungry

0개의 댓글