v2.4.2

Telemetry

OpenTelemetry → Grafana Cloud. Every Lambda runs two AWS Lambda extension layers that ship signals to a shared OTLP collector.

Signals

SignalDestinationSource
TracesTempo (grafanacloud-traces)X-Ray + OTel instrumentation
LogsLokiLambda structured logs (JSON)
MetricsPrometheusOTel + CloudWatch

Architecture

flowchart LR
  L[Lambda] -->|AWS_LAMBDA_EXEC_WRAPPER| INST[OTel Node instrumentation]
  L -->|telemetryapi| COL[Collector layer - Grafana]
  INST -->|otlp http/protobuf localhost:4318| COL
  COL -->|otlphttp/drive_otlp| OTLP["otlp.<root-domain>"]
  OTLP --> GC[Grafana Cloud]

Two layers per Lambda (from serverless.common.yml custom.otelCollect + custom.otelInstrument):

  • Collector layer (Grafana collector-lambda-extension) — receives OTLP on localhost:4318, exports to DRIVE_OTLP_ENDPOINT with DRIVE_OTLP_AUTH_HEADER.
  • Instrumentation layer (aws-otel-nodejs-arm64) — auto-instruments Node (aws-sdk, http/https, dns, host) via AWS_LAMBDA_EXEC_WRAPPER.

Resource attributes

Set via OTEL_RESOURCE_ATTRIBUTES:

service.name=${service}
service.namespace=aws.lambda
deployment.environment=${stage}
cloud.provider=aws
cloud.platform=aws_lambda
cloud.region=${region}

Collector backstops service.namespace, deployment.environment(.name) (X-Ray receiver path doesn't see env vars).

Pages

TopicPage
Collector config, layers, OTLP exportOpenTelemetry
TraceQL queries in TempoTracing
Structured JSON logs in LokiLogs
CloudWatch + Prometheus metricsMetrics
Logger/TraceUtils lib + drive-ai attrsdrive-ai integration
Esc