使用 AppMetrics 监控 C# (.NET) 应用程序

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

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

开始课程

用于监控 C# (.NET) 应用程序的 AppMetrics 库



在开发现代 .NET 应用程序时,跟踪其状态、性能并识别瓶颈至关重要。AppMetrics 库是一个强大且灵活的工具,用于实时收集、聚合和导出指标。它使开发人员和管理员能够全面了解服务的运行情况:从请求执行时间到错误频率。



AppMetrics 支持多种指标存储后端:Prometheus、InfluxDB、Graphite、Elasticsearch 等。借助内置的 健康检查,您不仅可以收集统计数据,还可以检查依赖项(数据库、外部 API)的运行状况。



主要功能

  • 计数器 (Counters) — 请求、错误、事件的数量。
  • 直方图 (Histograms) — 操作执行时间的分布。
  • 计时器 (Timers) — 测量代码执行持续时间。
  • 计量器 (Meters) — 每秒事件速率。
  • 健康检查 (Health Checks) — 检查外部服务的可用性。
  • 指标导出 — 导出到 Prometheus(/metrics 格式)、InfluxDB 等。


安装与配置

通过 NuGet 安装包:

dotnet add package AppMetrics.AspNetCore.Mvcdotnet add package AppMetrics.Reporting.Prometheus.Client


然后在 Program.cs(或 Startup.cs)中添加服务:

using App.Metrics;using App.Metrics.AspNetCore;using App.Metrics.Formatters.Prometheus;

var builder = WebApplication.CreateBuilder(args);

// 配置指标var metrics = AppMetrics.CreateDefaultBuilder() .OutputMetrics.AsPrometheusPlainText() .Build();

builder.Services.AddMetrics(metrics);builder.Services.AddMetricsTrackingMiddleware();builder.Services.AddMetricsEndpoints();

var app = builder.Build();

app.UseMetricsAllMiddleware();app.UseMetricsAllEndpoints();

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

app.Run();


启动应用程序后,指标将在 /metrics 地址以 Prometheus 格式提供。



创建自定义指标

定义一个用于存储指标的类:

public class MyMetrics{    private readonly IMetrics _metrics;

public MyMetrics(IMetrics metrics) { _metrics = metrics; }

// 请求计数器 private readonly CounterOptions _requestCounter = new CounterOptions { Name = "myapp_requests_total", MeasurementUnit = Unit.Requests };

// 用于测量执行时间的计时器 private readonly TimerOptions _requestTimer = new TimerOptions { Name = "myapp_request_duration_seconds", MeasurementUnit = Unit.Requests, DurationUnit = TimeUnit.Seconds };

public void TrackRequest() { _metrics.Measure.Counter.Increment(_requestCounter); }

public IDisposable MeasureRequestDuration() { return _metrics.Measure.Timer.Time(_requestTimer); }}


在控制器中使用指标:

[ApiController][Route("api/[controller]")]public class SampleController : ControllerBase{    private readonly MyMetrics _myMetrics;

public SampleController(MyMetrics myMetrics) { _myMetrics = myMetrics; }

[HttpGet] public IActionResult Get() { _myMetrics.TrackRequest();

using (_myMetrics.MeasureRequestDuration()) { // 模拟工作 Thread.Sleep(100); }

return Ok("Metrics tracked"); }}


健康检查

推荐