Skip to content

遥测与 OpenTelemetry ​

更新: 2026-10-16 15:20:09   字数: 0 字   时长: 0 分钟

Aspire 的「可观测性层」这部分能力建立在 OpenTelemetry 之上。理解下面这条链路,就能理解 Aspire 里遥测是怎么流动的:

text
应用(OTel SDK) ──OTLP──► Aspire 仪表板(内存存储) ──► 仪表板 UI / Aspire CLI / MCP

三个信号 ​

信号英文说明
追踪Traces一次请求跨多个服务的完整调用链。
指标Metrics计数器、直方图等数值型度量。
日志Logs结构化日志,可与追踪关联。

应用侧:接入 OpenTelemetry ​

ASP.NET Core 项目通过 ServiceDefaults 一次性完成接入,无需在业务项目里重复配置:

csharp
builder.AddServiceDefaults();

ConfigureOpenTelemetry 做了这些事:

  • 注册 OpenTelemetry 的日志、指标、追踪。
  • 为 ASP.NET Core、HttpClient、运行时与运行时指标添加自动插桩。
  • 根据环境变量决定导出目标。

非 .NET 服务怎么办?

Node.js、Python 等语言使用各自官方的 OpenTelemetry SDK,配置相同的 OTLP 端点即可,Aspire 会一并接收。详见独立运行仪表板。

环境变量 ​

OpenTelemetry 有一套标准的已知环境变量。Aspire 项目启动时会自动设置其中最关键的几个:

text
OTEL_SERVICE_NAME=myfrontend
OTEL_RESOURCE_ATTRIBUTES=service.instance.id=1a5f9c1e-e5ba-451b-95ee-ced1ee89c168
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
变量作用
OTEL_SERVICE_NAME服务名称,出现在仪表板与追踪中。
OTEL_RESOURCE_ATTRIBUTES资源属性,例如实例 ID。
OTEL_EXPORTER_OTLP_ENDPOINTOTLP 导出端点,指向仪表板启动的 HTTP/2 端口。

这些变量在本地开发时自动注入,您通常不需要手工设置。

本地开发的工作流 ​

用 F5 或 aspire run 启动项目时,发生的过程如下:

  1. 仪表板与 DCP 启动:Aspire 仪表板与开发控制平面(DCP)先启动。
  2. 执行 App 配置:AppHost 完成配置——
    • 自动为 .NET 项目添加 OpenTelemetry 环境变量。
    • DCP 为导出遥测提供 OTEL_SERVICE_NAME 与 OTEL_RESOURCE_ATTRIBUTES。
    • OTLP 端点是仪表板启动的 HTTP/2 端口,写入 OTEL_EXPORTER_OTLP_ENDPOINT。
    • 使用较短的导出间隔(OTEL_BSP_SCHEDULE_DELAY、OTEL_BLRP_SCHEDULE_DELAY、OTEL_METRIC_EXPORT_INTERVAL),让数据尽快出现在仪表板上。
  3. 资源启动:DCP 启动配置好的项目、容器与可执行文件。
  4. 遥测流动:应用开始向仪表板发送遥测数据。
  5. 仪表板展示:仪表板近乎实时地显示所有 Aspire 项目的遥测。

以上步骤都是自动完成的,绝大多数情况下您只需要运行应用。

用 CLI 查询遥测 ​

除了仪表板 UI,也可以用命令行检索同一批数据:

bash
aspire otel logs      # 结构化日志
aspire otel traces    # 分布式追踪
aspire otel spans     # 跨度明细
aspire export         # 把遥测与资源数据打包为 zip

加上 --format Json 可获得便于脚本处理的结构化输出。

为 AI 编码代理准备

AI 编码代理可以通过相同的数据诊断问题。典型工作流是:aspire start 启动 → aspire wait 等待资源 → 查询遥测定位问题 → 验证修复。这是对应用的观测,不是对代理推理过程或 Token 用量的监控。

导出到其他后端 ​

本地开发默认导出到仪表板。如果想同时送到 Seq、Grafana、Jaeger 等平台,可以在 AppHost 中声明对应的集成并让服务引用它:

csharp
var seq = builder.AddSeq("seq");

builder.AddProject<Projects.Api>("api")
    .WithReference(seq);

被引用的可观测性资源会通过服务发现把 OTLP 端点注入到服务中。

部署后的遥测 ​

部署环境应当配置符合自身情况的 OpenTelemetry 环境变量,例如把 OTEL_EXPORTER_OTLP_ENDPOINT 指向该环境的 OTLP 收集器或监控服务。

未配置就不导出

如果没有配置 OTEL_EXPORTER_OTLP_ENDPOINT,OTLP 导出会被禁用。

部署完成后,如果希望继续观察,可以把应用的遥测指向一个独立运行的仪表板实例,详见独立运行仪表板。

相关阅读 ​

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度