OpenTelemetry .NET instrumentation compatibility and requirements

This is what you need to instrument .NET applications for Splunk Observability Cloud.

Meet the following requirements to instrument .NET applications for Splunk Observability Cloud:

Ensure you are using supported .NET versions

The Splunk Distribution of OpenTelemetry .NET supports the following .NET versions:

  • Instrumentation for traces and metrics:

    • .NET 9.0 (End of Support: May 12, 2026)

    • .NET 8.0 (End of Support: November 10, 2026)

    • .NET Framework 4.7 and higher

    • .NET Framework 4.6.2 (End of Support: January 12, 2027)

  • AlwaysOn Profiling:

    • .NET 9.0 (End of Support: May 12, 2026)

    • .NET 8.0 (End of Support: November 10, 2026)

      Note: .NET Framework is not supported for AlwaysOn Profiling.
CAUTION: The Splunk Distribution of OpenTelemetry .NET version 1.9.0 is not compatible with .NET 6 or .NET 7 since both have reached End of Life. If you want to continue instrumenting .NET 6 or .NET 7 services use the Splunk Distribution of OpenTelemetry .NET version 1.8.0 or lower. Best effort support for Splunk Distribution of OpenTelemetry .NET is provided up to November 12, 2025 only for the last versions of .NET 6 (version 6.0.36) and .NET 7 (version 7.0.20).

The distribution supports the following architectures:

  • x86

  • AMD64 (x86-64)

Note: ARM architectures are not supported.

Dependencies

DependencyLink to sourceVersionStability
OpenTelemetry .NEThttps://github.com/open-telemetry/opentelemetry-dotnet1.9.0Stable
OpenTelemetry .NET Automatic Instrumentationhttps://github.com/open-telemetry/opentelemetry-dotnet-instrumentation1.9.0Stable

Supported libraries

The Splunk Distribution of OpenTelemetry .NET instruments the following libraries:

IdentifierComponentsDescriptionStabilitySupportDependenciesSignalsSettings
ASPNETDetailsMVC / WebApi (Only integrated pipeline mode supported). Metrics requires trace instrumentation.BetaCommunityDetailsDetailsDetails
ASPNETCOREDetailsMetrics automatically activates Microsoft.AspNetCore.Hosting.HttpRequestIn spans.BetaCommunityDetailsDetailsDetails
AZUREDetailsBetaThird-party   
ELASTICSEARCHDetailsVersions 8.10.0 and higher are supported by Elastic.Transport instrumentation.BetaThird-party   
ELASTICTRANSPORTDetails BetaThird-party   
ENTITYFRAMEWORKCOREDetailsNot supported on .NET FrameworkBetaCommunityDetails Details
GRAPHQLDetailsNot supported on .NET FrameworkBetaThird-party  Details
GRPCNETCLIENTDetails BetaCommunityDetails Details
HTTPCLIENTDetails BetaCommunityDetailsDetailsDetails
KAFKADetails BetaCommunity   
MASSTRANSITDetailsNot supported on .NET FrameworkBetaThird-party   
MONGODBDetailsNot supported on .NET FrameworkBetaThird-party   
MYSQLCONNECTORDetails BetaThird-party   
MYSQLDATADetailsNot supported on .NET FrameworkBetaThird-party   
NPGSQLDetails BetaThird-party   
ORACLEMDADetailsNot supported on ARM64BetaThird-party  Details
NSERVICEBUSDetails BetaThird-party Details 
QUARTZDetailsNot supported on .NET Framework 4.7.1 and lowerBetaCommunityDetails  
RABBITMQDetails BetaCommunity   
SQLCLIENTDetails BetaCommunityDetails Details
STACKEXCHANGEREDISDetailsNot supported on .NET FrameworkBetaCommunityDetails  
WCFCLIENT, WCFSERVICEDetailsService side not supported on .NET. WCFCLIENT for client side instrumentation and WCFSERVICE for service side instrumentationBetaCommunityDetails  
NETRUNTIMEDetails BetaCommunityDetailsDetails 
PROCESSDetails BetaCommunityDetailsDetails 
ILOGGERDetailsNot supported on .NET FrameworkBetaCommunity   

ASPNET components

NameSupported versions
ASP.NET Framework (.NET Framework)See general requirements

ASPNET dependencies

NameSourcePackage URLVersionStability
ASP.NET Instrumentation for OpenTelemetryExternal LinkExternal Link1.9.0-beta.1Beta
ASP.NET Telemetry HttpModule for OpenTelemetryExternal LinkExternal Link1.9.0-beta.1Beta

ASPNET signals

Metric nameTypeDescription
http.server.request.durationhistogramMeasures the duration of inbound HTTP requests.

ASPNET settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_TRACES_ASPNET_INSTRUMENTATION_CAPTURE_REQUEST_HEADERSA comma-separated list of HTTP header names. ASP.NET instrumentations will capture HTTP request header values for all configured header names.StringInstrumentation 
OTEL_DOTNET_AUTO_TRACES_ASPNET_INSTRUMENTATION_CAPTURE_RESPONSE_HEADERSA comma-separated list of HTTP header names. ASP.NET instrumentations will capture HTTP response header values for all configured header names. Not supported on IIS Classic mode.StringInstrumentation 
OTEL_DOTNET_EXPERIMENTAL_ASPNET_DISABLE_URL_QUERY_REDACTIONWhether the ASP.NET instrumentation turns off redaction of the url.query attribute value.FalseBooleanInstrumentation

ASPNETCORE Components

NameSupported versions
ASP.NET CoreSee general requirements

ASPNETCORE dependencies

NameSourcePackage URLVersionStability
ASP.NET Core Instrumentation for OpenTelemetry .NETExternal LinkExternal Link1.9.0Beta

ASPNETCORE signals

Metric nameTypeDescription
http.server.request.durationhistogramDuration of the inbound HTTP request.
http.server.active_requestsupdowncounterNumber of active HTTP server requests. Supported only on .NET8+
kestrel.active_connectionsupdowncounterNumber of connections that are currently active on the server. Supported only on .NET8+
kestrel.connection.durationhistogramThe duration of connections on the server. Supported only on .NET8+
kestrel.rejected_connectionscounterNumber of connections rejected by the server. Connections are rejected when the currently active count exceeds the value configured with MaxConcurrentConnections. Supported only on .NET8+
kestrel.queued_connectionsupdowncounterNumber of connections that are currently queued and are waiting to start. Supported only on .NET8+
kestrel.queued_requestsupdowncounterNumber of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start. Supported only on .NET8+
kestrel.upgraded_connectionsupdowncounterNumber of HTTP connections that are currently upgraded (WebSockets). The number only tracks HTTP/1.1 connections. Supported only on .NET8+
kestrel.tls_handshake.durationhistogramThe duration of TLS handshakes on the server. Supported only on .NET8+
kestrel.active_tls_handshakesupdowncounterNumber of TLS handshakes that are currently in progress on the server. Supported only on .NET8+
signalr.server.connection.durationhistogramThe duration of connections on the server. Supported only on .NET8+
signalr.server.active_connectionsupdowncounterNumber of connections that are currently active on the server. Supported only on .NET8+
aspnetcore.routing.match_attemptscounterNumber of requests that were attempted to be matched to an endpoint. Supported only on .NET8+
aspnetcore.diagnostics.exceptionscounterNumber of exceptions caught by exception handling middleware. Supported only on .NET8+
aspnetcore.rate_limiting.active_request_leasesupdowncounterNumber of HTTP requests that are currently active on the server that hold a rate limiting lease. Supported only on .NET8+
aspnetcore.rate_limiting.request_lease.durationhistogramThe duration of rate limiting leases held by HTTP requests on the server. Supported only on .NET8+
aspnetcore.rate_limiting.queued_requestsupdowncounterNumber of HTTP requests that are currently queued, waiting to acquire a rate limiting lease. Supported only on .NET8+
aspnetcore.rate_limiting.request.time_in_queuehistogramThe duration of HTTP requests in a queue, waiting to acquire a rate limiting lease. Supported only on .NET8+
aspnetcore.rate_limiting.requestscounterNumber of requests that tried to acquire a rate limiting lease. Requests could be rejected by global or endpoint rate limiting policies. Or the request could be canceled while waiting for the lease. Supported only on .NET8+

ASPNETCORE settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_TRACES_ASPNETCORE_INSTRUMENTATION_CAPTURE_REQUEST_HEADERSA comma-separated list of HTTP header names. ASP.NET Core instrumentations will capture HTTP request header values for all configured header names.StringInstrumentation 
OTEL_DOTNET_AUTO_TRACES_ASPNETCORE_INSTRUMENTATION_CAPTURE_RESPONSE_HEADERSA comma-separated list of HTTP header names. ASP.NET Core instrumentations will capture HTTP response header values for all configured header names.StringInstrumentation 
OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTIONWhether the ASP.NET Core instrumentation turns off redaction of the url.query attribute value.FalseBooleanInstrumentation

AZURE components

NameSupported versions
Azure SDKAzure. prefixed packages, released after October 1, 2021

ELASTICSEARCH components

NameSupported versions
Elastic.Clients.Elasticsearch8.0.0 to 8.9.3

ELASTICTRANSPORT components

NameSupported versions
Elastic.Transport0.4.16 and higher

ENTITYFRAMEWORKCORE components

NameSupported versions
Microsoft.EntityFrameworkCore6.0.12 and higher

ENTITYFRAMEWORKCORE dependencies

NameSourcePackage URLVersionStability
EntityFrameworkCore Instrumentation for OpenTelemetry .NETExternal LinkExternal Link1.0.0-beta.12Beta

ENTITYFRAMEWORKCORE settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_ENTITYFRAMEWORKCORE_SET_DBSTATEMENT_FOR_TEXTWhether the Entity Framework Core instrumentation can pass SQL statements through the db.statement attribute. Queries might contain sensitive information. If set to false, db.statement is recorded only for executing stored procedures.FalseBooleanInstrumentation

GRAPHQL components

NameSupported versions
GraphQL7.5.0 and higher

GRAPHQL settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_GRAPHQL_SET_DOCUMENTWhether the GraphQL instrumentation can pass raw queries through the graphql.document attribute. Queries might contain sensitive information.FalseBooleanInstrumentation

GRPCNETCLIENT components

NameSupported versions
Grpc.Net.Client2.52.0 to 3.0.0

GRPCNETCLIENT dependencies

NameSourcePackage URLVersionStability
Grpc.Net.Client Instrumentation for OpenTelemetryExternal LinkExternal Link1.9.0-beta.1Beta

GRPCNETCLIENT settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_TRACES_GRPCNETCLIENT_INSTRUMENTATION_CAPTURE_REQUEST_METADATAA comma-separated list of gRPC metadata names. Grpc.Net.Client instrumentations will capture gRPC request metadata values for all configured metadata names.StringInstrumentation 
OTEL_DOTNET_AUTO_TRACES_GRPCNETCLIENT_INSTRUMENTATION_CAPTURE_RESPONSE_METADATAA comma-separated list of gRPC metadata names. Grpc.Net.Client instrumentations will capture gRPC response metadata values for all configured metadata names.StringInstrumentation 

HTTPCLIENT components

NameSupported versions
System.Net.Http.HttpClientSee general requirements.
System.Net.HttpWebRequestSee general requirements.

HTTPCLIENT Dependencies

NameSourcePackage URLVersionStability
HttpClient and HttpWebRequest instrumentation for OpenTelemetryExternal LinkExternal Link1.9.0Beta

HTTPCLIENT signals

Metric nameTypeDescription
http.client.request.durationhistogramDuration of HTTP client requests.
http.client.active_requestsupdowncounterNumber of outbound HTTP requests that are currently active on the client. Supported only on .NET8+
http.client.open_connectionsupdowncounterNumber of outbound HTTP connections that are currently active or idle on the client. Supported only on .NET8+
http.client.connection.durationhistogramThe duration of successfully established outbound HTTP connections. Supported only on .NET8+
http.client.request.time_in_queuehistogramThe amount of time requests spent on a queue waiting for an available connection. Supported only on .NET8+
dns.lookup.durationhistogramMeasures the time taken to perform a DNS lookup. Supported only on .NET8+

HTTPCLIENT settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_TRACES_HTTP_INSTRUMENTATION_CAPTURE_REQUEST_HEADERSA comma-separated list of HTTP header names. HTTP Client instrumentations will capture HTTP request header values for all configured header names.StringInstrumentation 
OTEL_DOTNET_AUTO_TRACES_HTTP_INSTRUMENTATION_CAPTURE_RESPONSE_HEADERSA comma-separated list of HTTP header names. HTTP Client instrumentations will capture HTTP response header values for all configured header names.StringInstrumentation 
OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTIONWhether the HTTP client instrumentation turns off redaction of the url.full attribute value.FalseBooleanInstrumentation

KAFKA components

NameSupported versions
Confluent.KafkaARM64: 1.8.2 to 3.0.0. Other platforms: 1.4.0 to 3.0.0

MASSTRANSIT components

NameSupported versions
MassTransit8.0.0 and higher

MONGODB components

NameSupported versions
MongoDB.Driver.Core2.28.0 to 3.0.0

MYSQLCONNECTOR Components

NameSupported versions
MySqlConnector2.0.0 and higher

MYSQLDATA Components

NameSupported versions
MySql.Data8.1.0 and higher

NPGSQL components

NameSupported versions
Npgsql6.0.0 and higher

ORACLEMDA components

NameSupported versions
Oracle.ManagedDataAccess.Core23.4.0 and higher
Oracle.ManagedDataAccess23.4.0 and higher

ORACLEMDA settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_ORACLEMDA_SET_DBSTATEMENT_FOR_TEXTWhether the Oracle Client instrumentation can pass SQL statements through the db.statement attribute. Queries might contain sensitive information. If set to false, db.statement is recorded only for executing stored procedures.FalseBooleanInstrumentation

NSERVICEBUS components

NameSupported versions
NServiceBus8.0.0 to 10.0.0

NSERVICEBUS signals

Metric nameTypeDescription
nservicebus.messaging.successescounterNumber of messages successfully processed by the endpoint.
nservicebus.messaging.fetchescounterNumber of messages retrieved from the queue by the endpoint.
nservicebus.messaging.failurescounterNumber of messages unsuccessfully processed by the endpoint.

QUARTZ components

NameSupported versions
Quartz3.4.0 and higher

QUARTZ dependencies

NameSourcePackage URLVersionStability
QuartzNET Instrumentation for OpenTelemetry .NETExternal LinkExternal Link1.0.0-beta.3Beta

RABBITMQ components

NameSupported versions
RabbitMQ.Client6.0.0 to 7.0.0

SQLCLIENT components

NameSupported versions
Microsoft.Data.SqlClientv3.* is not supported on .NET Framework
System.Data.SqlClient4.8.5 and higher
System.DataShipped with .NET Framework

SQLCLIENT dependencies

NameSourcePackage URLVersionStability
SqlClient instrumentation for OpenTelemetry .NETExternal LinkExternal Link1.9.0-beta.1Beta

SQLCLIENT settings

Environment variableDescriptionDefaultTypeCategory
OTEL_DOTNET_AUTO_SQLCLIENT_SET_DBSTATEMENT_FOR_TEXTWhether the SQL Client instrumentation can pass SQL statements through the db.statement attribute. Queries might contain sensitive information. If set to false, db.statement is recorded only for executing stored procedures. Not supported on .NET Framework for System.Data.SqlClient.FalseBooleanInstrumentation

STACKEXCHANGEREDIS components

NameSupported versions
StackExchange.Redis2.6.122 to 3.0.0

STACKEXCHANGEREDIS dependencies

NameSourcePackage URLVersionStability
StackExchange.Redis Instrumentation for OpenTelemetryExternal LinkExternal Link1.0.0-rc9.15Beta

WCFCLIENT components

NameSupported versions
System.ServiceModel4.7.0 and higher of System.ServiceModel.Primitives

WCFCLIENT dependencies

NameSourcePackage URLVersionStability
WCF Instrumentation for OpenTelemetry .NETExternal LinkExternal Link1.0.0-rc.18Beta

NETRUNTIME components

Name
.NET runtime

NETRUNTIME dependencies

NameSourcePackage URLVersionStability
Runtime Instrumentation for OpenTelemetry .NETExternal LinkExternal Link1.9.0Stable

NETRUNTIME signals

Metric nameTypeDescription
process.runtime.dotnet.gc.collections.countcounterNumber of garbage collections since the process started.
process.runtime.dotnet.gc.heap.sizeupdowncounterHeap size, as observed during the last garbage collection. Only available for .NET 6 or higher.
process.runtime.dotnet.gc.heap.fragmentation.sizeupdowncounterHeap fragmentation, as observed during the last garbage collection. Only available for .NET 7 or higher.
process.runtime.dotnet.gc.objects.sizeupdowncounterCount of bytes currently in use by live objects in the GC heap.
process.runtime.dotnet.gc.allocations.sizecounterCount of bytes allocated on the managed GC heap since the process started. Only available for .NET 6 or higher.
process.runtime.dotnet.gc.committed_memory.sizeupdowncounterAmount of committed virtual memory for the managed GC heap, as observed during the last garbage collection. Only available for .NET 6 and higher.
process.runtime.dotnet.gc.durationcounterThe total amount of time paused in GC since the process start. Only available for .NET 7 and higher.
process.runtime.dotnet.monitor.lock_contention.countcounterContentions count when trying to acquire a monitor lock since the process started.
process.runtime.dotnet.thread_pool.threads.countcounterNumber of thread pool threads, as observed during the last measurement. Only available for .NET 6 or higher.
process.runtime.dotnet.thread_pool.completed_items.countcounterNumber of work items processed by the thread pool since the process started. Only available for .NET 6 or higher.
process.runtime.dotnet.thread_pool.queue.lengthupdowncounterNumber of work items currently queued for processing by the thread pool. Only available for .NET 6 or higher.
process.runtime.dotnet.jit.il_compiled.sizecounterBytes of intermediate language that have been compiled since the process started. Only available for .NET 6 or higher.
process.runtime.dotnet.jit.methods_compiled.countcounterNumber of times the JIT compiler compiled a method since the process started. Only available for .NET 6 or higher.
process.runtime.dotnet.jit.compilation_timecounterAmount of time the compiler spent compiling methods since the process started. Only available for .NET 6 or higher.
process.runtime.dotnet.timer.countupdowncounterNumber of timer instances currently active. Only available for .NET 6 or higher.
process.runtime.dotnet.assemblies.countupdowncounterNumber of .NET assemblies that are currently loaded.
process.runtime.dotnet.exceptions.countcounterCount of exceptions thrown in managed code since the observation started.

PROCESS components

Name
Process

PROCESS dependencies

NameSourcePackage URLVersionStability
Process Instrumentation for OpenTelemetry .NETExternal LinkExternal Link0.5.0-beta.bBeta

PROCESS signals

Metric nameTypeDescription
process.memory.usageupdowncounterThe amount of physical memory allocated for this process.
process.memory.virtualupdowncounterThe amount of committed virtual memory for this process.
process.cpu.timecounterTotal CPU seconds broken down by different states, such as user and system.
process.cpu.countupdowncounterTotal CPU seconds broken down by different states, such as user and system.
process.threadsupdowncounterProcess threads count.

ILOGGER components

NameSupported versions
Microsoft.Extensions.Logging8.0.0 and higher

Install and configure the Splunk Distribution of OpenTelemetry Collector

The Splunk Distribution of OpenTelemetry .NET exports application traces and spans to the Splunk Distribution of OpenTelemetry Collector, which also collects system metric data and logs, including profiling data.

To send application traces and spans to Splunk Observability Cloud, install the Splunk Distribution of OpenTelemetry Collector for your platform. The following distributions are available: