.NET OpenTracing Instrumentation
For more details and information, view the OpenTracing API.
Setup
Note: Starting with v3.0.0, OpenTracing support requires you also use automatic instrumentation. You should aim to keep both automatic and custom instrumentation package versions (for example: MSI and NuGet) in sync, and ensure you don't mix major versions of packages.
For OpenTracing support, add the Datadog.Trace.OpenTracing
NuGet package to your application. During application start-up, initialize the OpenTracing SDK:
using Datadog.Trace.OpenTracing;
public void ConfigureServices(IServiceCollection services)
{
// Create an OpenTracing ITracer with the default setting
OpenTracing.ITracer tracer = OpenTracingTracerFactory.CreateTracer();
// Use the tracer with ASP.NET Core dependency injection
services.AddSingleton<ITracer>(tracer);
// Use the tracer with OpenTracing.GlobalTracer.Instance
GlobalTracer.Register(tracer);
}
Manually instrument a method
Use OpenTracing to create a span.
using (IScope scope = GlobalTracer.Instance.BuildSpan("manual.sortorders").StartActive(finishSpanOnDispose: true))
{
scope.Span.SetTag("resource.name", "<RESOURCE NAME>");
SortOrders();
}
Asynchronous traces
To trace code running in an asynchronous task, create a new scope within the background task, just as you would wrap synchronous code.
Task.Run(
() =>
{
using (IScope scope = GlobalTracer.Instance.BuildSpan("manual.sortorders").StartActive(finishSpanOnDispose: true))
{
scope.Span.SetTag("resource.name", "<RESOURCE NAME>");
SortOrders();
}
});
Further reading
Additional helpful documentation, links, and articles: