ASP.NET 7 使用 OpenTelemetry 与 SigNoz 实现分布式追踪与性能监控教程

作者:API传播员 · 2025-10-14 · 阅读时间:4分钟
本文详细介绍了如何在ASP.NET Core 7中集成OpenTelemetry与SigNoz,通过构建一个简单的REST API并添加OpenTelemetry埋点,将数据发送到SigNoz进行监控。文章涵盖了从环境准备、创建基础Web应用、添加OpenTelemetry支持到搭建SigNoz测试环境的完整流程,旨在帮助开发者快速定位性能瓶颈,提升系统的可靠性和用户体验。

一. OpenTelemetry 简介

OpenTelemetry 是一套工具、API 和 SDK 集合,用于生成、收集和导出遥测数据(指标、日志和追踪),帮助开发者分析软件性能与行为。

1. 典型应用场景

a. 多数据源服务性能分析

  • 测量每个 API 调用总耗时
  • 精确统计 SQL 查询和后端 REST API 调用耗时

b. 微服务架构性能监控

  • 结合分布式追踪快速定位性能瓶颈
  • 精确分析微服务调用链路

二. 环境准备

  1. 操作系统:本文基于 Ubuntu Linux,Windows 用户可使用 WSL2
  2. 工具与依赖:.NET 7 SDK
  3. 开发工具:Visual Studio 2022 或 VS Code
  4. 目标监控平台SigNoz

三. 创建基础 ASP.NET Core 7 Web 应用

1. 创建项目并添加响应模型

新建 Data.cs 文件,用于定义 API 响应模型。

2. 编辑 Program.cs 文件

app.MapGet("/hello", () => "Hello World!");

3. 构建并启动应用

  • 控制台显示监听地址,例如 http://localhost:5263
  • 使用浏览器或 curl 访问 /hello,返回“Hello World!”

四. 集成 OpenTelemetry

1. 安装依赖项

dotnet add package OpenTelemetry.Exporter.Console
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Instrumentation.AspNetCore --prerelease

2. 配置 OpenTelemetry

builder.Services.AddOpenTelemetryTracing(builder =>
{
    builder
        .AddAspNetCoreInstrumentation()
        .AddConsoleExporter();
});

3. 验证追踪信息

  • 重建并运行应用
  • 使用 curl 调用 /hello,控制台显示追踪日志

五. 搭建 SigNoz 测试环境

1. 部署 SigNoz

git clone https://github.com/SigNoz/signoz.git
cd signoz/deploy/
./install.sh

2. 访问控制台

  • 登录 http://localhost:3301/ 创建管理员账户
  • 查看 SigNoz 自身追踪数据

六. 配置 .NET 应用以使用 SigNoz

1. 修改导出器为 OTLPExporter

builder.Services.AddOpenTelemetryTracing(builder =>
{
    builder
        .AddAspNetCoreInstrumentation()
        .AddOtlpExporter(options =>
        {
            options.Endpoint = new Uri("http://localhost:4317");
        });
});

2. 压力测试 API

ab -n 1000 -c 10 http://localhost:5263/hello
  • SigNoz 显示 /hello 端点的追踪数据
  • 可分析平均响应时间与百分位

七. 模拟慢速后端 API

1. 创建 Service.cs 文件

public class SlowService
{
    private static readonly Random Random = new();
    public void SimulateDelay() => Thread.Sleep(Random.Next(100, 300));
}

2. 修改 Program.cs

var service = new SlowService();
app.MapGet("/hello", () =>
{
    service.SimulateDelay();
    return "Hello World!";
});

3. 验证效果

  • 使用 ab 工具压力测试
  • 响应时间在 100-300ms 波动,平均约 200ms

延迟图示
持续时间50百分位


八. 添加手动埋点

using var activity = MyActivitySource.StartActivity("SlowSleep");
service.SimulateDelay();
  • /helloSlowSleep 操作在 SigNoz 追踪页面显示
  • SlowSleep 稳定耗时 199-201ms
  • /hello 平均耗时略高 199-205ms

九. 总结

本文介绍了如何在 ASP.NET 7 中:

  1. 集成 OpenTelemetry
  2. 使用 SigNoz 实现分布式追踪与性能监控
  3. 添加慢速模拟与手动埋点优化监控数据
  4. 分析响应时间、百分位及操作耗时

OpenTelemetry 与 SigNoz 的结合,为单体或微服务应用提供可视化性能分析与快速故障定位能力。

原文链接: https://apatisandor.hu/blog/opentelemetry-dotnet-signoz/