0
点赞
收藏
分享

微信扫一扫

C# Prometheus

1. Prometheus 的作用

 Prometheus 是一个开源的系统监控和告警工具。它本质上是一个时序数据库,配合强大的查询语言 PromQL,可以让你对系统各项指标(如 CPU、内存、请求次数和延迟等)进行采集、存储和分析。

在 C# 应用中,结合开源的 prometheus-net 库,可以非常方便地暴露 HTTP Metrics 接口,供 Prometheus 服务端定期拉取(scrape)数据,实现:

  • 应用健康状况实时监控
  • 定制化业务指标上报
  • 自动化报警(搭配 Alertmanager)
  • 可视化仪表盘(如 Grafana)


2. 优缺点分析

优点

  • 标准化:Prometheus 已成为云原生领域事实标准,生态丰富。
  • 实时性强:采用 pull 模式,采集延迟较低。
  • 易集成:prometheus-net 等库封装简洁,支持 ASP.NET Core。
  • 可扩展性好:指标格式灵活,支持业务自定义。
  • 可视化强大:结合 Grafana 可以实现多维度可视化。

缺点

  • 对高吞吐写入支持有限:单机 Prometheus 在极大规模下有性能瓶颈。
  • 持久化有限:本地存储,超出保留周期数据自动丢弃,需配合远程存储。
  • 采集模式为“推”不方便:必须被动暴露接口,不适合被“防火墙”保护的内网或批量短命任务。
  • 告警配置偏重静态:规则多为 YAML 文件,需要额外运维。


3. 适用场景

  • 单体或多服务 C# API/微服务,需监控接口 QPS、延迟和资源使用。
  • 想统一纳管到 Prometheus 监控平台的.Net 服务。
  • 有业务侧自定义 Metrics 上报/告警需求,如订单量、支付成功率等。
  • 配合 Kubernetes、Docker 等容器平台时,轻松支持自动采集与监控。
    不适用的场景主要是高吞吐写入统计和对“事件流”而不是“指标”的监控。


4. C# 集成 Prometheus 示例代码

 下面以 ASP.NET Core WebAPI 为例,集成 prometheus-net 并暴露指标接口:

1. 安装依赖包

dotnetaddpackageprometheus-net.AspNetCore


2. 配置并使用中间件

在 Program.cs 文件中,继续完成对 Prometheus 的集成与典型业务指标的埋点示例:

usingMicrosoft.AspNetCore.Builder;  
usingMicrosoft.Extensions.DependencyInjection;  
usingPrometheus;  

varbuilder=WebApplication.CreateBuilder(args);  

// 注册 Prometheus 服务  
builder.Services.AddControllers();  

varapp=builder.Build();  

// 启用 Prometheus /metrics 暴露端点(默认路径为 /metrics)  
app.UseMetricServer();  

// 可选:采集请求级应用指标(如请求总数、处理时长等)  
app.UseHttpMetrics();  

// 示例业务 API  
app.MapGet("/hello", () =>  
{  
    return"Hello, Prometheus!";  
});  

// 业务自定义指标:计数器  
// 定义为全局静态变量,避免 GC 回收  
staticreadonlyCounterOrderCreatedCounter=Metrics.CreateCounter("order_created_total", "订单创建次数");  

app.MapPost("/order", () =>  
{  
    // ... 业务逻辑 ...  
    OrderCreatedCounter.Inc();  
    returnResults.Ok(new { Message="Order Created!" });  
});  

app.Run();

 这样,应用在运行后会自动启动一个 /metrics HTTP 端点,Prometheus 服务端可定期抓取(scrape)。默认情况下,/metrics 暴露了 HTTP 请求数、时延等基础指标。你可以按业务需要定义自定义指标(如上例的订单创建总数)。


3. Prometheus 服务端配置示例

 Prometheus 服务器端添加 job 抓取此 .NET 服务:

scrape_configs:  
  -job_name: 'my-dotnet-app'  
    static_configs:  
      -targets: ['localhost:5000']  #替换为你的服务地址和端口


4. 完善与扩展

你还可以根据需要定义 Histogram、Gauge 等其他类型的业务指标:

// 记录处理时间  
staticreadonlyHistogramProcessDuration=Metrics.CreateHistogram(  
    "order_process_duration_seconds",   
    "订单处理时长(秒)"  
);  
  
app.MapPost("/process", () =>  
{  
    using (ProcessDuration.NewTimer())  
    {  
        // 假设这里是长时间的业务处理  
        System.Threading.Thread.Sleep(500);  
        returnResults.Ok(new { Message="Processed!" });  
    }  
});


五、总结

 Prometheus 为 C# 应用提供了强大的监控能力,无论你是需要统计 HTTP 基础指标,还是希望上报业务自定义指标,都可以通过 prometheus-net 以最少的代码量实现。配合 Grafana,还能快速构建美观的数据可视化大屏,让监控不再是难事!  希望这篇文章能帮助你在 .NET 项目中顺利接入 Prometheus。如果有更多监控需求和问题,欢迎留言交流。 

参考资料:

  • prometheus-net 官方文档
  • Prometheus 官方文档
  • ASP.NET Core Metrics & Monitoring with Prometheus
举报

相关推荐

0 条评论