Kafka 이벤트 소스 매핑 로깅

Kafka 이벤트 소스 매핑 로깅

Kafka 이벤트 소스 매핑에 대한 시스템 수준 로깅을 구성해서 Lambda 이벤트 폴러가 CloudWatch로 보내는 시스템 로그를 활성화하고 필터링할 수 있어요.

이 기능은 Kafka 이벤트 소스 매핑에서만, 그리고 프로비저닝 모드(Provisioned mode)에서만 사용할 수 있어요.

로깅 구성이 있는 이벤트 소스 매핑의 경우, 콘솔 Lambda > 추가 리소스(Additional resources) > 이벤트 소스 매핑(event source mappings) 페이지의 Monitor 탭에서 이제 미리 빌드된 로그 쿼리(pre-built log queries)의 시스템 로그도 확인할 수 있어요.

출처: AWS Lambda 개발자 안내서

본문

로깅 작동 방식

이벤트 소스 매핑에서 로그 수준이 포함된 로깅 구성을 설정하면 Lambda 이벤트 폴러가 해당 로그(이벤트 소스 매핑 시스템 로그)를 보내요.

이벤트 소스 매핑은 Lambda 함수와 동일한 로그 대상(log destination)을 재사용해요. Lambda 함수의 실행 역할에 필요한 로깅 권한이 있는지 확인하세요.

이벤트 소스 매핑은 자체 로그 스트림을 가지며, 날짜와 이벤트 소스 매핑 UUID를 로그 스트림 이름으로 사용해요(예: 2020/01/01/12345678-1234-1234-1234-12345678901).

이벤트 소스 매핑 시스템 로그에 대해 다음 로그 수준 중에서 선택할 수 있어요.

로그 수준 용도
DEBUG(가장 상세) 이벤트 소스 처리 진행 상황에 대한 상세 정보
INFO 이벤트 소스 매핑의 정상 운영에 대한 메시지
WARN(가장 적음) 예기치 않은 동작으로 이어질 수 있는 잠재적 경고·오류에 대한 메시지

로그 수준을 선택하면 Lambda 이벤트 폴러는 해당 수준 이하의 로그를 보내요. 예를 들어 이벤트 소스 매핑 시스템 로그 수준을 INFO로 설정하면 이벤트 폴러는 DEBUG 수준의 로그 출력을 보내지 않아요.

로깅 구성

Kafka 이벤트 소스 매핑을 만들거나 업데이트할 때 로깅 구성을 설정할 수 있어요.

로깅 구성(콘솔)

로깅 구성(콘솔)

  1. Lambda 콘솔의 Functions 페이지를 열어요.

  2. 함수 이름을 선택해요.

  3. 다음 중 하나를 수행해요.

    • 새 Kafka 트리거를 추가하려면 Function overview에서 Add trigger를 선택해요.
    • 기존 Kafka 트리거를 수정하려면 트리거를 선택한 다음 Edit을 선택해요.
  4. Event poller configuration의 Provisioned mode에서 Configure 확인란을 활성화해요. 그러면 Log level 설정이 나타나요.

  5. Log level 드롭다운 목록을 선택하고 이벤트 소스 매핑에 대한 수준을 선택해요.

  6. 이벤트 소스 매핑을 만들거나 업데이트하려면 하단의 Add 또는 Save를 선택해요.

로깅 구성(AWS CLI)

로깅과 함께 이벤트 소스 매핑 만들기

다음 예시는 로깅 구성과 함께 Amazon MSK 이벤트 소스 매핑을 만들어요.

aws lambda create-event-source-mapping \
  --function-name my-kafka-function \
  --topics AWSKafkaTopic \
  --event-source-arn arn:aws:kafka:us-east-1:123456789012:cluster/my-cluster/abc123 \
  --starting-position LATEST \
  --provisioned-poller-config MinimumPollers=1,MaximumPollers=3 \
  --logging-config '{"SystemLogLevel":"DEBUG"}'

자체 관리형 Kafka의 경우 동일한 구문을 사용해요.

aws lambda create-event-source-mapping \
  --function-name my-kafka-function \
  --topics AWSKafkaTopic \
  --self-managed-event-source '{"Endpoints":{"KAFKA_BOOTSTRAP_SERVERS":["abc.xyz.com:9092"]}}' \
  --starting-position LATEST \
  --provisioned-poller-config MinimumPollers=1,MaximumPollers=3 \
  --logging-config '{"SystemLogLevel":"DEBUG"}'

로깅 구성 업데이트

로깅 구성을 추가하거나 수정하려면 update-event-source-mapping 명령을 사용해요.

aws lambda update-event-source-mapping \
  --uuid 12345678-1234-1234-1234-123456789012 \
  --logging-config '{"SystemLogLevel":"WARN"}'

Kafka 이벤트 소스 매핑 시스템 로그의 레코드 형식

Lambda 이벤트 폴러가 로그를 보낼 때 각 로그 항목에는 일반적인 이벤트 소스 매핑 메타데이터와 이벤트별 콘텐츠가 포함돼요.

WARN 로그 레코드

WARN 레코드에는 이벤트 폴러의 오류나 경고가 포함되며, 이벤트가 발생했을 때 생성돼요. 예:

{
    "eventType": "ESM_PROCESSING_EVENT",
    "timestamp": 1546347650000,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:12345678-1234-1234-1234-123456789012",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/tests-cluster/87654321-4321-4321-4321-876543221-s1",
    "eventProcessorId": "12345678-1234-1234-1234-123456789012/0",
    "logLevel": "WARN",
    "error": {
        "errorMessage": "Timeout expired while fetching topic metadata",
        "errorCode": "org.apache.kafka.common.errors.TimeoutException"
    }
}

INFO 로그 레코드

INFO 레코드에는 각 이벤트 폴러의 Kafka 소비자 클라이언트 구성이 포함되며, 소비자가 만들어지거나 변경될 때 생성돼요. 예:

{
    "eventType": "POLLER_STATUS_EVENT",
    "timestamp": 1546347660000,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:12345678-1234-1234-1234-123456789012",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/tests-cluster/87654321-4321-4321-4321-876543221-s1",
    "eventProcessorId": "12345678-1234-1234-1234-123456789012/0",
    "logLevel": "INFO",
    "kafkaEventSourceConnection": {
        "brokerEndpoints": "boot-abcd1234.c2.kafka-serverless.us-east-1.amazonaws.com:9098",
        "consumerId": "12345678-1234-1234-1234-123456789012-0",
        "topics": [
            "test"
        ],
        "consumerGroupId": "12345678-1234-1234-1234-123456789012",
        "securityProtocol": "SASL_SSL",
        "saslMechanism": "AWS_MSK_IAM",
        "totalPartitionCount": 2,
        "assignedPartitionCount": 2,
        "partitionsAssignmentGeneration": 5,
        "assignedPartitions": [
            "test-0",
            "test-1"
        ],
        "networkConfig": {
            "ipAddresses": [
                "10.100.141.1"
            ],
            "subnetCidrBlock": "10.100.128.0/20",
            "securityGroups": [
                "sg-abcdefabcdefabcdef"
            ]
        }
    }
}

DEBUG 로그 레코드

DEBUG 로그에는 이벤트 소스 매핑 처리의 Kafka 오프셋 관련 정보가 포함되며, 오프셋 정보는 1분마다 생성돼요. 예:

{
    "eventType": "KAFKA_STATUS_EVENT",
    "timestamp": 1546347670000,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:12345678-1234-1234-1234-123456789012",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/tests-cluster/87654321-4321-4321-4321-876543221-s1",
    "eventProcessorId": "12345678-1234-1234-1234-123456789012/0",
    "logLevel": "DEBUG",
    "kafkaPartitionOffsets": {
        "partition": "test-1",
        "endOffset": 5004,
        "consumedOffset": 5003,
        "processedOffset": 5003,
        "committedOffset": 5004
    }
}

더 알아보기 (Learn more)

Kafka 이벤트 소스 매핑 구성에 대한 자세한 내용은 AWS Lambda 개발자 안내서를 참고하세요.