2.5 KiB
OpenTelemetry .NET Traces
Best Practices
ActivitySource singleton
ActivitySource SHOULD only be created once and reused throughout the
application lifetime. This
example shows how
ActivitySource is created as a static field and then used in the
application. You could also look at this ASP.NET Core
example which shows a more Dependency
Injection friendly way of doing this by extracting the ActivitySource into a
dedicated class called
Instrumentation which is then
added as a Singleton service.
Manually creating Activities
As shown in the getting started guide, it
is very easy to manually create Activity. Due to this, it can be tempting to
create too many activities (eg: for each method call). In addition to being
expensive, excessive activities can also make trace visualization harder.
Instead of manually creating Activity, check if you can leverage
instrumentation libraries, such as ASP.NET
Core,
HttpClient which will
not only create and populate Activity with tags(attributes), but also take
care of propagating/restoring the context across process boundaries. If the
Activity produced by the instrumentation library is missing some information
you need, it is generally recommended to enrich the existing Activity with that
information, as opposed to creating a new one.
Common issues that lead to missing traces
- The
ActivitySourceused to create theActivityis not added to theTracerProvider. UseAddSourcemethod to enable the activity from a givenActivitySource. TracerProvideris disposed too early. You need to ensure that theTracerProviderinstance is kept active for traces to be collected. In a typical application, a single TracerProvider is built at application startup, and is disposed of at application shutdown. For an ASP.NET Core application, useAddOpenTelemetryandWithTracesmethods from theOpenTelemetry.Extensions.Hostingpackage to correctly setupTracerProvider. Here's a sample ASP.NET Core app for reference. For simpler applications such as Console apps, refer to this example.- TODO: Sampling