日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET 6 全新指标 System.Diagnostics.Metrics 介绍

發(fā)布時(shí)間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 6 全新指标 System.Diagnostics.Metrics 介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

工友們, .NET 6 Preview 7 已經(jīng)在8月10號(hào)發(fā)布了, 除了眾多的功能更新和性能改進(jìn)之外, 在 preview 7 版本中, 也新增了全新的指標(biāo)API,?System.Diagnostics.Metrics, 為了讓應(yīng)用能有更好的可觀測性, 在之前的發(fā)布的.NET 5中, 也把 Activity 增強(qiáng)為 ActivitySource, 主要原因還是 .NET 運(yùn)行時(shí)團(tuán)隊(duì)和 OpenTelemetry .NET SIG 進(jìn)行了深度合作, 并且一起制定了 OpenTelemetry .NET 指標(biāo)計(jì)劃。

Metric support plans[1]

Metrics APIs Design[2]

目前 System.Diagnostics.Metrics 這個(gè)api還只能在 .NET preview 7 中使用, 當(dāng)然后邊也會(huì)像 System.Text.Json 庫一樣發(fā)布到Nuget平臺(tái), 讓其他版本的 .NET 項(xiàng)目接入使用。

指標(biāo)介紹

下邊介紹了幾個(gè)主要的類

?Meter 用來創(chuàng)建和跟蹤指標(biāo)Instrument?MeterListener 用來監(jiān)聽指標(biāo)Instrument的值的更新?Counter 計(jì)數(shù)器, 一般記錄累加的值, 比如程序中的錯(cuò)誤數(shù), 請(qǐng)求數(shù) 都可以用計(jì)數(shù)器?Histogram 直方圖, 記錄可統(tǒng)計(jì)的值, 比如記錄下每一個(gè)接口的響應(yīng)時(shí)間, 然后再根據(jù)時(shí)間進(jìn)行匯總?ObservableCounter 可觀察計(jì)數(shù)器, 一般記錄累加的值, 比如 CPU 時(shí)間等?ObservableGauge 可觀測儀表盤, 你可以用來記錄應(yīng)用的內(nèi)存, GC 的內(nèi)存等

Meter

Meter類用來創(chuàng)建各種指標(biāo)Instrument, 包括計(jì)數(shù)器,直方圖,儀表盤指標(biāo)等等, Meter 類包含了 Name 和 Version 屬性, 你可以設(shè)置meter的名稱和版本。

var meter = new Meter("meter","v1.0");var requestCount = meter.CreateCounter<long>("RequestCount");var responseTime = meter.CreateHistogram<long>("ResponseTime");// ...

MeterListener

MeterListener 可以用來監(jiān)聽指標(biāo)組件的值變化, 同樣相對(duì)應(yīng)的也有 ActivityListener。

MeterListener listener = new MeterListener(); listener.InstrumentPublished = (instrument, meterListener) => {Console.WriteLine($"EnableMeasurementEvents {instrument.Name} ");meterListener.EnableMeasurementEvents(instrument); };listener.SetMeasurementEventCallback<long>((instrument, measurement, tags, state) => {Console.WriteLine($"Instrument: {instrument.Name} has recorded the measurement {measurement}"); });listener.MeasurementsCompleted = (instrument, state) => {listener.DisableMeasurementEvents(instrument); };listener.Start();

?

屬性

  • InstrumentPublished 當(dāng)使用Meter類創(chuàng)建指標(biāo)Instrument時(shí), 這個(gè)回調(diào)可以接收到創(chuàng)建的指標(biāo)信息。

  • MeasurementsCompleted 當(dāng)停止指標(biāo)的收集時(shí),這個(gè)回調(diào)可以接收到相應(yīng)的指標(biāo)信息, 通常是執(zhí)行了 Meter 和 MeterListener 的Dispose() 方法

方法

  • EnableMeasurementEvents 開啟相應(yīng)指標(biāo)Instrument的監(jiān)聽

  • DisableMeasurementEvents 關(guān)閉相應(yīng)指標(biāo)Instrument的監(jiān)聽

  • SetMeasurementEventCallback 設(shè)置指標(biāo)Instrument的測量值更新的回調(diào)

  • RecordObservableInstruments 記錄所有監(jiān)聽的可觀察指標(biāo)(Observable instruments)的當(dāng)前測量值。

  • Start 開啟監(jiān)聽指標(biāo)Instrument。?

Counter 計(jì)數(shù)器

Counter是計(jì)數(shù)器指標(biāo),可以用來記錄累加的值,使用非常簡單,下邊的示例中,模擬記錄了程序的請(qǐng)求次數(shù),首先調(diào)用 CreateCounter 函數(shù)創(chuàng)建一個(gè)計(jì)數(shù)器指標(biāo) requestCount, 然后調(diào)用Add 方法, 進(jìn)行Counter的累加操作。

Meter meter = new Meter("meter","v1.0");var requestCount = meter.CreateCounter<long>("RequestCount");for (int i = 0; i < 10; i++) {requestCount.Add(1); }

然后使用上面的 MeterListener 來監(jiān)聽計(jì)數(shù)器指標(biāo), 程序的輸出如下:

在第一行, MeterListener 檢測到了上面創(chuàng)建的 RequestCount 計(jì)數(shù)器, 并且開啟了指標(biāo)的監(jiān)聽, 當(dāng)我們調(diào)用 requestCount.Add(1) 后, MeterListener 捕獲到了指標(biāo)測量值的更新, 然后在控制臺(tái)輸出了相應(yīng)的值, 需要注意的是, MeasurementEventCallback 回調(diào)方法只會(huì)捕獲指標(biāo)每次更新的測量值, 而不是匯總后的總數(shù),所以這里的輸出都是1。

Histogram 直方圖

Histogram 是直方圖指標(biāo),記錄可統(tǒng)計(jì)的值, 比如記錄下每一個(gè)接口的響應(yīng)時(shí)間, 然后再根據(jù)時(shí)間進(jìn)行匯總, 和 Counter 差不多, 不過指標(biāo)的維度不一樣, 而且 Histogram 使用Record()方法記錄每次的值,而不是Add()方法。

Meter meter = new Meter("meter","v1.0");var responseTime = meter.CreateHistogram<long>("ResponseTime");for (int i = 0; i < 10; i++) {var cost = new Random().Next(100,1000);responseTime.Record(cost); }

用隨機(jī)數(shù)表示了接口的響應(yīng)耗時(shí), 輸出如下:

ObservableCounter 可觀察計(jì)數(shù)器

ObservableCounter 是可觀察的計(jì)數(shù)器, 和 Counter 不一樣的是, 創(chuàng)建 ObservableCounter 需要傳入一個(gè)Func委托, 來返回一個(gè)測量值, 當(dāng)然也不需要手動(dòng)調(diào)用 Add(), Record() 方法, 只需要定時(shí)調(diào)用 MeterListener的RecordObservableInstruments 方法, 獲取當(dāng)前的指標(biāo)測量值。

class Program{static async Task Main(string[] args){MeterListener listener = new MeterListener();Start(listener);AutoRecord(listener);Meter meter = new Meter("meter","v1.0");_ = meter.CreateObservableCounter<long>("CPU_Counter",() => new Random().Next(100,1000));Console.ReadKey();}static void Start(MeterListener listener){listener.InstrumentPublished = (instrument, meterListener) =>{Console.WriteLine($"EnableMeasurementEvents {instrument.Name} ");meterListener.EnableMeasurementEvents(instrument);};listener.SetMeasurementEventCallback<long>((instrument, measurement, tags, state) =>{Console.WriteLine($"Instrument: {instrument.Name} has recorded the measurement {measurement}");});listener.MeasurementsCompleted = (instrument, state) =>{listener.DisableMeasurementEvents(instrument);};listener.Start();}static void AutoRecord(MeterListener listener){var cts = new CancellationTokenSource();_ = Task.Run(async () => {while (!cts.IsCancellationRequested){await Task.Delay(3000);listener.RecordObservableInstruments();}});}}

ObservableGauge 儀表盤指標(biāo)

這個(gè)比較好理解, 你可以用來記錄應(yīng)用的內(nèi)存,GC 的內(nèi)存等, 同樣是可觀察指標(biāo), 也需要傳入一個(gè)返回測量值的func委托。

MeterListener listener = new MeterListener();Start(listener);AutoRecord(listener);Meter meter = new Meter("meter","v1.0");_ = meter.CreateObservableGauge<long>("GC_Memory_Gauge",() => GC.GetTotalMemory(false));Console.ReadKey();

程序的輸出如下:

總結(jié)

本文主要介紹了.NET 6 指標(biāo)API System.Diagnostics.Metrics,通過這些API, 可以很方便的收集應(yīng)用的指標(biāo)數(shù)據(jù), 但是本文好像沒有提到數(shù)據(jù)的聚合匯總? 不要擔(dān)心, 運(yùn)行時(shí)團(tuán)隊(duì)針對(duì)相應(yīng)的指標(biāo)API已經(jīng)開發(fā)了一系列高性能的聚合API, 預(yù)計(jì)在.NET 6 preview 8 中發(fā)布更新!

References

[1]?Metric support plans:?https://github.com/open-telemetry/opentelemetry-dotnet/issues/1501
[2]?Metrics APIs Design:?https://github.com/dotnet/designs/blob/3ac77d55eb00999fb2b03b280f209d08d3cd6ce9/accepted/2021/System.Diagnostics/Metrics-Design.md

總結(jié)

以上是生活随笔為你收集整理的.NET 6 全新指标 System.Diagnostics.Metrics 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。