【问题标题】:Are EventCounters the standard way to expose metrics from .NET libraries?EventCounters 是从 .NET 库中公开指标的标准方法吗?
【发布时间】:2021-05-29 15:40:10
【问题描述】:

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

【问题讨论】:

    标签: c# .net open-telemetry


    【解决方案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");
    

    【讨论】:

    • 我不知道元数据,这太完美了?
    【解决方案2】:

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

    在此对话dotnet/designs/pull/211 中,我们可以看到现在首选指标而不是 EventCounters。

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

    请注意,System.Diagnostics.Metrics 可通过 Nuget System.Diagnostics.DiagnosticSource >= 6 用于 .NET verdie-g/modern-caching/src/ModernCaching/Instrumentation/OpenTelemetryCacheMetrics.cs。

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 2016-11-08
      • 2011-04-17
      • 2016-06-19
      • 2013-12-17
      • 2021-12-04
      • 2018-11-06
      • 2015-04-09
      • 2018-05-01
      相关资源
      最近更新 更多