OpenTelemetry 1.14.0-rc.1

OpenTelemetry .NET SDK

NuGet NuGet

Table of Contents

Installation

dotnet add package OpenTelemetry

Introduction

OpenTelemetry SDK is a reference implementation of the OpenTelemetry API. It implements the Logging API, Metrics API, Tracing API, Resource API, and the Context API. Once a valid SDK is installed and configured all the OpenTelemetry API methods, which were no-ops without an SDK, will start emitting telemetry. This SDK also ships with ILogger integration to automatically capture and enrich logs emitted using Microsoft.Extensions.Logging.

The SDK deals with concerns such as sampling, processing pipelines (exporting telemetry to a particular backend, etc.), metrics aggregation, and other concerns outlined in the OpenTelemetry Specification. In most cases, users indirectly install and enable the SDK when they install an exporter.

To learn how to set up and configure the OpenTelemetry SDK see: Getting started. For additional details about initialization patterns see: Initialize the SDK.

Troubleshooting

All the components shipped from this repo uses EventSource for its internal logging. The name of the EventSource used by OpenTelemetry SDK is "OpenTelemetry-Sdk". To know the EventSource names used by other components, refer to the individual readme files.

While it is possible to view these logs using tools such as PerfView, dotnet-trace etc., this SDK also ships a self-diagnostics feature, which helps with troubleshooting.

Self-diagnostics

OpenTelemetry SDK ships with built-in self-diagnostics feature. This feature, when enabled, will listen to internal logs generated by all OpenTelemetry components (i.e EventSources whose name starts with "OpenTelemetry-") and writes them to a log file.

The self-diagnostics feature can be enabled/changed/disabled while the process is running (without restarting the process). The SDK will attempt to read the configuration file every 10 seconds in non-exclusive read-only mode. The SDK will create or overwrite a file with new logs according to the configuration. This file will not exceed the configured max size and will be overwritten in a circular way.

To enable self-diagnostics, go to the current working directory of your process and create a configuration file named OTEL_DIAGNOSTICS.json with the following content:

{
    "LogDirectory": ".",
    "FileSize": 32768,
    "LogLevel": "Warning",
    "FormatMessage": "true"
}

To disable self-diagnostics, delete the above file.

Tip: In most cases, you could just drop the file along your application. On Windows, you can use Process Explorer, double click on the process to pop up Properties dialog and find "Current directory" in "Image" tab. Internally, it looks for the configuration file located in GetCurrentDirectory, and then AppContext.BaseDirectory. You can also find the exact directory by calling these methods from your code.

Configuration Parameters

  1. LogDirectory is the directory where the output log file will be stored. It can be an absolute path or a relative path to the current directory.

  2. FileSize is a positive integer, which specifies the log file size in KiB. This value must be within range [1024, 131072] (1 MiB /<= size /<= 128 MiB), or it will be rounded to the closest upper or lower limit. The log file will never exceed this configured size, and will be overwritten in a circular way.

  3. LogLevel is the lowest level of the events to be captured. It has to be one of the values of the EventLevel enum. The level signifies the severity of an event. Lower severity levels encompass higher severity levels. For example, Warning includes the Error and Critical levels.

  4. FormatMessage is a boolean value that controls whether log messages should be formatted by replacing placeholders ({0}, {1}, etc.) with their actual parameter values. When set to false (default), messages are logged with unformatted placeholders followed by raw parameter values. When set to true, placeholders are replaced with formatted parameter values for improved readability.

    Example with FormatMessage: false (default):

    2025-07-24T01:45:04.1020880Z:Measurements from Instrument '{0}', Meter '{1}' will be ignored. Reason: '{2}'. Suggested action: '{3}'{dotnet.gc.collections}{System.Runtime}{Instrument belongs to a Meter not subscribed by the provider.}{Use AddMeter to add the Meter to the provider.}
    

    Example with FormatMessage: true:

    2025-07-24T01:44:44.7059260Z:Measurements from Instrument 'dotnet.gc.collections', Meter 'System.Runtime' will be ignored. Reason: 'Instrument belongs to a Meter not subscribed by the provider.'. Suggested action: 'Use AddMeter to add the Meter to the provider.'
    

Remarks

A FileSize-KiB log file named as ExecutableName.ProcessId.log (e.g. foobar.exe.12345.log) will be generated at the specified directory LogDirectory, into which logs are written to.

If the SDK fails to parse the LogDirectory, FileSize or LogLevel fields as the specified format, the configuration file will be treated as invalid and no log file would be generated.

When the LogDirectory or FileSize is found to be changed, the SDK will create or overwrite a file with new logs according to the new configuration. The configuration file has to be no more than 4 KiB. In case the file is larger than 4 KiB, only the first 4 KiB of content will be read.

The log file might not be a proper text file format to achieve the goal of having minimal overhead and bounded resource usage: it may have trailing NULs if log text is less than configured size; once write operation reaches the end, it will start from beginning and overwrite existing text.

References

Showing the top 20 packages that depend on OpenTelemetry.

Packages Downloads
MongoDB.Driver.Core.Extensions.OpenTelemetry
Package Description
130
OpenTelemetry.Extensions.Hosting
Startup extensions to register OpenTelemetry into the applications using Microsoft.Extensions.DependencyInjection and Microsoft.Extensions.Hosting
107
OpenTelemetry.Instrumentation.AspNetCore
ASP.NET Core instrumentation for OpenTelemetry .NET
107
OpenTelemetry.Instrumentation.Http
Http instrumentation for OpenTelemetry .NET
88
OpenTelemetry.Contrib.Instrumentation.MassTransit
OpenTelemetry instrumentation for MassTransit
78
OpenTelemetry.Exporter.Jaeger
Jaeger exporter for OpenTelemetry .NET
75
OpenTelemetry.Extensions.Hosting
Startup extensions to register OpenTelemetry into the applications using Microsoft.Extensions.DependencyInjection and Microsoft.Extensions.Hosting
59
OpenTelemetry.Instrumentation.AspNetCore
ASP.NET Core instrumentation for OpenTelemetry .NET
50
OpenTelemetry.Instrumentation.Http
Http instrumentation for OpenTelemetry .NET
44
OpenTelemetry.Exporter.Jaeger
Jaeger exporter for OpenTelemetry .NET
44
OpenTelemetry.Exporter.Jaeger
Jaeger exporter for OpenTelemetry .NET
38
OpenTelemetry.Exporter.Jaeger
Jaeger exporter for OpenTelemetry .NET
37
MongoDB.Driver.Core.Extensions.OpenTelemetry
Package Description
26
OpenTelemetry.Extensions.Hosting
Startup extensions to register OpenTelemetry into the applications using Microsoft.Extensions.DependencyInjection and Microsoft.Extensions.Hosting
25
MongoDB.Driver.Core.Extensions.OpenTelemetry
Package Description
25
OpenTelemetry.Extensions.Hosting
Contains extensions to start OpenTelemetry in applications using Microsoft.Extensions.Hosting
24
OpenTelemetry.Extensions.Hosting
Contains extensions to register and start OpenTelemetry in applications using Microsoft.Extensions.Hosting
24
MongoDB.Driver.Core.Extensions.OpenTelemetry
Package Description
24
OpenTelemetry.Instrumentation.Http
Http instrumentation for OpenTelemetry .NET
24

For highlights and announcements see: https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.14.0-rc.1/RELEASENOTES.md. For detailed changes see: https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.14.0-rc.1/src/OpenTelemetry/CHANGELOG.md.

Version Downloads Last updated
1.14.0-rc.1 4 10/22/2025
1.13.1 4 10/13/2025
1.13.0 4 10/02/2025
1.12.0 12 05/03/2025
1.11.2 17 03/06/2025
1.11.1 13 01/28/2025
1.11.0 19 01/18/2025
1.11.0-rc.1 19 01/18/2025
1.10.0 18 11/21/2024
1.10.0-rc.1 20 11/21/2024
1.10.0-beta.1 20 10/09/2024
1.9.0 24 09/23/2024
1.9.0-rc.1 18 10/09/2024
1.9.0-alpha.1 16 10/09/2024
1.8.1 21 10/09/2024
1.8.0 20 10/09/2024
1.8.0-rc.1 14 10/09/2024
1.8.0-beta.1 22 06/22/2024
1.7.0 21 10/09/2024
1.7.0-rc.1 17 03/20/2024
1.7.0-alpha.1 15 10/09/2024
1.6.0 21 10/09/2024
1.6.0-rc.1 15 10/09/2024
1.6.0-alpha.1 19 10/09/2024
1.5.1 20 10/06/2024
1.5.0 23 10/09/2024
1.5.0-rc.1 18 10/09/2024
1.5.0-alpha.2 19 10/09/2024
1.5.0-alpha.1 18 10/09/2024
1.4.0 19 10/09/2024
1.4.0-rc.4 18 10/09/2024
1.4.0-rc.3 18 10/09/2024
1.4.0-rc.2 20 10/09/2024
1.4.0-rc.1 18 10/09/2024
1.4.0-beta.3 17 12/02/2022
1.4.0-beta.2 15 10/09/2024
1.4.0-beta.1 22 10/09/2024
1.4.0-alpha.2 19 10/09/2024
1.4.0-alpha.1 18 10/09/2024
1.3.2 20 10/09/2024
1.3.1 39 12/02/2022
1.3.0 22 10/09/2024
1.3.0-rc.2 19 10/09/2024
1.3.0-beta.2 19 10/09/2024
1.3.0-beta.1 17 10/09/2024
1.2.0 20 10/09/2024
1.2.0-rc5 18 10/09/2024
1.2.0-rc4 19 10/09/2024
1.2.0-rc3 21 10/09/2024
1.2.0-rc2 17 10/09/2024
1.2.0-rc1 34 02/05/2022
1.2.0-beta2.1 20 10/09/2024
1.2.0-beta1 30 12/15/2021
1.2.0-alpha4 19 10/09/2024
1.2.0-alpha3 20 10/09/2024
1.2.0-alpha2 19 10/09/2024
1.2.0-alpha1 19 10/09/2024
1.1.0 92 12/07/2021
1.1.0-rc1 18 10/09/2024
1.1.0-beta4 18 10/09/2024
1.1.0-beta3 16 10/09/2024
1.1.0-beta2 20 10/09/2024
1.1.0-beta1 17 10/09/2024
1.0.1 26 12/09/2022
1.0.0-rc4 17 10/09/2024
1.0.0-rc3 19 10/09/2024
1.0.0-rc2 19 10/08/2024
1.0.0-rc1.1 18 10/09/2024
0.8.0-beta.1 15 10/09/2024
0.7.0-beta.1 17 10/09/2024
0.6.0-beta.1 16 10/09/2024
0.5.0-beta.2 18 10/09/2024
0.4.0-beta.2 21 10/06/2024
0.3.0-beta.1 18 10/09/2024
0.2.0-alpha.275 19 10/09/2024
0.2.0-alpha.220 19 10/09/2024
0.2.0-alpha.179 18 10/09/2024
0.2.0-alpha.100 19 10/09/2024
0.2.0-alpha.40 16 10/09/2024
0.2.0-alpha.5 18 10/09/2024