{"id":13526602,"url":"https://github.com/open-telemetry/opentelemetry-lambda","last_synced_at":"2026-04-02T18:20:55.964Z","repository":{"id":37499279,"uuid":"319459651","full_name":"open-telemetry/opentelemetry-lambda","owner":"open-telemetry","description":"Create your own Lambda Layer in each OTel language using this starter code. Add the Lambda Layer to your Lambda Function to get tracing with OpenTelemetry.","archived":false,"fork":false,"pushed_at":"2025-05-13T07:05:31.000Z","size":4406,"stargazers_count":316,"open_issues_count":61,"forks_count":202,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-05-15T00:11:56.411Z","etag":null,"topics":["aws-lambda","opentelemetry"],"latest_commit_sha":null,"homepage":"https://opentelemetry.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/open-telemetry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-12-07T22:23:09.000Z","updated_at":"2025-05-14T15:43:28.000Z","dependencies_parsed_at":"2023-09-28T03:19:18.794Z","dependency_job_id":"31a89de8-89ad-49ef-9bcf-97f1cb163b31","html_url":"https://github.com/open-telemetry/opentelemetry-lambda","commit_stats":{"total_commits":733,"total_committers":72,"mean_commits":"10.180555555555555","dds":0.5688949522510232,"last_synced_commit":"bf4a407dc14f9d2d21f51dfaa863d5fe54350a32"},"previous_names":["open-telemetry/opentelemetry-lambda-extension"],"tags_count":76,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-telemetry%2Fopentelemetry-lambda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-telemetry%2Fopentelemetry-lambda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-telemetry%2Fopentelemetry-lambda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-telemetry%2Fopentelemetry-lambda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/open-telemetry","download_url":"https://codeload.github.com/open-telemetry/opentelemetry-lambda/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270646,"owners_count":22042859,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-lambda","opentelemetry"],"created_at":"2024-08-01T06:01:32.033Z","updated_at":"2026-04-02T18:20:55.949Z","avatar_url":"https://github.com/open-telemetry.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# OpenTelemetry Lambda\n\n![GitHub Java Workflow Status](https://img.shields.io/github/actions/workflow/status/open-telemetry/opentelemetry-lambda/ci-java.yml?branch%3Amain\u0026label=CI%20%28Java%29\u0026style=for-the-badge)\n![GitHub Collector Workflow Status](https://img.shields.io/github/actions/workflow/status/open-telemetry/opentelemetry-lambda/ci-collector.yml?branch%3Amain\u0026label=CI%20%28Collector%29\u0026style=for-the-badge)\n![GitHub NodeJS Workflow Status](https://img.shields.io/github/actions/workflow/status/open-telemetry/opentelemetry-lambda/ci-nodejs.yml?branch%3Amain\u0026label=CI%20%28NodeJS%29\u0026style=for-the-badge)\n![GitHub Terraform Lint Workflow Status](https://img.shields.io/github/actions/workflow/status/open-telemetry/opentelemetry-lambda/ci-terraform.yml?branch%3Amain\u0026label=CI%20%28Terraform%20Lint%29\u0026style=for-the-badge)\n![GitHub Python Pull Request Workflow Status](https://img.shields.io/github/actions/workflow/status/open-telemetry/opentelemetry-lambda/ci-python.yml?branch%3Amain\u0026label=Pull%20Request%20%28Python%29\u0026style=for-the-badge)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/open-telemetry/opentelemetry-lambda/badge?style=for-the-badge)](https://scorecard.dev/viewer/?uri=github.com/open-telemetry/opentelemetry-lambda)\n\n## OpenTelemetry Lambda Layers\n\nThe OpenTelemetry Lambda Layers provide the OpenTelemetry (OTel) code to export telemetry asynchronously from AWS Lambda functions. It does this by embedding a stripped-down version of [OpenTelemetry Collector Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib) inside an [AWS Lambda Extension Layer](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-extensions-in-preview/). This allows Lambda functions to use OpenTelemetry to send traces and metrics to any configured backend.\n\nThere are 2 types of lambda layers\n1. Collector Layer - Embeds a stripped down version of the OpenTelemetry Collector\n2. Language Specific Layer - Includes language specific nuances to allow lambda functions to automatically consume context from upstream callers, create spans, and automatically instrument the AWS SDK\n\nThese 2 layers are meant to be used in conjunction to instrument your lambda functions. The reason that the collector is not embedded in specific language layers is to give users flexibility\n\n## Collector Layer\n* ### [Collector Lambda Layer](collector/README.md)\n\n## Extension Layer Language Support\n* ### [Python Lambda Layer](python/README.md)\n* ### [Java Lambda Layer](java/README.md)\n* ### [NodeJS Lambda Layer](nodejs/README.md)\n* ### [Ruby Lambda Layer](ruby/README.md)\n\n## Additional language tooling not currently supported\n* ### [Go Lambda Library](go/README.md)\n* ### [.NET Lambda Layer](dotnet/README.md)\n\n## Latest Layer Versions\n| Name         | ARN                                                                                                                    | Version |\n|--------------|:-----------------------------------------------------------------------------------------------------------------------|:--------|\n| collector    | `arn:aws:lambda:\u003cregion\u003e:184161586896:layer:opentelemetry-collector-\u003camd64\\|arm64\u003e-\u003cversion\u003e:1` | ![Collector](https://api.globadge.com/v1/badgen/http/jq/e3309d56-dfd6-4dae-ac00-4498070d84f0) |\n| nodejs       | `arn:aws:lambda:\u003cregion\u003e:184161586896:layer:opentelemetry-nodejs-\u003cversion\u003e:1` | ![NodeJS](https://api.globadge.com/v1/badgen/http/jq/91b0f102-25fc-425f-8de9-f05491b9f757) |\n| python       | `arn:aws:lambda:\u003cregion\u003e:184161586896:layer:opentelemetry-python-\u003cversion\u003e:1` | ![Python](https://api.globadge.com/v1/badgen/http/jq/ab030ce1-ee7d-4c14-b643-eb20ec050e0b) |\n| java-agent   | `arn:aws:lambda:\u003cregion\u003e:184161586896:layer:opentelemetry-javaagent-\u003cversion\u003e:1` | ![Java Agent](https://api.globadge.com/v1/badgen/http/jq/301ad852-ccb4-4bb4-997e-60282ad11f71) |\n| java-wrapper | `arn:aws:lambda:\u003cregion\u003e:184161586896:layer:opentelemetry-javawrapper-\u003cversion\u003e:1` | ![Java Wrapper](https://api.globadge.com/v1/badgen/http/jq/e10281c6-3d0e-42e4-990b-7a725301bef4) |\n| ruby         | `arn:aws:lambda:\u003cregion\u003e:184161586896:layer:opentelemetry-ruby-dev-\u003cversion\u003e:1` | ![Ruby](https://api.globadge.com/v1/badgen/http/jq/4d9b9e93-7d6b-4dcf-836e-1878de566fdb) |\n\n## FAQ\n\n* **What exporters/receivers/processors are included from the OpenTelemetry Collector?**\n    \u003e You can check out [the stripped-down collector's imports](https://github.com/open-telemetry/opentelemetry-lambda/blob/main/collector/lambdacomponents/default.go) in this repository for a full list of currently included components.\n\n    \u003e Self-built binaries of the collector have **experimental** support for a custom set of connectors/exporters/receivers/processors. For more information, see [(Experimental) Customized collector build](./collector/README.md#experimental-customized-collector-build)\n* **Is the Lambda layer provided or do I need to build it and distribute it myself?**\n    \u003e This repository provides pre-built Lambda layers, their ARNs are available in the [Releases](https://github.com/open-telemetry/opentelemetry-lambda/releases). You can also build the layers manually and publish them in your AWS account. This repo has files to facilitate doing that. More information is provided in [the Collector folder's README](collector/README.md).\n\n## Design Proposal\n\nTo get a better understanding of the proposed design for the OpenTelemetry Lambda extension, you can see the [Design Proposal here.](docs/design_proposal.md)\n\n## Features\n\nThe following is a list of features provided by the OpenTelemetry layers.\n\n### OpenTelemetry collector\n\nThe layer includes the OpenTelemetry Collector as a Lambda extension.\n\n### Custom context propagation carrier extraction\n\nContext can be propagated through various mechanisms (e.g. http headers (APIGW), message attributes (SQS), ...). In some cases, it may be required to pass a custom context propagation extractor in Lambda through configuration, this feature allows this through Lambda instrumentation configuration.\n\n### X-Ray Env Var Span Link\n\nThis links a context extracted from the Lambda runtime environment to the instrumentation-generated span rather than disabling that context extraction entirely.\n\n### Semantic conventions\n\nThe Lambda language implementation follows the semantic conventions specified in the OpenTelemetry Specification.\n\n### Auto instrumentation\n\nThe Lambda layer includes support for automatically instrumentation code via the use of instrumentation libraries.\n\n### Flush TracerProvider\n\nThe Lambda instrumentation will flush the `TracerProvider` at the end of an invocation.\n\n### Flush MeterProvider\n\nThe Lambda instrumentation will flush the `MeterProvider` at the end of an invocation.\n\n### Support matrix\n\nThe table below captures the state of various features and their levels of support different runtimes.\n\n| Feature                    | Node | Python | Java | .NET | Go   | Ruby |\n| -------------------------- | :--: | :----: | :--: | :--: | :--: | :--: |\n| OpenTelemetry collector    |  +   |  +     |  +   |  +   |  +   |  +   |\n| Custom context propagation |  +   |  -     |  -   |  -   | N/A  |  +   |\n| X-Ray Env Var Span Link    |  -   |  -     |  -   |  -   | N/A  |  -   |\n| Semantic Conventions^      |      |  +     |  +   |  +   | N/A  |  +   |\n| - Trace General^\u003csup\u003e[1]\u003c/sup\u003e           |  +   |        |  +   |  +   | N/A  |   +  |\n| - Trace Incoming^\u003csup\u003e[2]\u003c/sup\u003e          |  -   |        |  -   |  +   | N/A  |   -  |\n| - Trace Outgoing^\u003csup\u003e[3]\u003c/sup\u003e          |  +   |        |  -   |  +   | N/A  |   +  |\n| - Metrics^\u003csup\u003e[4]\u003c/sup\u003e                 |  -   |        |  -   |  -   | N/A  |   -  |\n| Auto instrumentation       |  +   |   +    |  +   |  -   | N/A  |   +  |\n| Flush TracerProvider       |  +   |   +    |      |  +   |  +   |   +  |\n| Flush MeterProvider        |  +   |   +    |      |      |      |   -  |\n\n#### Legend\n\n* `+` is supported\n* `-` not supported\n* `^` subject to change depending on spec updates\n* `N/A` not applicable to the particular language\n* blank cell means the status of the feature is not known.\n\nThe following are runtimes which are no longer or not yet supported by this repository:\n\n* Node.js 12, Node.js 16 - not [officially supported](https://github.com/open-telemetry/opentelemetry-js#supported-runtimes) by OpenTelemetry JS\n\n[1]: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-spans.md#general-attributes\n[2]: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-spans.md#incoming-invocations\n[3]: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-spans.md#outgoing-invocations\n[4]: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-metrics.md\n\n## Contributing\n\nSee the [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Maintainers\n\n- [Serkan Özal](https://github.com/serkan-ozal), Catchpoint\n- [Tyler Benson](https://github.com/tylerbenson), ServiceNow\n- [Warre Pessers](https://github.com/wpessers)\n\nFor more information about the maintainer role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#maintainer).\n\n### Approvers\n\n- [Ivan Santos](https://github.com/pragmaticivan)\n- [Lukas Hering](https://github.com/herin049)\n- [Maxime David](https://github.com/maxday)\n- [Raphael Manke](https://github.com/raphaelmanke)\n\nFor more information about the approver role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#approver).\n\n### Emeritus Maintainers\n\n- [Alex Boten](https://github.com/codeboten)\n- [Anthony Mirabella](https://github.com/Aneurysm9)\n- [Raphael Philipe Mendes da Silva](https://github.com/rapphil)\n\nFor more information about the emeritus role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#emeritus-maintainerapprovertriager).\n\n### Emeritus Approvers\n\n- [Lei Wang](https://github.com/wangzlei)\n- [Nathaniel Ruiz Nowell](https://github.com/NathanielRN)\n- [Tristan Sloughter](https://github.com/tsloughter)\n\nFor more information about the emeritus role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#emeritus-maintainerapprovertriager).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-telemetry%2Fopentelemetry-lambda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-telemetry%2Fopentelemetry-lambda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-telemetry%2Fopentelemetry-lambda/lists"}