opentelemetry-dotnet is a free, open source monitoring & observability project written in C# and released under Apache-2.0. It has 3,767 GitHub stars, 913 forks and 143 open issues, and was last pushed 16 hours ago. On this registry it ranks #113 of 270 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available. It gained 6 stars over the last 30 tracked days.

What is opentelemetry-dotnet?

OpenTelemetry .NET is the official .NET implementation of the OpenTelemetry specification, providing a stable, Apache-2.0-licensed client for collecting logs, metrics, and traces, intended for .NET developers and operators who need unified observability across their applications.

What it is

The project is the .NET implementation of OpenTelemetry, maintained as an open-source repository under the Apache-2.0 licence. It delivers a set of packages that instrument .NET applications to produce telemetry data—logs, metrics, and traces—according to the OpenTelemetry specification. The repository declares stable status across all three signals, meaning the core APIs for logs, metrics, and traces are considered production-ready. It supports all officially supported versions of .NET and .NET Framework, with the sole exception of .NET Framework 3.5. The project lives in the .NET ecosystem and integrates with existing .NET logging abstractions such as ILogger and ILoggerProvider.

The concrete problem it solves is the fragmentation of observability instrumentation. Without a common standard, .NET applications often rely on separate, incompatible libraries for each telemetry signal or backend. OpenTelemetry .NET replaces that fragmentation with a single, spec-compliant implementation that can emit logs, metrics, and traces through one consistent API. It provides a spec compliance matrix to track which parts of the OpenTelemetry specification have been implemented, and it supports exporting data via the OTLP protocol. This lets teams instrument once and send telemetry to any compatible backend, rather than rewriting instrumentation for each tool.

Key capabilities

  • Implements the OpenTelemetry specification for .NET with stable support across Logs, Metrics, and Traces.
  • Supports all officially supported .NET versions and .NET Framework, except .NET Framework 3.5.
  • Integrates with ILogger and ILoggerProvider for logging, allowing existing .NET logging code to feed into OpenTelemetry.
  • Provides getting started guides, including "getting started in 5 minutes - ASP.NET Core Application" and "getting started in 5 minutes - Console Application".
  • Uses OTLP (OpenTelemetry Protocol) for exporting telemetry data.
  • Offers extensibility points and documentation for customizing the SDK for logs, metrics, and tracing.
  • Includes a spec compliance matrix that tracks implementation status against the OpenTelemetry specification.
  • Packages pre-release components, which are marked as work in progress and may undergo breaking changes before stable release.

Who uses it and how

  • ASP.NET Core teams instrument web applications for distributed tracing and metrics using the provided getting started guide.
  • Console application developers add logging and metrics telemetry with the console-focused guide.
  • Operations teams standardize observability across multiple .NET services by adopting a single SDK rather than per-service vendor agents.
  • Teams already using ILogger integrate OpenTelemetry without changing their existing logging calls.
  • Organizations that require vendor-neutral telemetry export use the OTLP protocol to send data to any compatible backend.

Getting started

Install the OpenTelemetry NuGet package and follow the getting started guides for logging, metrics, or tracing, such as the "getting started in 5 minutes - ASP.NET Core Application" guide. The homepage at https://opentelemetry.io provides further documentation.

How it compares

The facts name no similar tools in this registry. OpenTelemetry .NET stands alone as the .NET implementation of the OpenTelemetry specification.

When to use it — and when not to

Self-hosters must manage the OpenTelemetry SDK within their .NET applications, but the project itself requires no external database, storage, or SMTP service. Teams that cannot tolerate breaking changes should avoid components marked as pre-release, because those can change before reaching stable release. Projects not using .NET or .NET Framework (except .NET Framework 3.5) should not pick this client, as it targets those runtimes exclusively.

project readme (upstream, from github) — read inline

OpenTelemetry .NET

Slack codecov.io Nuget NuGet Build

OpenSSF Scorecard OpenSSF Best Practices FOSSA License Status FOSSA Security Status

The .NET OpenTelemetry implementation.

Table of Contents

Supported .NET versions

Packages shipped from this repository generally support all the officially supported versions of .NET and .NET Framework (an older Windows-based .NET implementation), except .NET Framework 3.5. Any exceptions to this are noted in the individual README.md files.

Project status

Stable across all 3 signals (Logs, Metrics, and Traces).

[!CAUTION] Certain components, marked as pre-release, are still work in progress and can undergo breaking changes before stable release. Check the individual README.md file for each component to understand its current state.

To understand which portions of the OpenTelemetry Specification have been implemented in OpenTelemetry .NET see: Spec Compliance Matrix.

Getting started

If you are new here, please read the getting started docs:

Getting started with Logging

If you are new to logging, it is recommended to first follow the getting started in 5 minutes - ASP.NET Core Application guide or the getting started in 5 minutes - Console Application guide to get up and running.

For general information and best practices see: OpenTelemetry .NET Logs. For a more detailed explanation of SDK logging features see: Customizing OpenTelemetry .NET SDK for Logs.

Getting started with Metrics

If you are new to metrics, it is recommended to first follow the getting started in 5 minutes - ASP.NET Core Application guide or the getting started in 5 minutes - Console Application guide to get up and running.

For general information and best practices see: OpenTelemetry .NET Metrics. For a more detailed explanation of SDK metric features see: Customizing OpenTelemetry .NET SDK for Metrics.

Getting started with Tracing

If you are new to traces, it is recommended to first follow the getting started in 5 minutes - ASP.NET Core Application guide or the getting started in 5 minutes - Console Application guide to get up and running.

For general information and best practices see: OpenTelemetry .NET Traces. For a more detailed explanation of SDK tracing features see: Customizing OpenTelemetry .NET SDK for Tracing.

Repository structure

This repository includes only what is defined in the OpenTelemetry Specification and is shipped as separate packages through NuGet. Each component has an individual README.md and CHANGELOG.md file which covers the instructions on how to install and get started, and details about the individual changes made (respectively). To find all the available components, please take a look at the src folder.

Here are the most commonly used components:

Here are the exporter libraries:

Additional packages including instrumentation libraries, exporters, resource detectors, and extensions can be found in the opentelemetry-dotnet-contrib repository and/or the OpenTelemetry registry.

Troubleshooting

For general instructions see: Troubleshooting. Additionally README.md files for individual components may contain more detailed troubleshooting information.

Extensibility

OpenTelemetry .NET is designed to be extensible. Here are the most common extension scenarios:

Releases

For details about upcoming planned releases see: Milestones. The dates and features described in issues and milestones are estimates and subject to change.

For highlights and announcements for stable releases see: Release Notes.

To access packages, source code, and/or view a list of changes for all components in a release see: Releases.

Nightly builds from this repo are published to MyGet, and can be installed using the https://www.myget.org/F/opentelemetry/api/v3/index.json source.

Digital signing

Starting with the 1.10.0 release the DLLs included in the packages pushed to NuGet are digitally signed using Sigstore. Within each NuGet package the digital signature artifacts are placed alongside the shipped DLL(s) in the /lib folder. When a project targets multiple frameworks each target outputs a dedicated DLL and signing artifacts into a sub folder based on the TFM.

The digital signature files share the same name prefix as the DLL to ensure easy identification and association.

To verify the integrity of a DLL inside a NuGet package use the cosign tool from Sigstore:

Version 1.14.0 and later

These versions are using bundle format known from cosign 3.0+.

TAG="core-1.16.0"
cosign verify-blob \
    --bundle OpenTelemetry.dll.sigstore.json \
    --certificate-identity "https://github.com/open-telemetry/opentelemetry-dotnet/.github/workflows/publish-packages-1.0.yml@refs/tags/$TAG" \
    --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
    --use-signed-timestamps \
    OpenTelemetry.dll

[!NOTE] A successful verification outputs Verified OK.

Versions 1.10.0 - 1.14.0-rc.1

These versions are using separate signature and certificate files format known from cosign 2.x.

TAG="core-1.12.0"
cosign verify-blob \
    --signature OpenTelemetry.dll-keyless.sig \
    --certificate OpenTelemetry.dll-keyless.pem \
    --certificate-identity "https://github.com/open-telemetry/opentelemetry-dotnet/.github/workflows/publish-packages-1.0.yml@refs/tags/$TAG" \
    --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
    OpenTelemetry.dll

[!NOTE] A successful verification outputs Verify OK.

For more verification options please refer to the cosign documentation.

Attestation

Starting with the 1.14.0 release the DLLs included in the packages pushed to NuGet are attested using GitHub Artifact attestations.

To verify the attestation of a DLL inside a NuGet package use the GitHub CLI:

gh attestation verify --owner open-telemetry .\OpenTelemetry.dll

[!NOTE] A successful verification outputs Verification succeeded!.

For more verification options please refer to the gh attestation verify documentation.

Contributing

For information about contributing to the project see: CONTRIBUTING.md.

We meet weekly on Tuesdays, and the time of the meeting alternates between 9AM PT and 4PM PT. The meeting is subject to change depending on contributors' availability. Check the OpenTelemetry community calendar for specific dates and for Zoom meeting links.

Meeting notes are available as a public Google doc. If you have trouble accessing the doc, please get in touch on the #otel-dotnet channel on CNCF Slack. If you are new to the CNCF Slack community, you can create an account.

The meeting is open for all to join. We invite everyone to join our meeting, regardless of your experience level. Whether you're a seasoned OpenTelemetry developer, just starting your journey, or simply curious about the work we do, you're more than welcome to participate!

Maintainers

For more information about the maintainer role, see the community repository.

Approvers

For more information about the approver role, see the community repository.

Triagers

For more information about the triager role, see the community repository.

Emeritus

For more information about the emeritus role, see the community repository.

Thanks to all the people who have contributed

contributors

References

Frequently asked questions

Is opentelemetry-dotnet free to use?

opentelemetry-dotnet is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does opentelemetry-dotnet do?

The OpenTelemetry .NET Client

What is opentelemetry-dotnet written in?

opentelemetry-dotnet is primarily written in C#. Its source is publicly available at https://github.com/open-telemetry/opentelemetry-dotnet, and it has 3,767 GitHub stars.