Metrics.Client 1.2.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Metrics.Client --version 1.2.0
                    
NuGet\Install-Package Metrics.Client -Version 1.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Metrics.Client" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Metrics.Client" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Metrics.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Metrics.Client --version 1.2.0
                    
#r "nuget: Metrics.Client, 1.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Metrics.Client@1.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Metrics.Client&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Metrics.Client&version=1.2.0
                    
Install as a Cake Tool

Metrics.Client

Lightweight Prometheus metrics for ASP.NET Core services. Auto-collects HTTP request duration, request count, and active requests with low-cardinality labels.

Quick Start

using Metrics.Client.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Add Prometheus metrics
builder.AddPrometheusMetrics(opts => opts.ServiceName = "MyService");

var app = builder.Build();

// Use Prometheus metrics middleware + /metrics endpoint
app.UsePrometheusMetrics();

await app.RunAsync();

Metrics Collected

Metric Type Labels Description
http_requests_total Counter service, method, endpoint, status_code Total HTTP requests processed
http_request_duration_seconds Histogram service, method, endpoint, status_code Request duration in seconds
http_requests_in_flight Gauge service Currently processing requests
canary_http_requests_total Counter service, method, status_code HTTP requests tagged as in-cluster E2E canary traffic

Canary traffic

canary_http_requests_total is a separate, low-cardinality counter for in-cluster E2E canary traffic (the X-Canary-Run-Id header + superUser JWT flow from Canary.AspNetCore). It is incremented only when the request was auth-validated as canary (ICanaryRunContext.IsCanary == true) — never on mere header presence.

It is deliberately a separate series rather than a canary label on http_requests_total (which would double that metric's series count), and deliberately omits the endpoint label to keep cardinality minimal.

This powers a Grafana "Canary Activity" dashboard and lets SLO dashboards default-exclude canary noise, e.g.:

# Real (non-canary) request rate per service
sum by (service) (rate(http_requests_total[5m]))
  - sum by (service) (rate(canary_http_requests_total[5m]))

Consuming services pick this up automatically — no wiring change is needed beyond the existing UsePrometheusMetrics() call, provided UseCanaryAuth() is registered after it (the standard pipeline order).

Configuration

Via appsettings.json:

{
  "Metrics": {
    "ServiceName": "MyService",
    "Enabled": true,
    "MetricsPath": "/metrics"
  }
}

Or programmatically:

builder.AddPrometheusMetrics(opts =>
{
    opts.ServiceName = "MyService";
    opts.Enabled = true;
});

Prometheus Scrape Config

scrape_configs:
  - job_name: 'my-service'
    static_configs:
      - targets: ['my-service:8080']
    metrics_path: /metrics

Design Decisions

  • Low cardinality: Uses route templates (not raw paths) for endpoint labels
  • Health/metrics excluded: Health check and metrics endpoints are not tracked to avoid noise
  • Lightweight: No-op overhead when requests hit excluded paths
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Metrics.Client:

Package Downloads
Bff.AspNetCore

Reusable Backend-For-Frontend engine for ASP.NET Core. Terminates auth server-side: holds OIDC tokens in a Redis-backed session, hands the browser only an opaque httpOnly cookie, and forwards Bearer tokens to downstream services via YARP. Provider-agnostic — targets Keycloak (default, realm-scoped) or a generic OpenIddict provider (/connect/*), selectable per app. Server-side ROPC (Keycloak) or authorization-code + PKCE, silent refresh with a per-session SETNX lock, and CSRF protection. A per-app BFF becomes a ~20-line Program.cs.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.1.0 133 8/23/2026
2.0.0 893 8/16/2026
1.2.1 245 7/19/2026
1.2.0 186 5/15/2026
1.1.0 110 5/6/2026