0

从 .NET Core 3 开始,.NET SDK 通过EventCounters公开指标。也可以实现自己的 EventCounter。因此,假设我正在.NET 中开发内存缓存客户端,通过 EventCounters 公开获取/设置指标是否有意义?另外,我注意到Well-known EventCounters都没有使用动态指标名称,例如memcache-{myMemcacheClusterName}-gets. 不推荐吗?

4

2 回答 2

1

因此,假设我正在.NET 中开发内存缓存客户端,通过 EventCounters 公开获取/设置指标是否有意义?

当然,您当然可以选择App Metrics之类的东西,但 EventCounters 的好处是它是 .Net 框架的一部分,因此不需要外部依赖项。编写库时很有吸引力的东西。

另外,我注意到 Well-known EventCounters 都没有使用动态指标名称,例如 memcache-{myMemcacheClusterName}-gets。不推荐吗?

动态计数器很难发现和记录(有哪些可能的值)。不过,它曾经是包含附加信息的唯一方法。也就是说,直到引入元数据。现在,您可以使用AddMetadata()向计数器添加其他信息:

EventCounter someCounter = new EventCounter(nameof(someCounter), this);
someCounter.AddMetadata("Environment", "Production");
someCounter.AddMetadata("SomeKey", "SomeValue");
于 2021-05-31T06:35:13.323 回答
0

随着 .NET 6 的发布,System.Diagnostics.Metrics包含了OpenTelemetry Metrics API的官方 .NET 实现。

在这个对话dotnet/designs/pull/211中,我们可以看到 Metrics 现在比 EventCounters 更受欢迎。

我们会建议继续使用 Metrics,但至少在此版本中我们不会弃用事件计数器。

请注意System.Diagnostics.Metrics通过 Nuget System.Diagnostics.DiagnosticSource >= 6 可用于 .NET < 6。这是一个示例:verdie-g/modern-caching/src/ModernCaching/Instrumentation/OpenTelemetryCacheMetrics.cs

于 2021-09-09T09:12:28.530 回答