When to Use the ADOT Lambda Layer
The ADOT Lambda Layer is the recommended Lambda ingestion path when your function runtime supports the OpenTelemetry SDK. It is a good fit when you want to:- Send logs, metrics, and traces from AWS Lambda directly to Bronto via OTLP, without going through CloudWatch
- Avoid CloudWatch ingestion fees on Lambda log volume
- Use the same
service.name/service.namespacerouting across Lambda, ECS, and EKS workloads
The layer captures logs emitted through the OpenTelemetry logging API in your function code (for example, via the OTel SDK or a bridged framework logger). Lambdaβs automatic
stdout / stderr capture still goes to CloudWatch β to also ship those, use the CloudWatch Log Forwarder alongside the layer, or route your application logger through OTel.Supported AWS Services
The ADOT Lambda Layer is Lambda-specific:
Supported runtimes are listed in the ADOT Lambda documentation β currently Node.js, Python, Java, .NET, and Go. For runtimes without OTel SDK support (Ruby, custom runtimes), use the CloudWatch Log Forwarder. For non-Lambda compute, see ADOT β ECS / EKS or the overview.
What is the ADOT Lambda Layer?
The ADOT Lambda Layer is an AWS Lambda Layer that wraps your function with an embedded OpenTelemetry Collector. It can export logs, metrics, and traces to an OTLP-compatible backend β including Bronto. The exact automatically generated signals depend on the runtime instrumentation included in the layer version.Bronto OTLP Endpoints
The
/v1/logs, /v1/metrics, and /v1/traces endpoints accept OTLP protobuf only. Metrics ingestion is in public beta.Setup
Step 1 β Add the ADOT Lambda Layer
Add the ADOT managed Lambda Layer to your function. Layer ARNs are region- and architecture-specific. Find the latest ARN for your runtime in the official ADOT Lambda Layer documentation. Via AWS CLI:Step 2 β Configure the collector to export to Bronto
Set theOPENTELEMETRY_COLLECTOR_CONFIG_URI environment variable to point to a collector config stored in S3 or SSM Parameter Store, or use inline configuration.
Minimal collector config:
Step 3 β Set environment variables on your Lambda function
Step 4 β Instrument your application code
Add the OTel SDK for your runtime and configure it to export to the local collector.localhost:4317 is the standard OTLP/gRPC default used by this example; use the actual receiver port and protocol if you customize the extension. For per-language setup instructions, see the OpenTelemetry SDK guides.
Data Organization
The Lambda Layer uses OpenTelemetry resource attributes for routing. Bronto mapsservice.name to a Dataset and service.namespace to a Collection β see Data Organization for how datasets, collections, and tags work.
Set these via Lambda environment variables β the OTel SDK reads them automatically:
You can also override routing in the collector config using HTTP headers on the exporter:
Cost Notes
- The ADOT Lambda Layer itself is free.
- Logs, metrics, and traces sent through the layer bypass CloudWatch entirely β no CloudWatch ingestion fees for those exported signals.
- Lambdaβs automatic
stdout/stderrcapture still writes to CloudWatch by default. To stop paying for that, route your application logger through the OTel SDK; to keep both paths, add the CloudWatch Log Forwarder alongside the layer.
For assistance, contact support@bronto.io.

