Manually instrument .NET applications for Splunk Observability Cloud ๐
The Splunk Distribution of OpenTelemetry .NET zero-code instrumentation provides a base you can build on by adding your own manual instrumentation. By using both zero-code and manual instrumentation, you can better instrument the logic and functionality of your applications, clients, and frameworks.
Create custom traces ๐
To create custom spans and traces, follow these steps:
Install the Splunk Distribution of OpenTelemetry .NET. See Instrument your .NET application.
Add the
System.Diagnostics.DiagnosticSource
dependency to your project:<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="9.0.0" />
Create an
ActivitySource
instance:private static readonly ActivitySource RegisteredActivity = new ActivitySource("Examples.ManualInstrumentations.Registered");
Create an
Activity
(Span). Optionally, set tags:using (var activity = RegisteredActivity.StartActivity("Custom Span Name")) { // Check if the activity is sampled and if full data collection is enabled. // This ensures that tags and other custom attributes are only set when the activity is being recorded. // Note: Ensure that skipping logic based on sampling does not interfere with essential business operations. if(activity?.IsAllDataRequested) { // your logic for custom activity activity.SetTag("foo", "bar1"); } }
Register your
ActivitySource
by setting theOTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES
environmental variable. You can set the value to eitherExamples.ManualInstrumentations.Registered
or toExamples.ManualInstrumentations.*
, which registers the entire prefix.Invoke the action that generates an
Activity
, note the trace ID of theActivity
, and locate the trace in Splunk APM. You should now see a span with the display name โCustom Span Nameโ in the trace tree.
See the OpenTelemetry official documentation for additional information and examples.
Create custom metrics ๐
To create custom metrics, follow these steps:
Add the
System.Diagnostics.DiagnosticSource
dependency to your project:<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="9.0.0" />
Create a
Meter
instance:using var meter = new Meter("My.Application", "1.0");
Create an
Instrument
instance:var counter = meter.CreateCounter<long>("custom.counter", description: "Custom counter's description");
Update the
Instrument
value:counter.Add(1);
Register your
Meter
with OpenTelemetry.AutoInstrumentation by setting theOTEL_DOTNET_AUTO_METRICS_ADDITIONAL_SOURCES
environment variable:OTEL_DOTNET_AUTO_METRICS_ADDITIONAL_SOURCES=My.Application
See the OpenTelemetry official documentation for additional information and examples.