C# 应用监控:指标、告警与高级实践

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

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

开始课程

引言:为什么 C# 应用监控是一门艺术

在现代 C# (.NET) 开发中,监控已不再仅仅是一个选项。它是生产环境的必备要素,不仅能够记录故障,还能预测故障。在高级层面,监控演变为一个早期预警系统:您不仅查看仪表板,还要基于复杂指标配置告警。

在本文中,我们将探讨如何超越标准的 CPU 和内存计数器。您将学习如何采集自定义业务指标、使用 Prometheus 和 Alertmanager 配置告警,以及利用 OpenTelemetry 进行链路追踪。所有示例均使用 C#。



1. 高级仪表化:App Metrics 与 Prometheus

1.1. 将 Prometheus 接入 ASP.NET Core

.NET 中的基础监控通常局限于内置的 PerformanceCounter。然而,对于微服务架构,Prometheus 已成为标准。安装包:

dotnet add package prometheus-net.AspNetCore

然后在 Program.cs 中添加中间件:

using Prometheus;

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

// 启用指标端点app.UseHttpMetrics();app.UseRouting();app.MapMetrics(); // /metrics

app.Run();

这将为您提供基础指标:请求数、持续时间、错误数。但对于高级层面来说,这还不够。



1.2. 自定义业务指标

假设您想追踪创建的订单数量或关键业务操作的执行时间。使用 Counter 和 Histogram:

using Prometheus;

public class OrderMetrics{ private static readonly Counter OrdersCreated = Metrics .CreateCounter("orders_created_total", "Total number of created orders");

private static readonly Histogram OrderProcessingTime = Metrics .CreateHistogram("order_processing_seconds", "Histogram of order processing time");

public void RecordOrderCreation(double elapsedSeconds) { OrdersCreated.Inc(); OrderProcessingTime.Observe(elapsedSeconds); }}

现在,您可以在任何服务中注入 OrderMetrics 并记录数据。这将使您能够在 Grafana 中构建精确到秒的仪表板。



2. 告警:从简单触发器到基于 SLO 的规则

2.1. 为 C# 指标配置 Alertmanager

采集指标只是成功的一半。另一半是告警。为 Prometheus 创建规则(alerts.yml):

groups:  - name: csharp_app_alerts    rules:      - alert: HighErrorRate        expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05        for: 2m        labels:          severity: critical        annotations:          summary: "C# 应用错误率过高"          description: "过去 5 分钟错误率为 {{ $value }}"

这是一个基础示例。在高级层面,应添加 SLO 告警。例如,如果 99% 的请求响应时间超过 200 毫秒,那就需要紧急处理。



2.2. 基于业务指标的告警

使用上一节中的自定义计数器。如果订单数量突然下降,说明出了问题:

      - alert: OrdersStopped        expr: rate(orders_created_total[10m]) == 0        for: 5m        labels:          severity: warning        annotations:          summary: "过去 10 分钟未创建订单"

这种告警无法从标准操作系统指标中获得——它需要对业务逻辑有深入理解。



3. OpenTelemetry:C# 中的分布式链路追踪

3.1. 集成 OpenTelemetry SDK

当您拥有 10 个 C# 微服务时,单独的指标无济于事。需要链路追踪。安装

博客

书籍推荐