向 OpenTelemetry 指标添加全局属性

问题描述 投票:0回答:2

我正在使用 OpenTelemetry 的指标来获取有关我的环境的信息。

我有几个租户将使用 OpenTelemetry,并将全部引入 Prometheus,然后引入 Grafana。

我想通过添加一些标签/标签/属性来区分每一个。

我正在使用下面的配置,但是当我使用

UseOpenTelemetryPrometheusScrapingEndpoint
扩展方法公开 /metrics 端点时,该属性未显示。

    services.AddOpenTelemetry()
        .WithMetrics(opts =>
        {
            opts.ConfigureResource(resourceBuilder =>
                {
                    resourceBuilder.AddTelemetrySdk();
                    resourceBuilder.AddService(serviceName: "tenant_service_config");
                    resourceBuilder.AddAttributes(new Dictionary<string, object> { ["tenant_id"] = 2 });
                })
                .AddMeter(meters.MetricName)
                .AddAspNetCoreInstrumentation()
                .AddProcessInstrumentation()
                .AddRuntimeInstrumentation();

但是,如果我手动创建一个指标并添加标签,它确实会显示在 /metrics 端点中

_userLoginCounter.Add(1, new KeyValuePair<string, object>("tenant.id", tenantId));

c# .net metrics open-telemetry
2个回答
0
投票
  1. 检查配置是否正确:所需的 OpenTelemetry、Prometheus 和 ASP.NET Core 包已安装并配置正确。

  2. 为每个指标添加标签

  3. 使用 MeterProvider 设置默认标签

services.AddOpenTelemetryMetrics(builder =>
{
    builder.ConfigureResource(resourceBuilder =>
    {
        resourceBuilder.AddTelemetrySdk();
        resourceBuilder.AddService("tenant_service_config");
    })
    .AddMeter("YourMeterName")
    .AddAspNetCoreInstrumentation()
    .AddProcessInstrumentation()
    .AddRuntimeInstrumentation()
    .AddPrometheusExporter(options =>
    {
        options.StartHttpListener = true;
        options.HttpListenerPrefixes = new string[] { "http://localhost:9464/" };
    });

    builder.AddView(instrument =>
    {
        return new MetricStreamConfiguration
        {
            TagKeys = new string[] { "tenant_id" },
            TagValues = new string[] { "2" }
        };
    });
});

手动为指标添加标签:如果您想在创建指标时手动添加标签,可以这样做:

var counter = meter.CreateCounter<long>("user_login_count");

counter.Add(1, new KeyValuePair<string, object>("tenant_id", 2));

0
投票

资源属性似乎没有正确附加到指标。

services.AddOpenTelemetry()
    .WithMetrics(opts =>
    {
        opts.ConfigureResource(resourceBuilder =>
            {
                resourceBuilder.AddTelemetrySdk();
                resourceBuilder.AddService(serviceName: "tenant_service_config");
                resourceBuilder.AddAttributes(new Dictionary<string, object> { ["tenant_id"] = "2" }); // Make sure the tenant_id is a string
            })
            .AddMeter(meters.MetricName)
            .AddAspNetCoreInstrumentation()
            .AddProcessInstrumentation()
            .AddRuntimeInstrumentation();

        opts.AddPrometheusExporter(); // Ensure Prometheus Exporter is added
    });

// Expose the Prometheus metrics endpoint
app.UseOpenTelemetryPrometheusScrapingEndpoint();

在此配置中:

  • 确保
    tenant_id
    添加为字符串属性。
  • 将 PrometheusExporter 添加到 OpenTelemetry 指标配置中。
  • 确保使用
    UseOpenTelemetryPrometheusScrapingEndpoint
    公开 Prometheus 指标端点。

接下来验证您的tenant_id属性是否在自定义指标中正确定义和使用。

var meter = new Meter("MyApp.Metrics", "1.0");
var loginCounter = meter.CreateCounter<int>("user_logins");

loginCounter.Add(1, new KeyValuePair<string, object>("tenant_id", "2"));

此处,

tenant_id
属性直接添加到自定义指标中。我们需要确保tenant_id与您的资源属性中使用的格式匹配。

© www.soinside.com 2019 - 2024. All rights reserved.