CSharpEssentials.LoggerHelper.Telemetry 4.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package CSharpEssentials.LoggerHelper.Telemetry --version 4.0.0
                    
NuGet\Install-Package CSharpEssentials.LoggerHelper.Telemetry -Version 4.0.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="CSharpEssentials.LoggerHelper.Telemetry" Version="4.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CSharpEssentials.LoggerHelper.Telemetry" Version="4.0.0" />
                    
Directory.Packages.props
<PackageReference Include="CSharpEssentials.LoggerHelper.Telemetry" />
                    
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 CSharpEssentials.LoggerHelper.Telemetry --version 4.0.0
                    
#r "nuget: CSharpEssentials.LoggerHelper.Telemetry, 4.0.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 CSharpEssentials.LoggerHelper.Telemetry@4.0.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=CSharpEssentials.LoggerHelper.Telemetry&version=4.0.0
                    
Install as a Cake Addin
#tool nuget:?package=CSharpEssentials.LoggerHelper.Telemetry&version=4.0.0
                    
Install as a Cake Tool

CSharpEssentials.LoggerHelper.Sink.Telemetry

๐Ÿ“‘ Table of Contents <a id='table-of-contents'></a>

  • ๐Ÿš€Installation
  • ๐Ÿ”งConfiguration
  • ๐Ÿ“Š What It Does(#whatitdoes)
  • ๐Ÿ“Š Custom Metrics(#custommetrics)
  • ๐Ÿงต Traces (activities, spans)
  • ๐Ÿ“˜ Logs (linked by trace_id)

Plug-and-play extension that integrates Serilog and OpenTelemetry with direct PostgreSQL export of:

๐Ÿ“ฆ Installation<a id='installation'></a> ๐Ÿ”

dotnet add package CSharpEssentials.LoggerHelper.Sink.Telemetry

โš™๏ธ Configuration<a id='configuration'></a> ๐Ÿ”

In your Program.cs (or Startup.cs for older .NET versions), register the telemetry system:

builder.Services.AddLoggerTelemetry(builder);

Then add the following configuration file appsettings.LoggerHelper.json:

"Serilog": {
  "SerilogConfiguration": {
    "LoggerTelemetryOptions": {
      "IsEnabled": true,
      "ConnectionString": "Host=localhost;Database=metrics_db;Username=user;Password=pass"
    }
  }
}

๐Ÿš€ What It Does<a id='whatitdoes'></a> ๐Ÿ”

๐Ÿ”ง LoggerTelemetryBuilder

This method wires up:

  • TelemetriesDbContext (EF Core)
  • OpenTelemetryMeterListenerService
  • ASP.NET + HttpClient instrumentation
  • Runtime + custom metrics
  • Exporters: PostgreSQL and console

๐Ÿ“ก PostgreSqlMetricExporter

Stores each OpenTelemetry metric as a MetricEntry in PostgreSQL, capturing:

  • Name
  • Value
  • Timestamp
  • TraceId
  • TagsJson (all tags serialized)

๐Ÿงต PostgreSqlTraceExporter

Captures every Activity and saves it as a TraceEntry.


โœจ Custom Metrics<a id='custommetrics'></a> ๐Ÿ”

The package includes:

  • GaugeWrapper โ†’ create observable gauges easily
  • Predefined metrics:
    • memory_used_mb
    • postgresql.connections.active
    • ...and extendable via CustomMetrics

๐ŸŒ Public API Controller

A built-in controller TelemetryPublicApi.cs exposes:

  • GET /api/TelemetryPublicApi/metrics
  • Easily extendable to /traces, /errors, /health, etc.

๐Ÿงช Minimal Example

var meter = new Meter("CustomApp");
meter.CreateObservableGauge("app.threads.count", () => ThreadPool.ThreadCount);

app.MapGet("/", () => "Hello LoggerHelper!");

๐Ÿง  Internals Explained โ€“ Trace Correlation Middleware

๐Ÿ”— TraceIdPropagationMiddleware

This middleware is the core of trace correlation within the LoggerHelper.Telemetry package.
It ensures every incoming HTTP request has its TraceId consistently injected into:

  • Traces (Activity) via SetTag("trace_id", ...)
  • Metrics via OpenTelemetry Baggage.SetBaggage(...)
  • Logs (if using the ILogTraceContext<T> implementation)
var traceId = Activity.Current?.TraceId.ToString();
activity.SetTag("trace_id", traceId);
Baggage.SetBaggage("trace_id", traceId);

โœ… Why it matters

  • Makes traces easily searchable by trace_id
  • Allows metrics to be filtered or grouped by trace_id (e.g. request duration, memory usage)
  • Enables logs to be enriched with trace context, allowing full end-to-end observability

๐Ÿ“ˆ Result

All telemetry signals โ€“ logs, metrics, traces โ€“ share a common trace_id.
This makes it easy to:

  • Debug distributed flows
  • Visualize latency and performance breakdowns
  • Cross-navigate from a log to its metric to its trace

๐Ÿ“ˆ Dashboard (Roadmap)

Coming soon:

  • ๐Ÿ“Š React dashboard (HangFire-style)
  • โฐ Alert system via BackgroundService
  • ๐Ÿ” Query by trace_id, name, tag, and more

๐Ÿ“ Project Structure

EF/
โ”œโ”€ Data/
โ”‚  โ””โ”€ TelemetriesDbContext.cs
โ”œโ”€ Models/
โ”‚  โ””โ”€ MetricEntry.cs / TraceEntry.cs

Custom/
โ”œโ”€ CustomMetrics.cs
โ”œโ”€ GaugeWrapper.cs

Controllers/
โ”œโ”€ TelemetryPublicApi.cs

LoggerTelemetryBuilder.cs
PostgreSqlMetricExporter.cs
PostgreSqlTraceExporter.cs

โœ… Contributions

Pull requests are welcome. Feel free to fork, enhance, and open issues!

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
4.0.11 155 10/10/2025
4.0.10 172 10/6/2025
4.0.9 160 10/5/2025
4.0.8 160 10/5/2025
4.0.7 158 10/3/2025
4.0.6 134 10/3/2025
4.0.5 126 9/27/2025
4.0.3 257 9/15/2025
4.0.2 140 9/13/2025
4.0.0 307 8/25/2025
1.0.0 162 5/17/2025