Lambda Telemetry API 이벤트 스키마 참조

Lambda Telemetry API 이벤트 스키마 참조

Lambda Telemetry API 엔드포인트를 사용해 확장(extension)을 텔레메트리 스트림에 구독시킬 수 있어요. Telemetry API 엔드포인트는 AWS_LAMBDA_RUNTIME_API 환경 변수에서 얻을 수 있습니다. API 요청을 보내려면 API 버전(2022-07-01/)과 telemetry/를 추가하세요. 예:

출처: AWS Lambda 개발자 안내서

본문

http://${AWS_LAMBDA_RUNTIME_API}/2022-07-01/telemetry/

구독 응답 버전 2025-01-29의 OpenAPI Specification(OAS) 정의는 다음을 참고하세요:

다음 표는 Telemetry API가 지원하는 모든 유형의 Event 객체를 요약한 것입니다.

이벤트 유형 type 값 설명
Platform event platform.initStart 함수 초기화 시작
Platform event platform.initRuntimeDone 함수 초기화 완료
Platform event platform.initReport 함수 초기화 보고
Platform event platform.start 함수 호출 시작
Platform event platform.runtimeDone 런타임이 성공 또는 실패로 이벤트 처리를 마침
Platform event platform.report 함수 호출 보고
Platform event platform.restoreStart 런타임 복원 시작
Platform event platform.restoreRuntimeDone 런타임 복원 완료
Platform event platform.restoreReport 런타임 복원 보고
Platform event platform.telemetrySubscription 확장이 Telemetry API에 구독함
Platform event platform.logsDropped Lambda가 로그 항목을 버림
Function logs function 함수 코드의 로그 줄
Extension logs extension 확장 코드의 로그 줄

Contents

Telemetry API Event 객체 유형

이 섹션에서는 Lambda Telemetry API가 지원하는 Event 객체의 유형을 자세히 설명합니다. 이벤트 설명에서 물음표(?)는 해당 속성이 객체에 없을 수도 있음을 나타냅니다.

platform.initStart

platform.initStart 이벤트는 함수 초기화 단계가 시작되었음을 나타냅니다. platform.initStart Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.initStart
- record: PlatformInitStart

PlatformInitStart 객체는 다음 속성을 가집니다:

  • functionName – String
  • functionVersion – String
  • initializationType – InitType 객체
  • instanceId? – String
  • instanceMaxMemory? – Integer
  • phase – InitPhase 객체
  • runtimeVersion? – String
  • runtimeVersionArn? – String

다음은 platform.initStart 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.initStart",
    "record": {
        "initializationType": "on-demand",
        "phase": "init",
        "runtimeVersion": "nodejs-14.v3",
        "runtimeVersionArn": "arn",
        "functionName": "myFunction",
        "functionVersion": "$LATEST",
        "instanceId": "82561ce0-53dd-47d1-90e0-c8f5e063e62e",
        "instanceMaxMemory": 256
    }
}

platform.initRuntimeDone

platform.initRuntimeDone 이벤트는 함수 초기화 단계가 완료되었음을 나타냅니다. platform.initRuntimeDone Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.initRuntimeDone
- record: PlatformInitRuntimeDone

PlatformInitRuntimeDone 객체는 다음 속성을 가집니다:

  • initializationType – InitType 객체
  • phase – InitPhase 객체
  • status – Status 객체
  • spans? – Span 객체 목록

다음은 platform.initRuntimeDone 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.initRuntimeDone",
    "record": {
        "initializationType": "on-demand"
        "status": "success",
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-06-02T12:02:33.913Z",
                "durationMs": 70.5
            }
        ]
    }
}

platform.initReport

platform.initReport 이벤트는 함수 초기화 단계의 전체 보고서를 포함합니다. platform.initReport Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.initReport
- record: PlatformInitReport

PlatformInitReport 객체는 다음 속성을 가집니다:

  • errorType? – string
  • initializationType – InitType 객체
  • phase – InitPhase 객체
  • metrics – InitReportMetrics 객체
  • spans? – Span 객체 목록
  • status – Status 객체

다음은 platform.initReport 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.initReport",
    "record": {
        "initializationType": "on-demand",
        "status": "success",
        "phase": "init",
        "metrics": {
            "durationMs": 125.33
        },
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-06-02T12:02:33.913Z",
                "durationMs": 90.1
            }
        ]
    }
}

platform.start

platform.start 이벤트는 함수 호출(인보케이션) 단계가 시작되었음을 나타냅니다. platform.start Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.start
- record: PlatformStart

PlatformStart 객체는 다음 속성을 가집니다:

  • requestId – String
  • version? – String
  • tracing? – TraceContext

다음은 platform.start 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.start",
    "record": {
        "requestId": "6d68ca91-49c9-448d-89b8-7ca3e6dc66aa",
        "version": "$LATEST",
        "tracing": {
            "spanId": "54565fb41ac79632",
            "type": "X-Amzn-Trace-Id",
            "value": "Root=1-62e900b2-710d76f009d6e7785905449a;Parent=0efbd19962d95b05;Sampled=1"
        }
    }
}

platform.runtimeDone

platform.runtimeDone 이벤트는 함수 호출 단계가 완료되었음을 나타냅니다. platform.runtimeDone Event 객체는 다음과 같은 형태를 가집니다:

Lambda Managed Instances

platform.runtimeDone 이벤트는 Lambda Managed Instances에서 지원되지 않습니다. Managed Instances에서 실행되는 확장은 이 이벤트를 받지 못하는데, 확장이 Managed Instances에서 INVOKE 이벤트를 구독할 수 없기 때문이에요. 여러 호출을 동시에 처리할 수 있는 동시 실행 모델 때문에 확장은 Lambda(기본) 함수에서 전통적으로 했던 것처럼 개별 호출에 대한 사후 호출 처리를 수행할 수 없습니다.

Managed Instances의 경우 platform.runtimeDone에 보통 포함되는 responseLatency와 responseDuration 스팬은 대신 platform.report 이벤트에서 사용할 수 있어요. 자세한 내용은 platform.report를 참고하세요.

Event: Object
- time: String
- type: String = platform.runtimeDone
- record: PlatformRuntimeDone

PlatformRuntimeDone 객체는 다음 속성을 가집니다:

  • errorType? – String
  • metrics? – RuntimeDoneMetrics 객체
  • requestId – String
  • status – Status 객체
  • spans? – Span 객체 목록
  • tracing? – TraceContext 객체

다음은 platform.runtimeDone 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.runtimeDone",
    "record": {
        "requestId": "6d68ca91-49c9-448d-89b8-7ca3e6dc66aa",
        "status": "success",
        "tracing": {
            "spanId": "54565fb41ac79632",
            "type": "X-Amzn-Trace-Id",
            "value": "Root=1-62e900b2-710d76f009d6e7785905449a;Parent=0efbd19962d95b05;Sampled=1"
        },
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-08-02T12:01:23:521Z",
                "durationMs": 80.0
            }
        ],
        "metrics": {
            "durationMs": 140.0,
            "producedBytes": 16
        }
    }
}

platform.report

platform.report 이벤트는 함수 호출 단계의 전체 보고서를 포함합니다. platform.report Event 객체는 다음과 같은 형태를 가집니다:

Lambda Managed Instances

Lambda Managed Instances의 platform.report 이벤트는 Lambda(기본) 함수와 비교해 지표와 스팬이 다릅니다. Managed Instances의 경우:

  • 스팬: extensionOverhead 대신 responseLatency와 responseDuration을 포함합니다. 동시 실행 모델 때문에 확장이 Managed Instances에서 INVOKE 이벤트를 구독할 수 없어서 extensionOverhead 스팬은 사용할 수 없습니다.
  • 지표: durationMs만 포함합니다. billedDurationMs, initDurationMs, maxMemoryUsedMB, memorySizeMB는 포함되지 않습니다. 이러한 호출별 지표는 동시 실행 환경에는 적용되지 않습니다. 리소스 사용률 지표는 Lambda Managed Instances 모니터링이나 Lambda Insights를 사용하세요.
Event: Object
- time: String
- type: String = platform.report
- record: PlatformReport

PlatformReport 객체는 다음 속성을 가집니다:

  • metrics – ReportMetrics 객체
  • requestId – String
  • spans? – Span 객체 목록
  • status – Status 객체
  • tracing? – TraceContext 객체

다음은 platform.report 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:01:15.000Z",
    "type": "platform.report",
    "record": {
        "metrics": {
            "billedDurationMs": 694,
            "durationMs": 693.92,
            "initDurationMs": 397.68,
            "maxMemoryUsedMB": 84,
            "memorySizeMB": 128
        },
        "requestId": "6d68ca91-49c9-448d-89b8-7ca3e6dc66aa",
    }
}

platform.restoreStart

platform.restoreStart 이벤트는 함수 환경 복원 이벤트가 시작되었음을 나타냅니다. 환경 복원 이벤트에서 Lambda는 처음부터 초기화하는 대신 캐시된 스냅샷에서 환경을 만듭니다. 자세한 내용은 SnapStart를 참고하세요. platform.restoreStart Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.restoreStart
- record: PlatformRestoreStart

PlatformRestoreStart 객체는 다음 속성을 가집니다:

  • functionName – String
  • functionVersion – String
  • instanceId? – String
  • instanceMaxMemory? – String
  • runtimeVersion? – String
  • runtimeVersionArn? – String

다음은 platform.restoreStart 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.restoreStart",
    "record": {
        "runtimeVersion": "nodejs-14.v3",
        "runtimeVersionArn": "arn",
        "functionName": "myFunction",
        "functionVersion": "$LATEST",
        "instanceId": "82561ce0-53dd-47d1-90e0-c8f5e063e62e",
        "instanceMaxMemory": 256
    }
}

platform.restoreRuntimeDone

platform.restoreRuntimeDone 이벤트는 함수 환경 복원 이벤트가 완료되었음을 나타냅니다. 환경 복원 이벤트에서 Lambda는 처음부터 초기화하는 대신 캐시된 스냅샷에서 환경을 만듭니다. 자세한 내용은 SnapStart를 참고하세요. platform.restoreRuntimeDone Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.restoreRuntimeDone
- record: PlatformRestoreRuntimeDone

PlatformRestoreRuntimeDone 객체는 다음 속성을 가집니다:

  • errorType? – String
  • spans? – Span 객체 목록
  • status – Status 객체

다음은 platform.restoreRuntimeDone 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.restoreRuntimeDone",
    "record": {
        "status": "success",
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-08-02T12:01:23:521Z",
                "durationMs": 80.0
            }
        ]
    }
}

platform.restoreReport

platform.restoreReport 이벤트는 함수 복원 이벤트의 전체 보고서를 포함합니다. platform.restoreReport Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.restoreReport
- record: PlatformRestoreReport

PlatformRestoreReport 객체는 다음 속성을 가집니다:

  • errorType? – string
  • metrics? – RestoreReportMetrics 객체
  • spans? – Span 객체 목록
  • status – Status 객체

다음은 platform.restoreReport 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:00:15.064Z",
    "type": "platform.restoreReport",
    "record": {
        "status": "success",
        "metrics": {
            "durationMs": 15.19
        },
        "spans": [
            {
                "name": "someTimeSpan",
                "start": "2022-08-02T12:01:23:521Z",
                "durationMs": 30.0
            }
        ]
    }
}

platform.extension

extension 이벤트는 확장 코드의 로그를 포함합니다. extension Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = extension
- record: {}

PlatformExtension 객체는 다음 속성을 가집니다:

  • events – String 목록
  • name – String
  • state – String

다음은 platform.extension 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:02:15.000Z",
    "type": "platform.extension",
    "record": {
        "events": [ "INVOKE", "SHUTDOWN" ],
        "name": "my-telemetry-extension",
        "state": "Ready"
    }
}

platform.telemetrySubscription

platform.telemetrySubscription 이벤트는 확장 구독에 대한 정보를 포함합니다. platform.telemetrySubscription Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.telemetrySubscription
- record: PlatformTelemetrySubscription

PlatformTelemetrySubscription 객체는 다음 속성을 가집니다:

  • name – String
  • state – String
  • types – String 목록

다음은 platform.telemetrySubscription 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:02:35.000Z",
    "type": "platform.telemetrySubscription",
    "record": {
        "name": "my-telemetry-extension",
        "state": "Subscribed",
        "types": [ "platform", "function" ]
    }
}

platform.logsDropped

platform.logsDropped 이벤트는 버려진 이벤트에 대한 정보를 포함합니다. Lambda는 함수가 Lambda가 처리할 수 있는 것보다 너무 높은 속도로 로그를 출력할 때 platform.logsDropped 이벤트를 발행합니다. Lambda가 함수가 로그를 생성하는 속도로 로그를 CloudWatch 또는 Telemetry API에 구독한 확장에 보낼 수 없으면, 함수 실행이 느려지는 것을 방지하기 위해 로그를 버립니다. platform.logsDropped Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = platform.logsDropped
- record: PlatformLogsDropped

PlatformLogsDropped 객체는 다음 속성을 가집니다:

  • droppedBytes – Integer
  • droppedRecords – Integer
  • reason – String

다음은 platform.logsDropped 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:02:35.000Z",
    "type": "platform.logsDropped",
    "record": {
        "droppedBytes": 12345,
        "droppedRecords": 123,
        "reason": "Some logs were dropped because the downstream consumer is slower than the logs production rate"
    }
}

function

function 이벤트는 함수 코드의 로그를 포함합니다. function Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = function
- record: {}

record 필드의 형식은 함수 로그가 일반 텍스트(plain text)인지 JSON 형식인지에 따라 달라져요. 로그 형식 구성 옵션에 대해 더 배우려면 JSON 및 일반 텍스트 로그 형식 구성을 참고하세요.

다음은 로그 형식이 일반 텍스트인 function 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "function",
    "record": "[INFO] Hello world, I am a function!"
}

다음은 로그 형식이 JSON인 function 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "function",
    "record": {
        "timestamp": "2022-10-12T00:03:50.000Z",
        "level": "INFO",
        "requestId": "79b4f56e-95b1-4643-9700-2807f4e68189",
        "message": "Hello world, I am a function!"
    }
}

참고

사용 중인 스키마 버전이 2022-12-13 버전보다 오래된 경우, 함수의 로깅 형식이 JSON으로 구성되어 있어도 "record"는 항상 문자열로 렌더링됩니다. Lambda Managed Instances의 경우 스키마 버전 2025-01-29를 사용해야 합니다.

extension

extension 이벤트는 확장 코드의 로그를 포함합니다. extension Event 객체는 다음과 같은 형태를 가집니다:

Event: Object
- time: String
- type: String = extension
- record: {}

record 필드의 형식은 함수 로그가 일반 텍스트인지 JSON 형식인지에 따라 달라져요. 로그 형식 구성 옵션에 대해 더 배우려면 JSON 및 일반 텍스트 로그 형식 구성을 참고하세요.

다음은 로그 형식이 일반 텍스트인 extension 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "extension",
    "record": "[INFO] Hello world, I am an extension!"
}

다음은 로그 형식이 JSON인 extension 유형의 Event 예시입니다:

{
    "time": "2022-10-12T00:03:50.000Z",
    "type": "extension",
    "record": {
       "timestamp": "2022-10-12T00:03:50.000Z",
       "level": "INFO",
       "requestId": "79b4f56e-95b1-4643-9700-2807f4e68189",
       "message": "Hello world, I am an extension!"
    }
}

참고

사용 중인 스키마 버전이 2022-12-13 버전보다 오래된 경우, 함수의 로깅 형식이 JSON으로 구성되어 있어도 "record"는 항상 문자열로 렌더링됩니다. Lambda Managed Instances의 경우 스키마 버전 2025-01-29를 사용해야 합니다.

공유 객체 유형

이 섹션에서는 Lambda Telemetry API가 지원하는 공유 객체의 유형을 자세히 설명합니다.

InitPhase

초기화 단계가 발생하는 시점을 설명하는 문자열 열거형(enum)입니다. 대부분의 경우 Lambda는 init 단계 동안 함수 초기화 코드를 실행합니다. 그러나 일부 오류 상황에서는 Lambda가 invoke 단계 동안 함수 초기화 코드를 다시 실행할 수 있습니다. (이를 suppressed init이라고 합니다.)

  • Type – String
  • Valid values – init|invoke|snap-start

InitReportMetrics

초기화 단계에 대한 지표를 포함하는 객체입니다.

  • Type – Object

InitReportMetrics 객체는 다음과 같은 형태를 가집니다:

InitReportMetrics: Object
- durationMs: Double

다음은 InitReportMetrics 객체 예시입니다:

{
    "durationMs": 247.88
}

InitType

Lambda가 환경을 어떻게 초기화했는지 설명하는 문자열 열거형입니다.

  • Type – String
  • Valid values – on-demand|provisioned-concurrency

ReportMetrics

완료된 단계에 대한 지표를 포함하는 객체입니다.

  • Type – Object

ReportMetrics 객체는 다음과 같은 형태를 가집니다:

ReportMetrics: Object
- billedDurationMs: Integer
- durationMs: Double
- initDurationMs?: Double
- maxMemoryUsedMB: Integer
- memorySizeMB: Integer
- restoreDurationMs?: Double

다음은 ReportMetrics 객체 예시입니다:

{
    "billedDurationMs": 694,
    "durationMs": 693.92,
    "initDurationMs": 397.68,
    "maxMemoryUsedMB": 84,
    "memorySizeMB": 128
}

RestoreReportMetrics

완료된 복원 단계에 대한 지표를 포함하는 객체입니다.

  • Type – Object

RestoreReportMetrics 객체는 다음과 같은 형태를 가집니다:

RestoreReportMetrics: Object
- durationMs: Double

다음은 RestoreReportMetrics 객체 예시입니다:

{
    "durationMs": 15.19
}

RuntimeDoneMetrics

호출 단계에 대한 지표를 포함하는 객체입니다.

  • Type – Object

RuntimeDoneMetrics 객체는 다음과 같은 형태를 가집니다:

RuntimeDoneMetrics: Object
- durationMs: Double
- producedBytes?: Integer

다음은 RuntimeDoneMetrics 객체 예시입니다:

{
    "durationMs": 200.0,
    "producedBytes": 15
}

Span

스팬(span)에 대한 세부 정보를 포함하는 객체입니다. 스팬은 트레이스에서 작업 또는 연산의 단위를 나타냅니다. 스팬에 대한 자세한 내용은 OpenTelemetry Docs 웹사이트의 Tracing API 페이지에 있는 Span을 참고하세요.

Lambda는 platform.RuntimeDone 이벤트에 대해 다음 스팬을 지원합니다:

  • responseLatency 스팬은 Lambda 함수가 응답 보내기를 시작하는 데 걸린 시간을 설명합니다.
  • responseDuration 스팬은 Lambda 함수가 전체 응답 보내기를 마치는 데 걸린 시간을 설명합니다.
  • runtimeOverhead 스팬은 Lambda 런타임이 다음 함수 호출을 처리할 준비가 되었음을 알리는 데 걸린 시간을 설명합니다. 이는 함수 응답을 반환한 후 런타임이 다음 이벤트를 얻기 위해 next 호출 API를 호출하는 데 걸린 시간이에요.

다음은 responseLatency 스팬 객체 예시입니다:

{
        "name": "responseLatency", 
        "start": "2022-08-02T12:01:23.521Z",
        "durationMs": 23.02
}

Status

초기화 또는 호출 단계의 상태를 설명하는 객체입니다. 상태가 failure 또는 error이면 Status 객체는 오류를 설명하는 errorType 필드도 포함합니다.

  • Type – Object
  • Valid status values – success|failure|error|timeout

TraceContext

트레이스의 속성을 설명하는 객체입니다.

  • Type – Object

TraceContext 객체는 다음과 같은 형태를 가집니다:

TraceContext: Object
- spanId?: String
- type: TracingType enum
- value: String

다음은 TraceContext 객체 예시입니다:

{
    "spanId": "073a49012f3c312e",
    "type": "X-Amzn-Trace-Id",
    "value": "Root=1-62e900b2-710d76f009d6e7785905449a;Parent=0efbd19962d95b05;Sampled=1"
}

TracingType

TraceContext 객체의 트레이싱 유형을 설명하는 문자열 열거형입니다.

  • Type – String
  • Valid values – X-Amzn-Trace-Id

더 알아보기 (Learn more)