CSharpEssentials.LoggerHelper.Telemetry
4.0.0
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
<PackageReference Include="CSharpEssentials.LoggerHelper.Telemetry" Version="4.0.0" />
<PackageVersion Include="CSharpEssentials.LoggerHelper.Telemetry" Version="4.0.0" />
<PackageReference Include="CSharpEssentials.LoggerHelper.Telemetry" />
paket add CSharpEssentials.LoggerHelper.Telemetry --version 4.0.0
#r "nuget: CSharpEssentials.LoggerHelper.Telemetry, 4.0.0"
#:package CSharpEssentials.LoggerHelper.Telemetry@4.0.0
#addin nuget:?package=CSharpEssentials.LoggerHelper.Telemetry&version=4.0.0
#tool nuget:?package=CSharpEssentials.LoggerHelper.Telemetry&version=4.0.0
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:
NameValueTimestampTraceIdTagsJson(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_mbpostgresql.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) viaSetTag("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 | Versions 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. |
-
net8.0
- CSharpEssentials.LoggerHelper (>= 4.0.0)
- Google.Protobuf (>= 3.31.0)
- Microsoft.EntityFrameworkCore (>= 9.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.5)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 9.0.4)
- OpenTelemetry.Exporter.Console (>= 1.12.0)
- OpenTelemetry.Exporter.OpenTelemetryProtocol (>= 1.12.0)
- OpenTelemetry.Extensions.Hosting (>= 1.12.0)
- OpenTelemetry.Instrumentation.AspNetCore (>= 1.12.0)
- OpenTelemetry.Instrumentation.Http (>= 1.12.0)
- OpenTelemetry.Instrumentation.Runtime (>= 1.12.0)
- OpenTelemetry.Instrumentation.SqlClient (>= 1.12.0-beta.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.