最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

System.Diagnostics.Metrics .NET 6 全新指標(biāo)API講解

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

前言

工友們, .NET 6 Preview 7 已經(jīng)在8月10號(hào)發(fā)布了, 除了眾多的功能更新和性能改進(jìn)之外, 在 preview 7 版本中, 也新增了全新的指標(biāo)API, System.Diagnostics.Metrics, 為了讓?xiě)?yīng)用能有更好的可觀(guān)測(cè)性, 在之前的發(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

Metrics APIs Design

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

指標(biāo)介紹

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

  • Meter 用來(lái)創(chuàng)建和跟蹤指標(biāo)Instrument
  • MeterListener 用來(lái)監(jiān)聽(tīng)指標(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 可觀(guān)察計(jì)數(shù)器, 一般記錄累加的值, 比如 CPU 時(shí)間等
  • ObservableGauge 可觀(guān)測(cè)儀表盤(pán), 你可以用來(lái)記錄應(yīng)用的內(nèi)存, GC 的內(nèi)存等

Meter

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

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

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

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

// ...

MeterListener

MeterListener 可以用來(lái)監(jiān)聽(tīng)指標(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類(lèi)創(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 開(kāi)啟相應(yīng)指標(biāo)Instrument的監(jiān)聽(tīng)
  • DisableMeasurementEvents 關(guān)閉相應(yīng)指標(biāo)Instrument的監(jiān)聽(tīng)
  • SetMeasurementEventCallback 設(shè)置指標(biāo)Instrument的測(cè)量值更新的回調(diào)
  • RecordObservableInstruments 記錄所有監(jiān)聽(tīng)的可觀(guān)察指標(biāo)(Observable instruments)的當(dāng)前測(cè)量值。
  • Start 開(kāi)啟監(jiān)聽(tīng)指標(biāo)Instrument。

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

Counter是計(jì)數(shù)器指標(biāo),可以用來(lái)記錄累加的值,使用非常簡(jiǎn)單,下邊的示例中,模擬記錄了程序的請(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 來(lái)監(jiān)聽(tīng)計(jì)數(shù)器指標(biāo), 程序的輸出如下:

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

Histogram 直方圖

Histogram 是直方圖指標(biāo),記錄可統(tǒng)計(jì)的值, 比如記錄下每一個(gè)接口的響應(yīng)時(shí)間, 然后再根據(jù)時(shí)間進(jìn)行匯總, 和 Counter 差不多, 不過(guò)指標(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 可觀(guān)察計(jì)數(shù)器

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

    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 儀表盤(pán)指標(biāo)

這個(gè)比較好理解, 你可以用來(lái)記錄應(yīng)用的內(nèi)存,GC 的內(nèi)存等, 同樣是可觀(guān)察指標(biāo), 也需要傳入一個(gè)返回測(cè)量值的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,通過(guò)這些API, 可以很方便的收集應(yīng)用的指標(biāo)數(shù)據(jù), 但是本文好像沒(méi)有提到數(shù)據(jù)的聚合匯總? 不要擔(dān)心, 運(yùn)行時(shí)團(tuán)隊(duì)針對(duì)相應(yīng)的指標(biāo)API已經(jīng)開(kāi)發(fā)了一系列高性能的聚合API, 預(yù)計(jì)在.NET 6 preview 8 中發(fā)布更新!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .NET Core 中的并發(fā)編程

    .NET Core 中的并發(fā)編程

    在.NET Core中,任務(wù) (tasks) 是并發(fā)編程的主要抽象表述,但還有其他支撐類(lèi)可以使我們的工作更容易。下面小編和大家一起學(xué)習(xí)一下吧
    2019-05-05
  • WPF框架Prism中導(dǎo)航Navigation用法介紹

    WPF框架Prism中導(dǎo)航Navigation用法介紹

    這篇文章介紹了WPF框架Prism中導(dǎo)航Navigation的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 初識(shí) ASP.NET Membership 用戶(hù)管理

    初識(shí) ASP.NET Membership 用戶(hù)管理

    Membership 是用做用戶(hù)管理,進(jìn)行身份認(rèn)證使用的。通過(guò)ASP.NET Membership,我們可以創(chuàng)建用戶(hù)、刪除用戶(hù)和編輯用戶(hù)屬性。所以這是一個(gè)實(shí)現(xiàn)登錄相關(guān)控件的底層框架。
    2016-04-04
  • ASP.NET?Core中的Configuration配置一

    ASP.NET?Core中的Configuration配置一

    這篇文章介紹了ASP.NET?Core中的Configuration配置,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 頁(yè)面包含的處理

    頁(yè)面包含的處理

    頁(yè)面包含的處理...
    2006-08-08
  • ASP.Net?Core?MVC基礎(chǔ)系列之獲取配置信息

    ASP.Net?Core?MVC基礎(chǔ)系列之獲取配置信息

    這篇文章介紹了ASP.Net?Core?MVC獲取配置信息的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .Net結(jié)構(gòu)型設(shè)計(jì)模式之橋接模式(Bridge)

    .Net結(jié)構(gòu)型設(shè)計(jì)模式之橋接模式(Bridge)

    這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計(jì)模式之橋接模式(Bridge),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • ASP.NET 中ImageMap控件的用法

    ASP.NET 中ImageMap控件的用法

    本文主要介紹ImageMap控件的使用方法,并做了簡(jiǎn)單的代碼演示,希望能幫到大家。
    2016-04-04
  • ASP.NET中HttpContext對(duì)象下的屬性介紹

    ASP.NET中HttpContext對(duì)象下的屬性介紹

    這篇文章介紹了ASP.NET中HttpContext對(duì)象下的屬性,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • SQL Server 2005 RTM 安裝錯(cuò)誤 :The SQL Server System Configuration Checker cannot be executed due to

    SQL Server 2005 RTM 安裝錯(cuò)誤 :The SQL Server System Configuratio

    SQL Server 2005 RTM 安裝錯(cuò)誤 :The SQL Server System Configuration Checker cannot be executed due to...
    2007-02-02

最新評(píng)論

贞丰县| 万年县| 高安市| 图木舒克市| 抚远县| 鹰潭市| 逊克县| 潜江市| 阿鲁科尔沁旗| 阿图什市| 临朐县| 定日县| 军事| 云阳县| 桦甸市| 大埔县| 汕头市| 运城市| 定远县| 安徽省| 吴堡县| 来安县| 乃东县| 阿拉尔市| 武平县| 孝义市| 定陶县| 平江县| 虹口区| 腾冲县| 关岭| 南靖县| 峨眉山市| 保定市| 和政县| 运城市| 湘西| 富宁县| 富宁县| 合水县| 屏山县|