CloudWatch Logs
에 로그가 담긴 로그 그룹
이 존재해야 합니다.lambda_function -> CloudWatch Logs(/aws/lambda/lambda_function)
-> test-hyeob-subscription-function -> CloudWatch Logs(/aws/lambda/test-hyeob-subscription-function)
AWSLambdaBasicExecutionRole
정책이 연결된 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();
}
});
};
[CloudWatch Logs 콘솔] > [로그 그룹] > 원하는 로그 그룹 선택 > [구독 필터] > [생성] > [Lambda 구독 필터 생성]
Lambda 함수
를 선택합니다.로그 형식
을 기타
로 선택하면, 구독 필터 패턴
에서 필터링을 원하는 문자열을 입력하면 그 문자열을 가진 줄이 필터링됩니다.로그 데이터
를 선택하고, 패턴 테스트
버튼을 눌러 필터링이 원활히 작동하는지 확인합니다.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 함수
를 통해 가공할 수 있습니다.