.NET Agent version 1.x
edit.NET Agent version 1.x
edit1.29.0 - 2024/09/18
editThis release includes a breaking change in how we parse and send transaction cookies. In 1.26.0, we
introduced improved cookie redaction based on the SanitizeFieldNames
configuration. To implement this,
we extracted each cookie from the Cookie
header, storing them in a cookie dictionary on the transaction request data.
We have identified a problem with the storage of cookies that include period characters due to the mapping of such data
when stored in the APM data stream. This behaviour can lead to lost transactions on requests which include such cookies.
This is common in ASP.NET Core due to the default cookie names used for sessions, authentication, etc.
In this release, we no longer parse out individual cookies, and the cookie Dictionary
has been removed from the
data model. This means that cookies will no longer be indexed individually. However, we have ensured that we
retain the primary reason for the earlier change, which was to redact the values of sensitive cookies. Any cookies with
a name matching the SanitizeFieldNames
patterns will be redacted in the value of the Cookie
header
we store.
For most consumers, we expect the impact to be minimal. However, if you were relying on the parsed cookie
fields, adjustments will be necessary to work with the Cookie
header value instead.
1.28.6 - 2024/09/11
edit1.28.4 - 2024/08/19
editBug fixes
edit#2427 Ensure we capture baggage when capturing Errors during unsampled transactions #2425 Ensure safer access to System.Web.Security.Roles #2426 Fix a bug that prevented the addition of filters to payloadsenders #2423 SetAgentActivationMethod throws CultureNotFoundException in global-invariant mode
1.28.3 - 2024/08/15
edit1.28.2 - 2024/08/14
edit1.28.1 - 2024/08/12
edit1.27.2 - 2024/06/18
editBug fixes
edit#2308 Clean up dependency graph for .NET core installations #2356 Open Telemetry Bridge should only log when enabled #2166 Bump Microsoft.AspNetCore.Http dep to 2.1.22 #2350 Fix message format for logging in managed profiler #2225 Only mark bodies as redacted if explicitly configured to do so. #2377 Do not read claims from SqlRoleProvider under classic ASP.NET
1.27.0 - 2024/04/30
editFeatures
edit#2326 Add IServiceCollection
extension methods to register ApmAgent
#2331 Add support for transaction_name_groups
and use_path_as_transaction_name
Bug fixes
edit#2298 Refine agent initialization within ElasticApmModule #2303 Fix race condition on Add in redis profiler #2299 Further logging refinements in ElasticApmModule #2304 Update to .NET 8 SDK #2302 Update troubleshooting section of docs #2310 Fix bug when handling of multiple cookie entries with the same name #2314 Clarify logging behaviour in troubleshooting doc #2336 Fix agent-zip for 5.0.0
1.26.0 - 2024/02/20
editThis release introduces more thorough sanitization of request/response cookies to align with the APM spec.
The incoming Cookie
is now redacted by default. The cookies it contains are extracted and sanitized according
to the SanitizeFieldNames
configuration. Response headers are now correctly sanitized, including the
Set-Cookie
header. This is a behaviour change!
Features
edit#2290 Fully implement the sanitization spec for request/response headers #2272 Include process information in metadata stanza when emitting events to apm-server #2264 Switch to Licence expression rather than file
Bug fixes
edit#2267 Cleanup of packages thanks to Framework reference #2274 Limit memory usage when capturing SOAP request bodies #2276 Address a few synchronization issues in the codebase #2277 Truncate unknown keys logging from central config parser #2278 Ensure exposed default constants are readonly #2283 Fix duplicate key errors on dropped span stats update #2279 Remove RegexConverter, not used in serialization from and to apm-server #2280 Cleanup some dead code and one instance of null propagation in tooling NOT userfacing code
1.25.3 - 2024/01/08
edit1.25.2 - 2023/12/13
editThis release fixes a bug in Elastic.Apm.AspNetCore
when using ` UseElasticApm()` not correctly setting status codes.
The bug was not present in the more commonly used Elastic.Apm.NetCoreAll
since it uses a DiagnosticListener
approach.
With this release we ensure both packages use the exact same DiagnosticListener
mechanism to instrument ASP.NET Core.
1.25.1 - 2023/11/21
edit1.25.0 - 2023/10/19
edit1.24.0 - 2023/09/20
edit1.23.0 - 2023/08/08
edit1.22.0 - 2023/04/28
edit1.21.0 - 2023/04/05
editThis release includes two breaking changes that have minimal impact.
-
We removed support for target frameworks which have gone into end-of-life support by Microsoft.
The impact should be minimal, however as we continue to support
netstandard2.0
andnetstandard2.1
where applicable. - We removed the collection of GC metrics over ETW on .NET Full Framework. The collection over ETW requires elevated privileges, especially in IIS deployments. This runs counter to best practices. Since these are currently not displayed in the APM UI, while technically breaking, the impact should be minimal. The GC metric collection on modern .NET platforms is not impacted.
Breaking changes
edit1.20.0 - 2023/02/27
editFeatures
edit-
#1981 Support for Azure Functions through new
Elastic.Apm.Azure.Functions
nuget package! -
#1935 Support new Elasticsearch Client:
Elastic.Clients.Elasticsearch
- #1988 Suppport latest version of Microsoft.Data.SqlClient
- #1988 Support latest version OracleManagedDataAccess
- #1983 Loose MSVC redistributable as requirement for the profiler
- #1983 Add support for sending agent activation method to the server
Bug fixes
edit- #1999 NullReferenceException in span compression
- #1970 Improve profiler logging by always enabling agent logging too.
-
#1972 Normalize OpenTelemetry Bridge config section to
OpenTelemetryBridgeEnabled
- #1926 Try to enable TLS 1.2 in all scenarios.
- #1964 OTel bridge span’s destination service may contain null resource
- #1961 AppSettings ElasticApm:Enabled is not fully honored in ASP.NET Classic
1.19.0 - 2022/12/05
editFeatures
edit- #1867 Improve handling of multiple agent initialization.
- #1877 Enable CloudMetadataProvider on Azure Functions.
- #1892 CentralConfig: handle MaxAge header with less than 5 sec according to spec (issue: #1831).
- #1897 Add basic agent logging preamble.
- #1907 Publish docker image with agent (issue: #1665).
- #1917 Add .NET 7 support (issue: #1860).
- #1930 Improve SOAP action parsing.
Bug fixes
edit- #1882 Fix transaction trace id not aligned when transaction is created from OTel bridge without parent (issue: #1881).
- #1905 Avoid NRE during startup hook init (issue: #1904).
- #1927 Avoid panic in file-logging setup (issue: #1918).
- #1922 Use Span timing instead of cumulative SqlCommand statistics (issue: #1869).
- #1933 Enable DOTNET_STARTUP_HOOKS for .NET 7 (issue: #1900).
1.18.0 - 2022/10/13
editFeatures
editBug fixes
edit- #1800 Fix incorrect transaction name in ASP.NET Web Api (issue: #1637).
- #1803 and #1804 Fix potential NullReferenceException in TraceContinuationStrategy implementation (issue: #1802).
- #1780 Fix container ID parsing in AWS ECS/Fargate environments (issue: #1779).
- #1814 Use correct default value for ExitSpanMinDuration (issue: #1789).
- #1811 Fixed crashes on some SOAP 1.2 requests when using GetBufferedInputStream (issue: #1759).
- #1816 Group MetricSets in BreakdownMetricsProvider (issue: #1678).
1.17.0 - 2022/08/24
editFeatures
editBug fixes
edit-
#1746 Fix default for the
ApplicationNamespaces
config. - #1755 Flow SynchronizationContext across public API calls (issue: #1660).
- #1753 PayloadSender threading improvements (issue: #1571).
- #1773 Include Accept header on APM server info call (caused errors when reading APM Server info) (issue: #1624).
- #1781 Significantly improved the performance of database query parsing (issue: #1763).
- #1787 Fix FillApmServerInfo : Invalid ElasticApm_ApiKey throws Exception (issue: #1735).
1.16.1 - 2022/06/15
edit1.16.0 - 2022/06/02
editFeatures
editBug fixes
edit-
#1725 By disabling
system.cpu.total.norm.pct
, the agent won’t create any instance of thePerformanceCounter
type (workaround for issue: #1724) -
#1723 Transaction names for incoming HTTP requests returning 404 but matching a valid route, will include the URL path instead of using
unknown route
(issue: #1715).
1.15.0 - 2022/05/12
editFeatures
editBug fixes
edit- #1670 Dedicated working loop thread for sending APM events (issue: #1571)
- #1677 Fixed span type for MongoDB - with this a MongoDB logo will show up on the service map
-
#1674 InvalidCastException in
AspNetCoreDiagnosticListener
-
#1683 MVC: handling
area:null
when creating transaction name based on routing -
#1685 Handle missing
.Stop
events inAspNetCoreDiagnosticListener
(issue: #1676)
1.14.0 - 2022/02/09
editFeatures
edit-
#1620 Span compression and dropping fast exit spans. New settings:
ExitSpanMinDuration
,SpanCompressionEnabled
,SpanCompressionExactMatchMaxDuration
,SpanCompressionSameKindMaxDuration
(issues: #1329 and #1475) - #1611 NpgSql 6.x support (issue: #1602)
- #1589 Capture transaction name on errors (issue: #1574)
Bug fixes
editBreaking changes
edit1.12.0
editBreaking changes
editFeatures
edit- #1511 Implement Dropped span statistics
- #1515 Ignore duplicate Diagnostic listener subscriptions (issue: #1119)
- #1518 Implement User-Agent spec for .NET agent (issue: #1517)
- #1525 Add message related properties to transactions and spans (issue: #1512)
- #1534 Add profiler auto instrumentation (issue: #1522)
- #1548 Add profiler auto instrumentation for RabbitMQ (issue: #1223)
- #1528 Platform detection: Handle .NET 6 (issue: #1513)
- #1492 Remove use of Socket.Encrypted to determine secure
- #1520 Auto-infer destination.service.resource and adapt public API (issues: #1330)
- #1540 Stop recording transaction metrics (issue: #1523)
Bug fixes
edit- #1484 Capture spans for new Azure Storage SDKs (issue: #1352)
- #1509 Use Environment.MachineName to get HostName (issue: #1504)
- #1510 Check context is not null when sanitizing error request headers (issue: #1503)
- #1536 Improve Performance counter handling for metrics on Windows (issue: #1505)
- #1538 Collect .NET Framework GC metrics only when filtering supported (issue: #1346)
- #1557 Handle enabled/recording=false configuration when capturing errors
1.11.1
editFeatures
edit- #1354 Serialize to writer directly
- #1356 Better logging in PayloadSenderV2 on task cancellation
- #1358 Propagate Trace context in exit spans (issues: #1350, #1344)
- #1374 Get Command and Key for StackExchange.Redis spans (issue: #1364)
- #1474 Add CosmosDB integration to NetCoreAll
- #1368 Use 10K limit for CaptureBody similar to the Java agent (issue: #1359)
Bug fixes
edit- #1362 Unset parentId if TraceContextIgnoreSampledFalse is active
- #1367 Make sure BreakdownMetricsProvider prints 1K warning only once per collection (issue: #1361)
- #1471 Sanitize Central config request URI and headers in logs (issue: #1376)
- #1472 Honor Transaction.Outcome set by public API in auto instrumentation (issue: #1349)
- #1481 Use Kubernetes pod id determined from cgroup file
1.11.0
editFeatures
edit- #1342 CosmosDb support (issue: #1154)
- #1271 Support "Time spent by span type" (aka Breakdown metrics) (issue: #227)
- #1302 Prefer W3C traceparent over elastic-apm-traceparent
- #1310 Add TraceContextIgnoreSampledFalse config setting
- #1331 Create transactions for Azure Service Bus Processors (issue: #1321)
1.10.0
editFeatures
edit- #1225 Add instrumentation for Azure Service Bus (issue: #1157)
- #1247 Add Azure storage integration (issues: #1156 and #1155)
-
#1241 Internalize
Newtonsoft.json
- no more dependency onNewtonsoft.json
-
#1275 Internalize
Ben.Demystifier
- no more dependency onBen.Demystifier
(issue: #1232) - #1215 Add MongoDb support (issue: #1158)
- #1277 Capture inner exceptions (issue: #1267)
- #1290 Add configured hostname (issue: #1289)
- #1288 Use TraceLogger as default logger in ASP.NET Full Framework (issue: #1263)
Bug fixes
editBreaking changes
edit1.9.0
editFeatures
editBug fixes
edit- #1189 Get transaction name from Web API controller route template
Breaking changes
edit1.8.0
editFeatures
edit- #1063 Add support for capturing redis commands from StackExchange.Redis (documentation) (issue: #874)
-
#1065 Introduce
ServerUrl
config - (ServerUrls
is still working but will be removed in the future) (issue: #1035) - #1048 Support for more k8s cgroup path patterns (issue: #968)
-
#1082
SanitizeFieldNames
config became changeable though Kibana central configuration - #1083 Azure App Service cloud metadata collection
-
#1135 Capture error logs as APM errors from
Microsoft.Extensions.Logging
automatically and extend the Public API to capture custom logs as APM errors (issue: #894) -
#1096 Support changing log level through Kibana central configuration and support
"off"
level (issue: #970)
Bug fixes
edit-
#1081
NullReferenceException
with disabled agent onTransaction.Custom
(issue: #1080) -
#1078 ASP.NET Core, enabled=false in
appsettings.json
does not disable public Agent API (issue: #1077) -
#1115
System.IO.IOException
on ASP.NET Classic (issue: #1113) - #1118 Memory issue with gRPC (issue: #1116)
- #1124 Ensuring ETW sessions are terminated on agent shutdown (issue: #897)
-
#1109
NullReferenceException
with customIConfigurationReader
implementation inMetricsCollector
-
#1138 and #1165 Fixes around zero code change agent setup with
DOTNET_STARTUP_HOOKS
-
#1115 Access
Request.InputStream
only when SOAP header present (issue: #1113)
1.7.1
editFeatures
editBug fixes
edit- #1052 Increased transaction duration due to stack trace capturing (issue: #1039)
-
#1053 Warning with
Synchronous operations are disallowed
on ASP.NET Core during request body capturing (issue: #1044) - #1042 SqlClient instrumentation on .NET 5 (issue: #1025)
-
#1060
UseAllElasticApm
withIHostBuilder
missing auto instrumentation (issue: #1059)
1.7.0
editFeatures
edit- #828 Agent loading with zero code change on .NET Core (issue: #71)
- #969 gRPC support (issue: #478)
- #974 Add ability to configure Hostname (issue: #932)
- #997 Add Enabled and Recording configuration (issue: #122)
-
#912 Add
FullFrameworkConfigurationReaderType
config to load custom configuration reader on ASP.NET - #978 Capture User id and email on ASP.NET (issue: #540)
- #982 Support boolean and numeric labels in addition to string labels (issues: #967, #788, #473, #191, #788, #473, #191)
- #1000 Collecting metrics based on cGroup (issue: #937)
-
#1002
ITransaction.SetService
API to support multiple services in a single process (issue: #1001) - #1003 Collecting cloud metadata (supporting AWS, Azure, GCP) (issue: #918)
- #973 Transaction grouping on ASP.NET (issue: #201)
- #913 Entity Framework 6 support on .NET Core (issue: #902)
Bug fixes
editBreaking changes
edit-
Binary compatibility on
IExecutionSegment.CaptureException
andIExecutionSegment.CaptureError
with libraries depending on previous version. If this happens you need to updateElastic.Apm
to 1.7.0 in your projects (Issue: (#1067)
1.6.0
editFeatures
edit- Elasticsearch client instrumentation #329
-
Introducing
Elastic.Apm.Extensions.Hosting
package with an extension method onIHostBuilder
#537 - Stack trace improvements: async call stack demystification (#847) and showing frames from user code for outgoing HTTP calls (#845)
-
Making fields on
IError
public #847 - Service map improvements: #893
Bug fixes
edit1.5.0
editFeatures
edit-
Auto instrumentation for
SqlClient
(documentation) - Introducing Filter API #792 (documentation)
- Auto-detect culprit for exceptions #740
-
New config settings:
ExcludedNamespaces
,ApplicationNamespaces
(documentation) -
Keep
Activity.Current.TraceId
in sync with the Trace ID used by the agent #800 - Report Kubernetes system metadata #741
Bug fixes
edit- Database connection string parsing issue with Oracle #795
1.4.0
editFeatures
editBug fixes
editBreaking changes
edit-
We have some changes that are technically breaking changes. We made some helper classes internal that were never meant to be public. These are:
Elastic.Apm.Helpers.AgentTimeInstant
,Elastic.Apm.Helpers.ContractExtensions
,Elastic.Apm.Helpers.ObjectExtensions
,Elastic.Apm.Helpers.ToStringBuilder
. None of these classes were documented or mentioned as part of the Public Agent API. We expect no usage of these classes outside the agent.
1.3.0
editFeatures
edit-
New GC metrics:
clr.gc.count
,clr.gc.gen[X]size
, where [X]: heap generation #697 - Capturing SOAP action name as part of the transaction name #683
-
New config options:
ServiceNodeName
,VerifyServerCert
,DisableMetrics
,UseElasticTraceparentHeader
(docs) - Full W3C TraceContext support #717
Bug fixes
edit1.2.0
editFeatures
edit- Entity framework support with Interceptor (docs)
- Sanitization of HTTP headers and request body (docs)
-
Central configuration - 2 new configs:
CAPTURE_BODY
andTRANSACTION_MAX_SPANS
. #577. - Support for global labels (docs)
- Custom context (docs)
- Dropping support for ASP.NET Core 2.0 (which is already end of life) (docs)
Bug fixes
edit1.1.1
editFeatures
editConfigure transaction max spans. #472
Bug fixes
editFixing missing "Date Modified" field on the files from the 1.1.0
packages causing an error while executing dotnet pack
or nuget pack
on a project with Elastic APM Agent packages. #527
1.1.0
editFeatures
edit- ASP.NET Support, documentation can be found here
- Central configuration (Beta)
Bug fixes
edit1.0.1
editBug fixes
edit-
NullReferenceException
on .NET Framework with outgoing HTTP calls created withHttpClient
in case the response code is HTTP3xx #450 -
Added missing
net461
target to theElastic.Apm
package -
Handling
Labels
withnull
#429
Features
edit-
Reading request body in ASP.NET Core. Also introduced two new settings:
CaptureBody
andCaptureBodyContentTypes
. By default this feature is turned off, this is an opt-in feature and can be turned on with theCaptureBody
setting. #402
1.0.0 GA
editThe 1. GA release of the Elastic APM .NET Agent. Stabilization of the 1.0.0-beta feature for production usage.
Features
editBug fixes
editBreaking changes
editWe have some breaking changes in this release. We wanted to do these changes prior to our GA release and with this we hopefully avoid breaking changes in the upcoming versions.
-
For better naming we replaced the
Elastic.Apm.All
packages withElastic.Apm.NetCoreAll
#371 -
Based on feedback we also renamed the
UseElasticApm()
method in theElastic.Apm.NetCoreAll
package toUseAllElasticApm
- this method turns on every component of the Agent for ASP.NET Core. #371 -
Our logger abstraction, specifically the
IApmLogger
interface changed: #389 -
To follow the Elastic Common Schema (ECS), we renamed our
Tags
properties toLabels
. #416