[AWS] CloudWatch 로그 그룹 -> Lambda : 로그 필터링 후 전송(구독 필터)

HYEOB KIM·2022년 6월 13일
1

aws

목록 보기
29/62

사전 작업

  • CloudWatch Logs에 로그가 담긴 로그 그룹이 존재해야 합니다.

아키텍처

lambda_function -> CloudWatch Logs(/aws/lambda/lambda_function) 
-> test-hyeob-subscription-function -> CloudWatch Logs(/aws/lambda/test-hyeob-subscription-function)

CloudWatch 로그 그룹 -> Lambda 함수

1. Lambda 함수 실행 역할 생성

  • AWSLambdaBasicExecutionRole 정책이 연결된 Lambda용 역할을 생성합니다.

2. Lambda 함수 생성

  • CloudWatch 로그 그룹에서 필터링되어 보내온 로그를 처리할 함수를 생성합니다.

  • 앞서 생성한 실행 역할을 부여합니다.

  • AWS 공식 문서를 참고해, 수신한 로그를 보여주는 js 코드를 작성합니다.

var zlib = require('zlib');
exports.handler = function(input, context) {
    var payload = Buffer.from(input.awslogs.data, 'base64');
    zlib.gunzip(payload, function(e, result) {
        if (e) { 
            context.fail(e);
        } else {
            result = JSON.parse(result.toString());
            console.log("Event Data:", JSON.stringify(result, null, 2));
            context.succeed();
        }
    });
};

3. Lambda 구독 필터 생성

  • [CloudWatch Logs 콘솔] > [로그 그룹] > 원하는 로그 그룹 선택 > [구독 필터] > [생성] > [Lambda 구독 필터 생성]

대상 선택

  • 앞서 생성한 Lambda 함수를 선택합니다.

로그 형식 및 필터 구성

  • 로그 형식기타로 선택하면, 구독 필터 패턴에서 필터링을 원하는 문자열을 입력하면 그 문자열을 가진 줄이 필터링됩니다.

패턴 테스트

  • 로그 데이터를 선택하고, 패턴 테스트 버튼을 눌러 필터링이 원활히 작동하는지 확인합니다.

4. 테스트

  • 선택한 Lambda 함수로 접근해보면 트리거CloudWatch Logs가 설정되어 있는 것을 확인할 수 있습니다.

  • Lambda_function으로 접근해서 테스트 이벤트를 통해 함수를 호출합니다.

  • 다시 로그 그룹으로 돌아가서 선택한 Lambda 함수의 로그 그룹의 로그 스트림을 보면 아래와 같이 패턴에 맞게 로그가 필터링되어 나타난 것을 볼 수 있습니다.

{
    "messageType": "DATA_MESSAGE",
    "owner": "797587922006",
    "logGroup": "/aws/lambda/lambda_function",
    "logStream": "2022/06/13/[$LATEST]f27e02e2a343494595e99afe24f7f0b1",
    "subscriptionFilters": [
        "test-hyeob-subscription-filter"
    ],
    "logEvents": [
        {
            "id": "36909988877094605541449121199307387343409251306215374848",
            "timestamp": 1655101143415,
            "message": "START RequestId: 6ba03044-b86f-4d44-a25c-7e046d23ed61 Version: $LATEST\n"
        }
    ]
}
  • owner: 원본 로그 데이터의 AWS 계정 ID입니다.
  • logGroup: 원본 로그 데이터의 로그 그룹 이름입니다.
  • logStream: 원본 로그 데이터의 로그 스트림 이름입니다.
  • subscriptionFilters: 원본 로그 데이터과 일치한 구독 필터 이름 목록입니다.
  • messageType: 데이터 메시지는 "DATA_MESSAGE" 유형을 사용합니다. 때로 CloudWatch Logs는 주로 대상이 도달 가능한지 확인하기 위한 목적으로 "CONTROL_MESSAGE" 유형을 가진 Lambda 레코드를 출력할 수 있습니다.
  • logEvents: 그 이벤트 레코드 어레이 형태로 표현되는 실제 로그 데이터입니다. "ID" 속성은 모든 로그 이벤트의 고유 식별자입니다.

결론

  • CloudWatch Logs의 구독 필터를 이용하면 이처럼 원하는 로그를 필터링해서 Lambda 함수를 통해 가공할 수 있습니다.
profile
Devops Engineer

0개의 댓글