반응형

안녕하세요. 
오늘은 CloudWatch Log Agent을 설치해 서버에서 발생하는 Log을 CloudWatch를 통해 모니터링하는 방법에 대해 말씀드리겠습니다. 

Agent 신규 설치 시 CloudWatch Logs Agent는 비권장 설치 방식이기 때문에 CloudWatch Agent로 설치하는 것을 권장합니다.
(관련 설치 페이지 : https://blog.wstar.site/15)

하지만!! CloudWatch Logs Agent도 어떻게 설치 및 설정을 하는지 알면 좋겠죠?? 

CloudWatch logs Agent 설치 및 준비사항

Agent을 설치하기 위해서는 당연히 설치 파일을 다운로드 받아야 하고, CloudWatch log에 데이터를 전송할 수 있는 권한이 필요합니다. 

[CloudWatch logs 설치]
#!/bin/bash
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
chmod +x ./awslogs-agent-setup.py
./awslogs-agent-setup.py -n -r us-east-1 -c s3://DOC-EXAMPLE-BUCKET1/my-config-file
[CloudWatch logs 권한 policy]
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
      "Resource": [
        "*"
    ]
  }
 ]
}

CloudWatch Logs 구성 파일

  • 경로
    • 기본 구성 파일 경로 : /var/awslogs/etc/awslogs.conf
  • 구성 파일 샘플 
# 로그파일1
[로그 파일 구분 명1]
datetime_format = %Y-%m-%d %H:%M:%S.%f
file = <path>/<application log name>
buffer_duration = 5000
initial_position = start_of_file
log_group_name = <cloudwatch logs group name>
log_stream_name = log-{local_hostname}
multi_line_start_pattern = {datetime_format}

# 로그파일2
[로그 파일 구분 명2]
datetime_format = %Y-%m-%d %H:%M:%S.%f
file = <path>/<applicatoin error log name>
buffer_duration = 5000
initial_position = start_of_file
log_group_name = <cloudwatch logs group name>
log_stream_name = log-{local_hostname}
multi_line_start_pattern = {datetime_format}
[Agent 재기동 명령]

# service awslogs restart (BCM 기준 재기동 명령어)
# service awslogsd restart (Amazon Linux 2 기준)

Logback 설정 관련

DateTime format

  • CloudWatch - Logback 간 지원하는 date time format이 다르다
    • CloudWatch - microsecond with zero padding (ex. 2021-05-03 14:10:05.031000)
    • Logback - millisecond (ex. 2021-05-03 14:10:05.031)
  • CloudWatch에서 timestamp를 인식하게 하기 위해서 Logback 설정 날짜 포맷 뒤 세 자리 000 붙여줌
  • 패턴 샘플
<property name="CUSTOM_FILE_LOG_PATTERN" value="%date{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}000 ${LOG_LEVEL_PATTERN:-%p} ${PID:-} [%X{traceId}] --- [%thread] %logger{39} %mdc{requestId:--} : %message%n${LOG_EXCEPTION_CONVERSION_WORD:-%exception}" />

Coloring 설정

  • Logback 패턴 중 컬러링 설정이 들어가 있는 경우 서버 접속하여 확인 시 로그가 정상적으로 보이더라도, CloudWatch에서 @message가 깨져서 나올 수 있다.
  • 컬러링 패턴 샘플
appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- CloudWatch 설정 파일 내 날짜 포맷과 일치시키기 위하여 날짜 포맷 뒤 세 자리 Zero padding -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}000 %highlight([%-5level]) [%X{traceId}] [%thread] %cyan([%logger{36}]) - %m%n</pattern>
        </encoder>
</appender>

* 서버 로그는 컬러링 설정이 적용되어 예쁘게 나오지만,
   CloudWatch상에서는 로그 메시지에 임의의 문자들이 붙어 제대로 노출되지 않음

 

 

반응형

+ Recent posts