Git Product home page Git Product logo

csharp-netcore's Introduction

nuget

OpenTracing instrumentation for .NET Core apps

This repository provides OpenTracing instrumentation for .NET Core based applications. It can be used with any OpenTracing compatible tracer.

IMPORTANT: OpenTracing and OpenCensus have merget to form OpenTelemetry! The OpenTelemetry .NET library can be found at https://github.com/open-telemetry/opentelemetry-dotnet.

Supported .NET versions

This project currently only supports apps targeting netcoreapp2.1 (.NET Core 2.1), netcoreapp3.1 (.NET Core 3.1) or net5.0 (.NET 5.0)!

This project DOES NOT support the full .NET framework as that uses different instrumentation code.

Supported libraries and frameworks

DiagnosticSource based instrumentation

This project supports any library or framework that uses .NET's DiagnosticSource to instrument its code. It will create a span for every Activity and it will create span.Log calls for all other diagnostic events.

To further improve the tracing output, the library provides enhanced instrumentation (Inject/Extract, tags, configuration options) for the following libraries / frameworks:

  • ASP.NET Core
  • Entity Framework Core
  • System.Net.Http (HttpClient)
  • System.Data.SqlClient
  • Microsoft.Data.SqlClient

Microsoft.Extensions.Logging based instrumentation

This project also adds itself as a logger provider for logging events from the Microsoft.Extensions.Logging system. It will create span.Log calls for each logging event, however it will only create them if there is an active span (ITracer.ActiveSpan).

Usage

This project depends on several packages from Microsofts Microsoft.Extensions.* stack (e.g. Dependency Injection, Logging) so its main use case is ASP.NET Core apps and any other Microsoft.Extensions-based console apps.

1. Add the NuGet package OpenTracing.Contrib.NetCore to your project.
2. Add the OpenTracing services to your IServiceCollection via services.AddOpenTracing().

How you do this depends on how you've setup the Microsoft.Extensions.DependencyInjection system in your app.

In ASP.NET Core apps you can add the call to your ConfigureServices method (of your Program.cs file):

public static IWebHost BuildWebHost(string[] args)
{
    return WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureServices(services =>
        {
            // Enables and automatically starts the instrumentation!
            services.AddOpenTracing();
        })
        .Build();
}
3. Make sure InstrumentationService, which implements IHostedService, is started.

InstrumentationService is responsible for starting and stopping the instrumentation. The service implements IHostedService so it is automatically started in ASP.NET Core, however if you have your own console host, you manually have to call StartAsync and StopAsync.

Note that .NET Core 2.1 greatly simplified this setup by introducing a generic HostBuilder that works similar to the existing WebHostBuilder from ASP.NET Core. Have a look at the TrafficGenerator sample for an example of a HostBuilder based console application.

csharp-netcore's People

Contributors

austinlparker avatar catcherwong avatar chrishaly avatar cwe1ss avatar d1mnewz avatar human-aft3r-all avatar marcus-smallman avatar markvincze avatar ndrwrbgs avatar pcwiese avatar rwkarg avatar scoof avatar yelob avatar yurishkuro avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.