Skip to content

[Feature Request]: 为 Lagrange.Core 添加可观测性支持 #890

@bsdayo

Description

@bsdayo

Lagrange项目

Core

新需求内容

因最近有这方面需求想讨论一下。在维护人员认为合适的前提下,我可以负责添加此功能并提交 PR。

What

可观测性(Observability)包含指标(Metrics)、日志(Logging)、追踪(Tracing)三个部分,其中日志很好理解且 Lagrange.Core 已经拥有。

Metrics 就是简单的数据:例如可以存在指标 lagrange.received_messages,值为 114,代表此次运行至今总共接收到了 114 条消息。其中可以添加各种 tag,例如 {type="group"}{type="friend"}

Tracing 展示了每个操作的用时及分布情况,可以参考下图:

Image

Why

  • 添加可观测性相关设施,在不会影响当前已有用户的前提下,能满足有 monitor 相关需求的用户
  • 标准库自带相关类,无需添加第三方 NuGet 包

How

.NET 的标准库中自带 System.Diagnostics.Metrics.MeterSystem.Diagnostics.ActivitySource 两个类,分别对应 Metrics 和 Tracing 两个概念。

微软官方文档:Metrics Tracing

TL;DR:

Metrics

可以添加在各种可以计数的地方

var meter = new Meter("Lagrange.Core");
var counter = meter.CreateCounter<long>("lagrange.received_messages");

// After receiving a message
counter.Add(1);

Tracing

可以添加在各种异步耗时操作的方法体内

var source = new ActivitySource("Lagrange.Core");

var activity = source.StartActivity(/* [CallerMemberName] string name */);

// Do some work
// Duration inside the StartActivity/Dispose will be tracked

activity?.Dispose();

收集

对于 Lagrange.Core 这个 Library 而言,其实不用关心收集观测信息的问题,只需要产出即可。使用者可以自行通过 OpenTelemetry 等方式进行收集。


如果有需要补充的信息请指出,我会尽量完善

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions