入门指标 - 控制台
了解如何在 .NET 控制台应用程序中使用 OpenTelemetry 指标
本指南将在几分钟内向您展示如何在控制台应用程序中开始使用 OpenTelemetry .NET 指标。
先决条件
- 在您的计算机上安装了 .NET SDK
创建控制台应用程序
创建新的控制台应用程序并运行它
dotnet new console --output getting-started
cd getting-started
dotnet run
您应该会看到以下输出
Hello World!
添加 OpenTelemetry 指标
安装 OpenTelemetry Console Exporter 包
dotnet add package OpenTelemetry.Exporter.Console
使用以下代码更新 Program.cs 文件
using System;
using System.Diagnostics.Metrics;
using OpenTelemetry;
using OpenTelemetry.Metrics;
// Define a meter
private static readonly Meter MyMeter = new("MyCompany.MyProduct.MyLibrary", "1.0");
// Create a counter instrument
private static readonly Counter<long> MyFruitCounter = MyMeter.CreateCounter<long>("MyFruitCounter", "fruit", "Counts fruit by name and color");
// Configure the OpenTelemetry MeterProvider
using var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("MyCompany.MyProduct.MyLibrary")
.AddConsoleExporter()
.Build();
// Record some measurements
MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
MyFruitCounter.Add(1, new("name", "lemon"), new("color", "yellow"));
MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
MyFruitCounter.Add(5, new("name", "apple"), new("color", "red"));
MyFruitCounter.Add(4, new("name", "lemon"), new("color", "yellow"));
Console.WriteLine("Press any key to exit");
Console.ReadKey();
再次运行应用程序(使用 dotnet run),您应该会看到来自控制台的指标输出(程序结束时会看到指标),类似于下图所示
Export MyFruitCounter, Meter: MyCompany.MyProduct.MyLibrary/1.0
(2021-09-23T22:00:08.4399776Z, 2021-09-23T22:00:08.4510115Z) color:red name:apple LongSum
Value: 6
(2021-09-23T22:00:08.4399776Z, 2021-09-23T22:00:08.4510115Z) color:yellow name:lemon LongSum
Value: 7
(2021-09-23T22:00:08.4399776Z, 2021-09-23T22:00:08.4510115Z) color:green name:apple LongSum
Value: 2
恭喜!您现在正在使用 OpenTelemetry 收集指标。
工作原理
Meter
该程序创建一个名为“MyCompany.MyProduct.MyLibrary”的 Meter 实例。Meter 是创建指标仪表的入口点。
private static readonly Meter MyMeter = new("MyCompany.MyProduct.MyLibrary", "1.0");
计数器仪表
然后,它从 Meter 创建一个 Counter 仪表。Counter 用于测量非递减的值。
private static readonly Counter<long> MyFruitCounter = MyMeter.CreateCounter<long>("MyFruitCounter");
记录测量
Counter 用于报告具有不同属性组合的多个指标测量
MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
MeterProvider 配置
OpenTelemetry MeterProvider 配置为
- 订阅指定 Meter 的仪表
- 将指标导出到控制台
var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("MyCompany.MyProduct.MyLibrary")
.AddConsoleExporter()
.Build();
MeterProvider 在内存中聚合测量,默认基数限制为 2000 种属性组合。
处理高基数指标
如果您需要收集基数超过默认限制 2000 的指标,可以自定义基数限制
var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("MyCompany.MyProduct.MyLibrary")
.AddView(instrumentName: "MyFruitCounter", new MetricStreamConfiguration { CardinalityLimit = 10 })
.AddConsoleExporter()
.Build();
指标管道
OpenTelemetry .NET 中的指标管道遵循此流程
- 仪表记录测量
- MeterProvider 接收并聚合测量
- MetricReader 读取聚合的指标
- Exporter 将指标导出到后端
关于 OpenTelemetry .NET 的特别说明
OpenTelemetry .NET 中的指标实现方式有些独特,因为大多数 Metrics API 由 .NET 运行时本身实现。从高层次来看,这意味着您只需依赖 System.Diagnostics.DiagnosticSource 包即可为应用程序添加仪表。