基于OpenTelemetry在.NET API中集成主机CPU、RAM指标
能否用OpenTelemetry采集.NET环境下的主机CPU、RAM指标?
完全可以通过OpenTelemetry实现主机(及进程级)的CPU、RAM使用率指标采集,核心依赖官方提供的运行时与进程探测工具包,下面是具体实现指引:
1. 安装必要的NuGet包
需要安装以下核心包:
OpenTelemetry:核心SDKOpenTelemetry.Extensions.Hosting:集成.NET主机服务OpenTelemetry.Instrumentation.Runtime:采集.NET进程的运行时指标(含进程级CPU、内存)OpenTelemetry.Instrumentation.Process:采集进程相关的系统级指标(补充主机级CPU、内存视角)- 可选:
OpenTelemetry.Exporter.Prometheus:将指标暴露为Prometheus可抓取的格式
安装命令示例:
dotnet add package OpenTelemetry dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Instrumentation.Runtime dotnet add package OpenTelemetry.Instrumentation.Process dotnet add package OpenTelemetry.Exporter.Prometheus
2. 配置OpenTelemetry指标采集
在Program.cs中添加OpenTelemetry服务配置,启用Runtime和Process的指标采集:
using OpenTelemetry.Metrics; var builder = WebApplication.CreateBuilder(args); // 配置OpenTelemetry指标服务 builder.Services.AddOpenTelemetry() .WithMetrics(metrics => { // 启用进程运行时指标采集(CPU使用率、内存分配、GC等) metrics.AddRuntimeInstrumentation(); // 启用系统进程指标采集(主机CPU使用率、物理内存占用等) metrics.AddProcessInstrumentation(); // 可选:添加Prometheus导出器,暴露指标端点 metrics.AddPrometheusExporter(); }); var app = builder.Build(); // 可选:启用Prometheus指标抓取端点(默认路径/metrics) app.UseOpenTelemetryPrometheusScrapingEndpoint(); app.MapGet("/", () => "Hello World!"); app.Run();
3. 核心指标说明
启用后可获取以下关键指标:
- CPU相关:
process.cpu.utilization:当前进程的CPU使用率(取值0-1)system.cpu.utilization:主机的整体CPU使用率
- 内存相关:
process.memory.usage:当前进程的物理内存占用量process.memory.virtual:进程的虚拟内存大小runtime.memory.heap.size:.NET堆内存大小
4. 验证与调试
启动API后,访问http://localhost:<端口>/metrics(若启用Prometheus导出器),可直接查看采集到的所有指标数据。也可搭配OpenTelemetry Collector将指标发送至Grafana、Jaeger等平台进行可视化分析。
注意事项
OpenTelemetry.Instrumentation.Process依赖系统底层性能计数器(Windows)或proc文件系统(Linux/macOS),需确保运行环境有足够权限读取这些数据。- 仅需进程级指标时,单独启用
AddRuntimeInstrumentation()即可;需主机级整体指标,必须添加AddProcessInstrumentation()。
内容的提问来源于stack exchange,提问作者DZziMD
相关产品推荐
相关产品推荐

