C# 应用程序监控:.NET 中的指标与告警

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

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

开始课程

引言:为何要监控 C# 应用程序

在 .NET 平台上,现代 C# 应用程序是在高负载下运行的复杂分布式系统。若缺乏有效的监控,您可能会面临性能下降、内存泄漏或严重故障的风险。监控不仅能帮助发现问题,更能预警问题,从而及时响应异常情况。

本文将介绍如何使用现代工具:Prometheus、Grafana、Serilog 以及内置的 Health Checks,为 C# (.NET) 应用程序搭建指标收集、日志记录和告警系统。您将获得可直接运行的代码示例和实用建议。



C# (.NET) 应用程序的关键指标

监控始于定义关键指标。对于 .NET 应用程序,这些指标可分为三类:

  • 基础设施指标 — CPU、内存、磁盘和网络使用率。
  • 应用指标 — API 响应时间、请求数量、错误数(4xx/5xx)、队列长度。
  • .NET 特有指标 — GC 堆大小、线程数、垃圾回收时间、数据库连接数。


通过 Prometheus 和 .NET 收集指标

要导出指标到 Prometheus,请使用 prometheus-net 库。通过 NuGet 安装:

dotnet add package prometheus-net.AspNetCore

在 Program.cs 中添加中间件:

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

// 启用 Prometheus 指标app.UseHttpMetrics(); // HTTP 指标app.UseMetricServer(); // /metrics 端点

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

现在,标准指标将在 /metrics 端点可用:请求数量、持续时间、错误数。让我们添加一个自定义指标——记录端点访问次数的计数器:

using Prometheus;

var requestCounter = Metrics.CreateCounter( "myapp_requests_total", "对端点的总请求数");

app.MapGet("/api/data", () => { requestCounter.Inc(); return new { Message = "数据已加载" };});


健康检查:基础状态验证

.NET 内置的健康检查机制允许您快速评估应用程序的健康状况。添加一个数据库连接检查:

using Microsoft.Extensions.Diagnostics.HealthChecks;

builder.Services.AddHealthChecks() .AddDbContextCheck<AppDbContext>() .AddUrlGroup(new Uri("https://external-api.com"), "外部 API");

app.MapHealthChecks("/health");

健康检查会返回 Healthy、Degraded 或 Unhealthy 状态——这非常适合作为告警来源。



使用 Serilog 进行日志记录:结构化日志

日志是诊断的关键数据源。Serilog 允许您将日志以结构化格式发送到 Elasticsearch、Seq,或简单地保存到文件。

安装过程:

dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.Seq

在 Program.cs 中进行配置:

Log.Logger = new LoggerConfiguration()    .MinimumLevel.Information()    .WriteTo.Console()    .WriteTo.Seq("http://localhost:5341")    .Enrich.WithProperty("Application", "MyApp")    .CreateLogger();

builder.Host.UseSerilog();

现在所有日志将包含上下文信息:RequestId、UserId、执行时间。错误日志示例:

try {    // 危险代码} catch (Exception ex) {    Log.Error(ex, "处理订单 {OrderId} 时出错", orderId);}

结构化日志便于在 Grafana 或 Kibana 中分析、构建

博客

书籍推荐