You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.NET知名EventCounters暴露至Open Telemetry收集器

将EventCounters暴露给OpenTelemetry(Prometheus导出实现)

OpenTelemetry .NET SDK原生提供了EventCounters的采集能力,配合官方Prometheus导出器即可快速实现指标暴露,不需要额外第三方组件,具体实现步骤如下:

1. 安装依赖NuGet包

根据你的项目类型安装对应包:

# 通用核心依赖
dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Instrumentation.EventCounters

# ASP.NET Core项目用这个Prometheus导出器
dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore

# 非Web控制台/服务项目用这个Prometheus导出器
# dotnet add package OpenTelemetry.Exporter.Prometheus.HttpListener

2. 配置指标采集管道

ASP.NET Core 项目配置

在Program.cs中注册OpenTelemetry服务,并配置EventCounters采集规则和Prometheus导出端点:

var builder = WebApplication.CreateBuilder(args);

// 注册OpenTelemetry指标服务
builder.Services.AddOpenTelemetry()
    .WithMetrics(metrics =>
    {
        // 添加EventCounters采集器
        metrics.AddEventCounters(counterOptions =>
        {
            // 添加需要采集的EventSource名称,对应官方文档列出的知名计数器源
            // 常用系统预置源:
            counterOptions.EventSourceNames.Add("System.Runtime"); // 运行时CPU、内存、GC、线程等核心指标
            counterOptions.EventSourceNames.Add("Microsoft.AspNetCore.Hosting"); // ASP.NET Core请求指标
            counterOptions.EventSourceNames.Add("System.Net.Http"); // HttpClient出站请求指标
            
            // 可选:调整指标采集刷新间隔,单位秒,默认值为60
            counterOptions.RefreshIntervalSecs = 15;
        });

        // 添加Prometheus导出器
        metrics.AddPrometheusExporter();
    });

var app = builder.Build();

// 注册Prometheus抓取端点中间件,默认路径为/metrics
app.UseOpenTelemetryPrometheusScrapingEndpoint();

// 其余业务中间件配置...
app.Run();

非Web项目配置

如果是控制台或者后台服务,可以用HttpListener版本的Prometheus导出器直接暴露抓取端口:

using OpenTelemetry;
using OpenTelemetry.Metrics;

// 构建MeterProvider
using var meterProvider = Sdk.CreateMeterProviderBuilder()
    .AddEventCounters(counterOptions =>
    {
        counterOptions.EventSourceNames.Add("System.Runtime");
        counterOptions.RefreshIntervalSecs = 15;
    })
    .AddPrometheusHttpListener(listenerOptions =>
    {
        // 配置监听地址前缀和抓取路径
        listenerOptions.UriPrefixes = new[] { "http://*:9464/" };
        listenerOptions.ScrapeEndpointPath = "/metrics";
    })
    .Build();

// 保持程序运行
Console.WriteLine("Prometheus metrics endpoint live at http://localhost:9464/metrics");
Console.ReadKey();

3. 验证与对接

  • 启动应用后,访问配置的metrics端点,就能看到以ec_为前缀的EventCounters指标,指标名和官方列出的计数器一一对应
  • 直接配置Prometheus抓取该端点即可完成采集;如果需要对接OpenTelemetry Collector,既可以让Collector通过Prometheus receiver抓该端点,也可以把Prometheus导出器替换为OTLP导出器直接推送指标到Collector,EventCounters的采集配置不需要做任何修改

注意:请使用1.0及以上正式版本的OpenTelemetry.Instrumentation.EventCounters包,低版本预览包存在部分计数器名称映射错误、采集漏报的问题。如果是自定义EventSource实现的业务计数器,只需要把自定义EventSource的名称加入EventSourceNames列表即可自动采集导出,不需要额外适配。

内容的提问来源于stack exchange,提问作者Moose Morals

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:45:47