Skip to content
This repository was archived by the owner on Oct 12, 2025. It is now read-only.
This repository was archived by the owner on Oct 12, 2025. It is now read-only.

[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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions