AWS Open Distro for OpenTelemetry
AWS Distro for OpenTelemetry Lambda
AWS Distro for OpenTelemetry Lambda
The AWS Distro for OpenTelemetry now supports AWS Distro for OpenTelemetry Lambda layer. ADOT Lambda layers provides a plug-and-play user experience by automatically instrumenting a Lambda function, by packaging OpenTelemetry together with an out-of-the-box configuration for AWS Lambda and AWS X-Ray in an easy to setup layer. Users can enable and disable OpenTelemetry for their Lambda function without changing code.
Getting Started with AWS Lambda layers
- AWS managed Lambda layer for ADOT Java SDK and ADOT Collector
- AWS managed Lambda Layer for ADOT Java Auto-instrumentation Agent and ADOT Collector
- AWS managed Lambda Layer for ADOT JavaScript SDK and ADOT Collector
- AWS managed Lambda Layer for ADOT Python SDK and ADOT Collector
- AWS managed Lambda Layer for ADOT Collector and ADOT Lambda .NET SDK (Manual Instrumentation)
- AWS managed Lambda Layer for ADOT Collector and ADOT Lambda Go SDK (Manual Instrumentation)
Manual Steps for Private Lambda Layers
See the documentation on the OpenTelemetry Lambda repository.
Custom configuration for the ADOT Collector on Lambda
The ADOT Lambda layers combines both OpenTelemetry and the ADOT Collector. The configuration of the ADOT Collector follows the OpenTelemetry standard. By default, the ADOT Lambda layer uses config.yaml, which exports telemetry data to AWS X-Ray.
Please find the list of available components supported for custom configuration here. To enable debugging, you can use the configuration file to set log level to debug. See the example below.
To customize the collector configuration, add a configuration yaml file to your function code.
Once the file has been deployed with a Lambda function, create an environment variable on your Lambda
function OPENTELEMETRY_COLLECTOR_CONFIG_FILE
and set it to /var/task/*<path/<to>/<filename>*
.
This will tell the extension where to find the collector configuration.
Here is a sample configuration file, collector.yaml in the root directory:
#collector.yaml in the root directory#Set an environemnt variable 'OPENTELEMETRY_COLLECTOR_CONFIG_FILE' to '/var/task/collector.yaml'
receivers: otlp: protocols: grpc: http:
exporters: logging: loglevel: debug awsxray:
#enables output for traces to xrayservice: pipelines: traces: receivers: [otlp] exporters: [logging, awsxray]
You can set this via the Lambda console, or via the AWS CLI.
aws lambda update-function-configuration --function-name Function --environment Variables={OPENTELEMETRY_COLLECTOR_CONFIG_FILE=/var/task/collector.yaml}
As an alternative to uploading your collector.yaml file directly with your code, you can zip your file and upload your zip as a separate Lambda layer. You can set this via the Lambda console, or via the AWS CLI.
aws lambda update-function-configuration --function-name Function --environment Variables={OPENTELEMETRY_COLLECTOR_CONFIG_FILE=/opt/collector.yaml}
You can configure environment variables via CloudFormation template as well:
Function: Type: AWS::Serverless::Function Properties: ... Environment: Variables: OPENTELEMETRY_COLLECTOR_CONFIG_FILE: /var/task/collector.yaml
For more information about ADOT Collector configuration, such as adding ca/cert/key files, see the Github README.md.
Here is a blogpost which provides more context about the setup with an example for adding the AWS Distro for OpenTelemetry Lambda layer to the Lambda function.