ObserveNow
...
Integrations
Applications
.NET / .NET Framework
overview this documentation will show you how to instrument your net applications to send opentelemetry traces to observenow setup for apps running on net auto instrumentation install the following packages using dotnet add package command opentelemetry exporter console https //www nuget org/packages/opentelemetry exporter console/ (optional for traces to be displayed on console during development) opentelemetry exporter opentelemetryprotocol https //www nuget org/packages/opentelemetry exporter opentelemetryprotocol opentelemetry extensions hosting https //www nuget org/packages/opentelemetry extensions hosting opentelemetry instrumentation aspnetcore https //www nuget org/packages/opentelemetry instrumentation aspnetcore in the csproj file, the installed packages will look like \<itemgroup> \<packagereference include="opentelemetry exporter console" version="1 7 0" /> \<packagereference include="opentelemetry exporter opentelemetryprotocol" version="1 7 0" /> \<packagereference include="opentelemetry extensions hosting" version="1 7 0" /> \<packagereference include="opentelemetry instrumentation aspnetcore" version="1 7 0" /> \</itemgroup> configuration paste the below code snippet in the program cs file // import necessary packages using system diagnostics; using opentelemetry exporter; using opentelemetry resources; using opentelemetry trace; using opentelemetry exporter opentelemetryprotocol; // configure opentelemetry settings var builder = webapplication createbuilder(args); builder services addopentelemetry() configureresource(resource => resource addservice("\<service name>")) withtracing(tracing => { tracing addaspnetcoreinstrumentation(); // tracing addconsoleexporter(); (used only for development purposes) tracing addotlpexporter(opt => { opt endpoint = new uri("\<otel collector endpoint>"); opt protocol = opentelemetry exporter otlpexportprotocol grpc; }); }); var app = builder build(); for apps running on net framework 4 8 x instrumentation manual install the following packages using dotnet add package command or nuget package manager opentelemetry https //www nuget org/packages/opentelemetry opentelemetry exporter opentelemetryprotocol https //www nuget org/packages/opentelemetry exporter opentelemetryprotocol opentelemetry instrumentation http https //www nuget org/packages/opentelemetry instrumentation http opentelemetry instrumentation aspnetcore https //www nuget org/packages/opentelemetry instrumentation aspnetcore opentelemetry exporter console https //www nuget org/packages/opentelemetry exporter console (optional for traces to be displayed on console during development) in the csproj file, the installed packages will look like \<itemgroup> \<packagereference include="opentelemetry" version="1 7 0" /> \<packagereference include="opentelemetry exporter console" version="1 7 0" /> \<packagereference include="opentelemetry exporter opentelemetryprotocol" version="1 7 0" /> \<packagereference include="opentelemetry instrumentation aspnetcore" version="1 7 0" /> \<packagereference include="opentelemetry instrumentation http" version="1 7 0" /> \</itemgroup> configuration paste the below code snippet in the program cs file // import necessary packages using system diagnostics; using microsoft extensions configuration; using opentelemetry; using opentelemetry exporter; using opentelemetry trace; using system; using system net http headers; using system net http; using system threading tasks; using opentelemetry resources; public class program { private static readonly activitysource myactivitysource = new activitysource("mycompany myproduct mylibrary"); public static void main() { var tracerprovider = sdk createtracerproviderbuilder() setresourcebuilder(resourcebuilder createdefault() addservice("\<service name>")) // the following subscribes to activities from activity source mycompany myproduct mylibrary addsource("mycompany myproduct mylibrary") // addconsoleexporter() (used only for development purposes) addotlpexporter(opt => { opt endpoint = new uri("\<otel collector endpoint>"); opt protocol = otlpexportprotocol grpc; }) build(); // you can also set custom tags to the trace information // note this is used for testing and can be deleted once testing is done using (var activity = myactivitysource startactivity("\<activity name>")) { activity? settag("foo", 1); activity? settag("bar", "hello, world!"); activity? settag("baz", new int\[] { 1, 2, 3 }); activity? setstatus(activitystatuscode ok); } // dispose tracer provider before the application ends // this will flush the remaining spans and shutdown the tracing pipeline tracerprovider dispose(); } } every activity source which produce telemetry must be explicitly added to the tracer provider to start collecting traces from them addsource method on tracerproviderbuilder can be used to add a activitysource to the provider the name of the activitysource (case insensitive) must be the argument to this method ensure that the opsverse agent otel collector is accessible from your net application environnment, either using an ingress or an ip adding custom span attributes custom span attributes can be added at the service level or at ( more granular ) trace level for service level span attributes, you can configure an environment variable otel resource attributes with key value pairs for eg otel resource attributes=key1=value1,key2=value2 these will be picked up by the opentelemetry sdk and be brought into traces in your observenow instance for granular, trace level attributes, you can leverage activitysource to add custom span attributes this is somewhat similar to the manual instrumentation steps above using system diagnostics; \[httpget] public iactionresult get() { var activitysource = new activitysource("mycompany myproduct mylibrary"); using (var activity = activitysource startactivity("\<activity name>")) { activity? settag("\<custom attr key>", "\<custom attr value>"); // rest of your logic } }