C# 应用程序监控:从 A 到 Z 的指标与告警

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么监控对 C# 应用程序至关重要



在现代软件开发中,编写代码只是工作的一半。为了确保应用程序稳定、快速且可预测地运行,持续监控是必不可少的。对于常用于高负载企业系统、银行业、电子商务和云服务的 C# (.NET) 应用程序而言,监控不仅仅是一个选项,而是一项强制性要求。



没有监控,您将盲目工作:内存泄漏直到服务器崩溃才被发现,慢请求不断累积,用户流失到竞争对手那里。在本文中,我们将详细介绍为 C# 应用程序配置可观测性 (observability) 的完整流程:从收集基本指标到配置实时智能告警。



1. 监控基础:在 .NET 中应收集哪些指标



在配置工具之前,了解哪些指标对 C# 应用程序真正重要至关重要。我们将它们分为三组:



1.1. 系统指标(基础设施层面)

  • CPU 和内存 — dotnet 进程的处理器负载和内存消耗。
  • GC(垃圾回收) — 垃圾回收的频率和持续时间,堆大小(Gen0、Gen1、Gen2、LOH)。
  • 线程池 — 活动、空闲和等待线程的数量。
  • 磁盘 I/O 和网络 — 磁盘读写、网络连接。


1.2. 业务指标(应用程序层面)

  • 请求速率 — 每秒请求数 (RPS)。
  • 延迟 — 响应时间(p50、p95、p99 百分位)。
  • 错误率 — 4xx 和 5xx 错误的百分比。
  • 活跃用户 — 同时工作的用户数量。


1.3. .NET 运行时指标

  • JIT 编译 — 方法编译时间。
  • 程序集加载 — 已加载程序集的数量。
  • 异常 — 每秒抛出的异常数量。


在 .NET 中,收集这些指标可以使用强大的工具——System.Diagnostics.Metrics(自 .NET 6+ 起的内置 API)和 OpenTelemetry 库。



2. 使用 OpenTelemetry 和 Prometheus 配置指标收集



组织 C# 应用程序监控的最佳方式是使用 OpenTelemetry(指标收集)+ Prometheus(存储)+ Grafana(可视化)的组合。让我们逐步进行配置。



2.1. 安装 NuGet 包

将以下包添加到项目中:

dotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCoredotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Instrumentation.Runtime


2.2. 在 Program.cs 中进行配置

配置 OpenTelemetry 以自动收集 ASP.NET Core 和 .NET Runtime 的指标:

using OpenTelemetry.Metrics;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .WithMetrics(metrics => metrics .AddAspNetCoreInstrumentation() // HTTP 请求指标 .AddRuntimeInstrumentation() // GC、JIT、ThreadPool 指标 .AddPrometheusExporter()); // 导出到 Prometheus

var app = builder.Build();

app.UseOpenTelemetryPrometheusScrapingEndpoint(); // /metrics 端点

app.Run();


现在,在 http://localhost:5000/metrics 地址上,将提供一个 Prometheus 格式的指标端点。



2.3. 创建自定义指标

让我们添加一个业务指标——已处理订单的计数器:

public class OrderMetrics\                

博客

书籍推荐