NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #631 most downloaded on NuGet
An OpenTelemetry .NET exporter that exports to Azure Monitor
Last release today
07 Oct 2026
Release timing varies
gaps range from 3 weeks to 11 months
Nearly every release is documented
notes for 14 of 14 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
14 releases · first in 2023
Added the Azure.Monitor.OpenTelemetry.Exporter.StorageSubDirectory AppContext value, settable with AppContext.SetData or a runtimeconfig.json configPr
Azure.Monitor.OpenTelemetry.Exporter.StorageSubDirectory AppContext value, settable with AppContext.SetData or a runtimeconfig.json configProperty, so that the processes or entry points of one application can share a persistent storage directory. By default the directory name is derived from the process name and AppContext.BaseDirectory, which splits storage when components of one application differ in either, and a component that runs rarely never drains its backlog. When set, the value replaces those two inputs; the instrumentation key and user name still contribute, so different users and resources stay isolated. Behaviour is unchanged when the value is not set.Azure.Monitor.OpenTelemetry.Exporter.RouteSdkStatsToDistroEndpoint AppContext switch) now carry the same region-matched SDK statistics instrumentation key as the existing SDK statistics endpoint, instead of an all-zero placeholder. Only the destination differs on the distro path.One column per quarter.
Add support for project id attributes propagation
Add support for project id attributes propagation
(#62052)
Shutting down a provider (including Dispose()) now writes pending telemetry to offline storage and uploads it in the background instead of blocking on ingestion. Short-lived applications such as CLI tools previously lost this telemetry, because they exit before a transmission completes; the telemetry is now durable before exit, and delivery is completed by a background drain in this or a subsequent run. ForceFlush is unchanged by default and can be opted in with the Azure.Monitor.OpenTelemetry.Exporter.PersistOnForceFlush AppContext switch, which applies to traces and logs only: a metric reader cannot distinguish a caller's flush from its periodic collection, so metric ForceFlush always transmits. The previous behavior can be restored with the Azure.Monitor.OpenTelemetry.Exporter.DisablePersistOnShutdown AppContext switch.
(#61818)
How long shutdown waits for that background drain can now be set through the Azure.Monitor.OpenTelemetry.Exporter.ShutdownDrainBudgetMilliseconds AppContext data value, using either AppContext.SetData or a runtimeconfig.json configProperty. Dispose() passes a finite timeout, so by default part of that window is spent delivering telemetry and process exit tracks ingestion latency. Short-lived applications should set this to 0, which makes exit cost only the file write: measured at 2.7 ms regardless of ingestion latency, against 2011 ms with a two second ingestion delay. The default is unchanged, so long-running services keep delivering their final batch within the window Dispose() allows. A single-run CI job, where no later run exists to drain storage, should not raise this value but set the Azure.Monitor.OpenTelemetry.Exporter.DisablePersistOnShutdown switch with a bounded Retry.NetworkTimeout: raising the budget cannot guarantee delivery, because Shutdown() waits on the drain for no time at all and Dispose() is capped by the five second grace period OpenTelemetry allows it.
(#62340)
Telemetry left in offline storage by a process that exited during a transmission is no longer stranded permanently. A leased blob is renamed so that it matches neither the storage provider's blob enumeration nor its retention sweep, and the provider only reclaims those leases on a two minute maintenance timer that a short-lived process never reaches. Expired leases are now reclaimed when storage is drained.
(#61818)
Offline storage is now drained shortly after startup rather than only after the process has been running for two minutes, so telemetry persisted by a previous run is uploaded even when no single run is long-lived.
(#61818)
Telemetry is no longer dropped when the offline storage directory reaches its size cap. The oldest stored telemetry is evicted to make room.
(#61818)
Statsbeat no longer holds up process exit. It exports once more as its meter provider is disposed, which put an ingestion round trip on the exit path; that final export now runs in the background, and its network timeout is bounded at five seconds rather than the pipeline default of 100 seconds. The customer SDK stats meter provider is instead left to live for the process lifetime, so it never exports on the exit path at all; its stats are delivered by its own periodic reader.
(#62340)
Log fields are now culture-invariant. (#61996)
Added the telemetrySuccess dimension to Item_Dropped_Count for request and dependency telemetry.
(#62081)
Updated OpenTelemetry dependencies to 1.18.0 and OpenTelemetry.PersistentStorage.FileSystem to 1.1.1.
(#62698)
Improved activity conversion performance by reading recognized attributes from a fixed index instead of scanning the tag list for each one. Every span shape converts faster, by about a third for spans carrying Application Insights override attributes, and each conversion rents fewer pooled buffers. Standard metrics no longer collect the tags they never read.
(#62614)
http.server_name and server.socket.address are still exported as custom properties, unchanged.Code | Docs Personalizer Azure.AI.Personalizer
Code | Docs
Personalizer
Azure.AI.Personalizer
APPLICATIONINSIGHTS_SDKSTATS_DISABLED=true. dropCode/retryCode dimension values now use the spec's SCREAMING_SNAKE_CASE (e.g. CLIENT_EXCEPTION).Added support for the Microsoft OpenTelemetry distro's SDK statistics: a new internal meter subscription and an AppContext switch (Azure.Monitor.OpenT
Added support for the Microsoft OpenTelemetry distro's SDK statistics: a new internal meter subscription and an AppContext switch (Azure.Monitor.OpenTelemetry.Exporter.RouteSdkStatsToDistroEndpoint) that lets the distro redirect SDK statistics to its own ingestion path. The ingestion destination and an on/off signal are resolved at startup by fetching a remote configuration; on success the configured destination is used, an explicit remote disable signal turns SDK statistics off, and any other outcome falls back to the existing region-derived ingestion endpoint so SDK statistics keep flowing. The AppContext switch has no effect on Statsbeat for callers that do not opt in.
(#59811)
Subscribed the Statsbeat MeterProvider to the Microsoft OpenTelemetry distro's Network SDKStats meter (MicrosoftOpenTelemetryNetworkSdkStatsMeter) so distro-emitted Network statistics flow through the existing Statsbeat cadence when the distro runs with a non-Azure-Monitor exporter.
(#60209)
Subscribed the Statsbeat MeterProvider to the Microsoft OpenTelemetry distro's Feature SDKStats meter (MicrosoftOpenTelemetryFeatureSdkStatsMeter) so distro-emitted Feature statistics reach the Statsbeat ingestion path. The distro uses an independent, spec-aligned bit map to avoid collisions with the classic Application Insights SDK's FeatureStatsbeatMeter.
(#59529)
Added Network SDKStats reporting, emitting the short-interval Network statistics defined in the Application Insights SDKStats spec on a 15-minute cadence: Request_Success_Count, Request_Failure_Count, Request_Duration, Retry_Count, Throttle_Count, and Exception_Count, each with the spec-defined dimensions (including host, statusCode, and exceptionType).
(#59909, #60018)
computeType, telemetryType, dropCode, dropReason, retryCode, retryReason).
(#59902)Added GenAI main agent attribution support. Automatically propagates microsoft.gen_ai.main_agent.* attributes from parent spans to child spans and log
microsoft.gen_ai.main_agent.* attributes from parent spans to child spans and log records, enabling end-to-end tracing of AI agent orchestration.
(#59368)Pulled in OpenTelemetry dependency updates.
Code | Docs Health Deidentification Azure.Health.Deidentification
Code | Docs
Health Deidentification
Azure.Health.Deidentification
ApplicationInsightsRestClientSettings to support creating a ApplicationInsightsRestClient from IConfiguration, including configuration-based credential resolution and dependency injection registration.
(#56891)ConfigurationBinder calls.
(#56368)AzureMonitorLogExporter, AzureMonitorMetricExporter, and AzureMonitorTraceExporter public for direct use when configuring OpenTelemetry.
(#56344)EnablePerformanceCounters and EnableStandardMetrics public in AzureMonitorExporterOptions.
(#56344)Code | Docs Communication Chat Azure.Communication.Chat
Code | Docs
Communication Chat
Azure.Communication.Chat
preview.item.success.count → Item_Success_Count,
preview.item.dropped.count → Item_Dropped_Count,
preview.item.retry.count → Item_Retry_Count.APPLICATIONINSIGHTS_SDKSTATS_DISABLED=false.APPLICATIONINSIGHTS_SDKSTATS_ENABLED_PREVIEW
is no longer recognized.Code | Docs Communication Rooms Azure.Communication.Rooms
Code | Docs
Communication Rooms
Azure.Communication.Rooms
Enabled resource metrics export by default. (#53432)
Added EnableTraceBasedLogSampler property to AzureMonitorExporterOptions
to enable filtering logs based on trace sampling decisions, reducing log
volume while maintaining trace-log correlation.
(#53441)
Update OpenTelemetry dependencies (#53910)
Code | Docs Support: Active Communication Common Azure.Communication.Common
Code | Docs
Support: Active
Communication Common
Azure.Communication.Common
Code | Docs
Code | Docs
AzureMonitorLogExporter to be internal.
This will be changed back to public in our next Beta while we experiment with options to enable log filtering.
(#44479)Code | Docs Communication SMS Azure.Communication.Sms
Code | Docs
Communication SMS
Azure.Communication.Sms
Code | Docs
Code | Docs
Fixed an issue where OriginalFormat persisted in TraceTelemetry properties
with IncludeFormattedMessage set to true on
OpenTelemetryLoggerOptions
of the OpenTelemetry LoggerProvider. This fix prevents data duplication in
message fields and properties.
(#39308)
Fixed an issue related to the processing of scopes that do not conform to a key-value pair structure. (#39453)
logger.BeginScope("SomeScopeValue") would result in adding
'SomeScopeValue' to the properties using a key that follows the pattern
'scope->'. Additionally, 'OriginalFormatScope_' keys were used to handle
formatted strings within the scope.Resolved an issue where activity tags of various object types, including
double, float, and others, were previously formatted using
CultureInfo.CurrentCulture. This behavior caused inconsistencies in tag
value formatting depending on the regional settings of the machine where the
application was running. Such inconsistencies could lead to challenges in data
analysis and cause test failures in environments with differing cultural
settings. The fix ensures uniform and culture-independent formatting of
activity tag values, aligning with consistent data representation.
(#39470)
Code | Docs Azure AI Search Azure.Search.Documents
Code | Docs
Azure AI Search
Azure.Search.Documents
Your coding agent can read these notes before it upgrades. Set up the MCP server →