TelemetryCore 1.0.0
dotnet add package TelemetryCore --version 1.0.0
NuGet\Install-Package TelemetryCore -Version 1.0.0
<PackageReference Include="TelemetryCore" Version="1.0.0" />
<PackageVersion Include="TelemetryCore" Version="1.0.0" />
<PackageReference Include="TelemetryCore" />
paket add TelemetryCore --version 1.0.0
#r "nuget: TelemetryCore, 1.0.0"
#:package TelemetryCore@1.0.0
#addin nuget:?package=TelemetryCore&version=1.0.0
#tool nuget:?package=TelemetryCore&version=1.0.0
TelemetryCore.Contracts ๐ก๐
Contracts and helpers for emitting consistent monitoring telemetry from systems to Prometheus/Grafana.
- ๐ฆ NuGet-friendly multi-target package
- โ๏ธ Consistent envelope: identity + health + flexible Gauges/Counters/Tags
- ๐งพ JSON facade: System.Text.Json on modern TFMs, Newtonsoft.Json for legacy
- ๐ฅ๏ธ Demo web app included (net8) exposing /healthz and /metrics
What is this?
A tiny, transport-agnostic contract and helpers so multiple bespoke monitors emit the same telemetry shape:
- StatsEnvelopeV1: identity + health + flexible Gauges/Counters/Tags
- StatsSerializer: JSON facade (net6/net8: System.Text.Json; net472/netstandard2.0: Newtonsoft.Json)
- PrometheusWriter: renders envelopes to Prometheus text exposition format
Targets: net472, netstandard2.0, net6.0, net8.0.
Quick start ๐
var now = DateTime.UtcNow;
var e = new TelemetryCore.Contracts.StatsEnvelopeV1
{
System = "MessageBus",
Env = "DEV",
Instance = "P01",
Host = Environment.MachineName,
Version = "1.2.3",
Utc = now,
HealthStatus = 1.0
};
e.Gauges["messagebus_queue_depth"] = 42;
e.Counters["messagebus_messages_total"] = 1000;
// JSON
var json = TelemetryCore.Contracts.StatsSerializer.ToJson(e);
// Prometheus text (single or multiple envelopes)
var text = TelemetryCore.Contracts.PrometheusWriter.Write(new[] { e });
Prometheus exposition ๐
- Content-Type:
text/plain; version=0.0.4; charset=utf-8 - Labels on every sample:
system,env,instance(empty โก๏ธdefault),host,version - Known metrics:
system_health_status(gauge),heartbeat_age_seconds(gauge, derived fromUtc) - Naming rules: counters end with
_total(userate()/increase()), units use_seconds,_bytes - Generic names are prefixed if you don't follow rules: gauges โก๏ธ
generic_gauge_*, counters โก๏ธgeneric_counter_*_total - Metric/label values are escaped per Prometheus text format spec
Minimal HTTP exposure examples ๐
- net472: host with
HttpListenerand writePrometheusWriter.Write(...)to/metrics - net6/8: host with Kestrel (Minimal API) and return text with the content type above
A ready-to-run demo site is included:
- Project:
TelemetryCore.DemoWeb(net8.0) - Endpoints:
/healthzand/metricson port 9000
NuGet package ๐ฆ
- Multi-targets: net472, netstandard2.0, net6.0, net8.0
- Serializer: Newtonsoft.Json for net472/netstandard2.0; System.Text.Json for net6/net8
- XML docs included for IntelliSense
- Package readme, license, and icon are included
Versioning and compatibility ๐
- Schema version is additive (see
SchemaVersioninStatsEnvelopeV1) - Consumers should tolerate unknown fields for forward compatibility
Contributing ๐ค
Issues and PRs are welcome. Keep the envelope stable and additive. For new metrics:
- Prefer snake_case
- Units in names (
_seconds,_bytes) - Counters end with
_total
License โ๏ธ
MIT License โก๏ธ see LICENSE in the package/repo.
Attribution ๐
- Author: Sean Fellowes (https://github.com/SeanFellowes)
- Assisted by: GPT-5 via GitHub Copilot
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7.2
- Newtonsoft.Json (>= 13.0.3)
-
.NETStandard 2.0
- Newtonsoft.Json (>= 13.0.3)
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
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 |
|---|---|---|
| 1.0.0 | 327 | 9/16/2025 |
See RELEASE_NOTES.md in the package for detailed changes.