亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

System.Diagnostics.Metrics .NET 6 全新指標API講解

 更新時間:2021年11月24日 09:10:35   作者:SpringLeee  
本文詳細講解了.NET 6全新指標System.Diagnostics.Metrics,文中通過示例代碼介紹的非常詳細。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

Metric support plans

Metrics APIs Design

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

指標介紹

下邊介紹了幾個主要的類

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

Meter

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

var meter = new Meter("meter","v1.0");

var requestCount = meter.CreateCounter<long>("RequestCount");

var responseTime = meter.CreateHistogram<long>("ResponseTime");

// ...

MeterListener

MeterListener 可以用來監(jiān)聽指標組件的值變化, 同樣相對應的也有 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 當使用Meter類創(chuàng)建指標Instrument時, 這個回調(diào)可以接收到創(chuàng)建的指標信息。
  • MeasurementsCompleted 當停止指標的收集時,這個回調(diào)可以接收到相應的指標信息, 通常是執(zhí)行了 Meter 和 MeterListener 的Dispose() 方法

方法

  • EnableMeasurementEvents 開啟相應指標Instrument的監(jiān)聽
  • DisableMeasurementEvents 關閉相應指標Instrument的監(jiān)聽
  • SetMeasurementEventCallback 設置指標Instrument的測量值更新的回調(diào)
  • RecordObservableInstruments 記錄所有監(jiān)聽的可觀察指標(Observable instruments)的當前測量值。
  • Start 開啟監(jiān)聽指標Instrument。

Counter 計數(shù)器

Counter是計數(shù)器指標,可以用來記錄累加的值,使用非常簡單,下邊的示例中,模擬記錄了程序的請求次數(shù),首先調(diào)用 CreateCounter 函數(shù)創(chuàng)建一個計數(shù)器指標 requestCount, 然后調(diào)用Add 方法, 進行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)聽計數(shù)器指標, 程序的輸出如下:

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

Histogram 直方圖

Histogram 是直方圖指標,記錄可統(tǒng)計的值, 比如記錄下每一個接口的響應時間, 然后再根據(jù)時間進行匯總, 和 Counter 差不多, 不過指標的維度不一樣, 而且 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);
}

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

ObservableCounter 可觀察計數(shù)器

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

    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 儀表盤指標

這個比較好理解, 你可以用來記錄應用的內(nèi)存,GC 的內(nèi)存等, 同樣是可觀察指標, 也需要傳入一個返回測量值的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();

程序的輸出如下:

總結

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • ASP.NET 中 Button、LinkButton和ImageButton 三種控件的使用詳解

    ASP.NET 中 Button、LinkButton和ImageButton 三種控件的使用詳解

    本文主要介紹Button、LinkButton和ImageButton 三種控件的使用方法,并一一舉例演示它們的用法,希望對大家有所幫助。
    2016-04-04
  • 析構函數(shù)的作用 什么是析構函數(shù)

    析構函數(shù)的作用 什么是析構函數(shù)

    這篇文章主要講述了析構函數(shù)的概念、原理、功能以及定義格式,析構函數(shù)是C#程序設計中比較重要的概念,需要的朋友可以參考一下
    2007-12-12
  • ASP.NET?Core在Linux下為dotnet創(chuàng)建守護進程

    ASP.NET?Core在Linux下為dotnet創(chuàng)建守護進程

    本篇主要是怎么樣為我們在Linux或者macOs中部署的dotnet程序創(chuàng)建一個守護進程,來保證我們的程序在異?;蛘呤请娔X重啟的時候仍然能夠正常訪問。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • ASP.NET 中ImageMap控件的用法

    ASP.NET 中ImageMap控件的用法

    本文主要介紹ImageMap控件的使用方法,并做了簡單的代碼演示,希望能幫到大家。
    2016-04-04
  • Asp.net請求處理之管道處理介紹

    Asp.net請求處理之管道處理介紹

    在了解Asp.net請求處理流程的過程中,個人認為有必要從源代碼的角度來了解asp.net管道是怎么實現(xiàn)的,需要的朋友可以參考下
    2012-11-11
  • IIS7 應用程序池的 托管管道模式與集成模式小結

    IIS7 應用程序池的 托管管道模式與集成模式小結

    而 IIS 7 完全整合 .NET 之后,架構的處理順序有了很大的不同(如下圖),最主要的原因就是 ASP.NET 從 IIS 插件(ISAPI extension)的角色,進入了 IIS 核心,而且也能以 ASP.NET 模塊負責處理 IIS 7 的諸多類型要求。
    2011-02-02
  • .Net?Core中使用MongoDB搭建集群與項目實戰(zhàn)

    .Net?Core中使用MongoDB搭建集群與項目實戰(zhàn)

    本文詳細講解了.Net?Core中使用MongoDB搭建集群與項目實戰(zhàn),對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • C#語言初級入門介紹

    C#語言初級入門介紹

    C#讀作“C sharp”,它是Microsoft開發(fā)的一種新語言,結合了C/C++的強大功能和Visual Basic的易用性。從最初的語言規(guī)范即可看出,C#無論在語法、豐富的Web開發(fā)支持還是自動化的內(nèi)存管理上都和Java非常相似。因此,如果你曾經(jīng)用過C++或者Java,再來學習C#應該是相當輕松的。
    2008-04-04
  • Entity Framework系統(tǒng)架構與原理介紹

    Entity Framework系統(tǒng)架構與原理介紹

    這篇文章介紹了Entity Framework系統(tǒng)架構與原理,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • WPF引用MVVM框架與使用方法

    WPF引用MVVM框架與使用方法

    這篇文章介紹了WPF引用MVVM框架與使用方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01

最新評論