Skip to content

Latest commit

 

History

History
103 lines (77 loc) · 3.51 KB

File metadata and controls

103 lines (77 loc) · 3.51 KB

AspNetCore.SignalR.OpenTelemetry

NuGet build-and-test

This is an Instrumentation Library, which instruments ASP.NET Core SignalR and collect traces about SignalR hub method invocations.

Table of Contents

Install

NuGet: AspNetCore.SignalR.OpenTelemetry

dotnet add package AspNetCore.SignalR.OpenTelemetry

Usage

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSignalR()
    .AddHubInstrumentation(); // <- Add this!

builder.Services.AddOpenTelemetry()
    .ConfigureResource(builder =>
    {
        builder.AddService("AspNetCore.SignalR.OpenTelemetry.Example");
    })
    .WithTracing(providerBuilder =>
    {
        providerBuilder
            .AddAspNetCoreInstrumentation()
            .AddSignalRInstrumentation() // <- Add this!
            .AddOtlpExporter();
    });

Exception Handling

By setting the OnException option, you can override the attributes that this library writes by default. For example, when an exception occurs inside your SignalR hub method, this library sets the otel.status_code attribute to ERROR. However, there are cases where you do not want a specific exception to be ERROR. In that case, you can override the default attribute by setting it as follows.

builder.Services.AddSignalR()
    .AddHubInstrumentation(options =>
    {
        options.OnException = static (activity, exception) =>
        {
            if (exception is HubException)
            {
                activity.SetTag("otel.status_code", "OK");
            }
        };
    });

Example

The example code architecture is as follows.

graph LR;
    app[ASP.NET Core Server] --> otelc[OpenTelemetry Collector];
    otelc --> Tempo;
    Grafana --> Tempo;
Loading

The example code can be quickly executed from Visual Studio.

Docker

It can also be quickly executed from the CLI.

$ docker compose build
$ docker compose up

In Grafana, you can see the SignalR method call trace as follows.

Trace

Related Work