欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET?如何使用?OpenTelemetry?metrics?監(jiān)控應用程序指標

 更新時間:2024年06月11日 08:58:13   作者:敏杰的學習園地  
這篇文章主要介紹了.NET?使用?OpenTelemetry?metrics?監(jiān)控應用程序指標,通過代碼演示了如何通過 OpenTelemetry 把 Metrics 的數(shù)據(jù)發(fā)送到 Prometheus 里進行查詢與展示,然后又演示了自定義相關指標來滿足業(yè)務數(shù)據(jù)指標的監(jiān)控,需要的朋友可以參考下

上一次我們講了 OpenTelemetry Logs 與 OpenTelemetry Traces。今天繼續(xù)來說說 OpenTelemetry Metrics。
隨著現(xiàn)代應用程序的復雜性不斷增加,對于性能監(jiān)控和故障排除的需求也日益迫切。在 .NET 生態(tài)系統(tǒng)中,OpenTelemetry Metrics 可用于實時監(jiān)控和分析應用程序的性能指標。比如監(jiān)控內存,CPU 使用量,鏈接數(shù)等等。

OpenTelemetry Metrics 概述

OpenTelemetry Metrics 是 OpenTelemetry 的一部分,用于記錄和導出應用程序的性能指標。它提供了一組靈活的 API 和工具,用于創(chuàng)建、注冊和導出度量指標,以便實時監(jiān)控和分析應用程序的性能。OpenTelemetry Metrics 支持各種類型的度量指標,包括計數(shù)器(Counter)、測量值(ObservableGauge)等,以滿足不同場景下的性能監(jiān)控需求。

監(jiān)控 ASP.NET Core 與 Runtime 的指標

OpenTelemetry 已經為我們直接提供了一些開箱即用的包。我們使用這些包就可以非常便捷的對 ASP.NET Core 或者 Runtime 的一些指標進行監(jiān)控。以下我們將演示通過簡單的幾步如何把這些指標通過 OpenTelemetry 協(xié)議發(fā)送給 Prometheus。

使用 nuget 安裝包

首先安裝相關的包

<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
		<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
		<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
		<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.8.1" />

配置服務

跟 logs,traces 一樣,我們需要在啟動的時候添加必要的服務及配置。

builder.Services.AddControllers();
var otel = builder.Services.AddOpenTelemetry();
// Configure OpenTelemetry Resources with the application name
otel.ConfigureResource(resource => resource
    .AddService(builder.Environment.ApplicationName));
otel.WithMetrics(metrics =>
{
    metrics.AddAspNetCoreInstrumentation()
    .AddRuntimeInstrumentation()
    .AddOtlpExporter((otlpOptions, metricReaderOptions) =>
    {
        otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
        otlpOptions.Endpoint = new Uri("http://localhost:9090/api/v1/otlp/v1/metrics");
        metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
    });
});

安裝 Prometheus

從官網(wǎng)下載 Prometheus 的安裝包或者 k8s 運行。啟動的時候記得開啟參數(shù):otlp-write-receiver

./prometheus --enable-feature=otlp-write-receiver

prometheus 默認的 metrics 的 api 地址為:http://localhost:9090/api/v1/otlp/v1/metrics

在 Prometheus 中查看指標

讓我們運行上面的 .NET 程序,等待一會。然后打開 http://localhost:9090/graph 進行查看。我們能看到 Prometheus 中多了很多跟 ASP.NET Core 以及 .NET runtime 相關的指標。

有 kestrel 相關的,GC 相關的, Thread pool 相關的指標等等很多很多。
下面我們隨便選一個 kestrel 的活動鏈接數(shù)看看:

alt text

可以直觀的看到從0個連接到2個連接再到1個連接的過程。

自定義指標

以上演示了如何監(jiān)控 ASP.NET Core 以及 .NET runtime 相關的指標。過程呢相當簡單。但是光有這些框架的指標可能還不夠,有的時候我們希望監(jiān)控業(yè)務數(shù)據(jù)的指標,比如訂單數(shù)量,實時用戶在線量,等等。那么這個時候我們需要自己去實現(xiàn)一個指標。
下面我們就以訂單總數(shù)這個數(shù)據(jù)定義一個自定義的指標。當用戶每次下單成功后訂單數(shù)量就會 +1。

MyMeterService

首先定義一個 MyMeterService 的類:

    public class MyMeterService
    {
        public static Meter MyMeter = new("MyMeter", "1.0");
        public static Counter<long> MyOrderCounter = MyMeter.CreateCounter<long>("MyOrderCounter");
    }

首先創(chuàng)建了一個名為 MyMeter 的度量器。然后創(chuàng)建了一個名為 MyOrderCounter 的長整型計數(shù)器(Counter),并將其綁定到 MyMeter 上,名稱為 "MyOrderCounter"。

修改服務配置代碼

otel.WithMetrics(metrics =>
{
    metrics.AddAspNetCoreInstrumentation()
    .AddRuntimeInstrumentation()
    .AddMeter("MyMeter")
    .AddOtlpExporter((otlpOptions, metricReaderOptions) =>
    {
        otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
        otlpOptions.Endpoint = new Uri("http://localhost:9090/api/v1/otlp/v1/metrics");
        metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
    });
});

通過調用 AddMeter("MyMeter") 方法 OpenTelemetry 會監(jiān)聽前面定義的 MyMeter 度量器。

添加 Order 控制器

    [ApiController]
    [Route("[controller]")]
    public class OrderController : ControllerBase
    {
        [HttpPost]
        public string Add()
        {
            MyMeterService.MyOrderCounter.Add(1);
            return "ok";
        }
    }

添加一個 Order 的控制器,每次調用 Add 方法的時候就會給 MyOrderCounter 加 1 。

在 Prometheus 中查看自定義指標

跟上面一樣我運行我們的程序后等待一會,再次刷新 http://localhost:9090/graph。里面就會多出來 MyOrderCounter 指標。

alt text

使用 POSTMAN 調用幾次 Order 接口后,點擊 Execute 查詢一下:

alt text

可以看到 MyOrderCounter 指標的折線圖。

更多的度量

上面我們使用一個 Counter 來對訂單數(shù)進行累加。其實 .NET 為我們提供了更多的度量方法。以下簡單介紹幾個常用的:

  • Counter
    表示支持添加非負值的檢測。 例如,可以在每次處理請求時調用 counter.Add(1) 以跟蹤請求總數(shù)。 默認情況下,大多數(shù)指標查看器使用速率 (請求數(shù)/秒) 顯示計數(shù)器,但也可以顯示累積總計。

  • ObservableCounter
    表示一個指標可觀測的檢測,當觀察檢測時報告單調遞增的值,例如,不同進程、線程、用戶模式或內核模式的 CPU 時間。

  • ObservableGauge
    表示在觀察儀器時報告非累加值的可觀測儀器,例如當前室內溫度。

  • UpDownCounter
    支持報告正或負指標值的工具。 UpDownCounter 可用于報告活動請求或隊列大小更改等方案。

  • ObservableUpDownCounter
    一種指標可觀測的儀器,在觀察檢測時報告值增加或減少。 例如,使用此儀器可以監(jiān)視進程堆大小或無鎖循環(huán)緩沖區(qū)中的項的近似數(shù)量。

總結

以上我們通過代碼演示了如何通過 OpenTelemetry 把 Metrics 的數(shù)據(jù)發(fā)送到 Prometheus 里進行查詢與展示。然后又演示了自定義相關指標來滿足業(yè)務數(shù)據(jù)指標的監(jiān)控。從概念到代碼還是非常非常簡單清晰的。希望對各位正在打算建立監(jiān)控體系的同學有所幫助。

到此這篇關于.NET 使用 OpenTelemetry metrics 監(jiān)控應用程序指標的文章就介紹到這了,更多相關.NET 使用 OpenTelemetry metrics 監(jiān)控應用程序指標內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • asp.net web頁面元素的多語言化(多國語化)實現(xiàn)分享

    asp.net web頁面元素的多語言化(多國語化)實現(xiàn)分享

    開發(fā)的一些系統(tǒng),經常要求支持多語言(例如日文,英文等),接下來介紹如何實現(xiàn)asp.net開發(fā)中web頁面實現(xiàn)頁面元素的多語言化(多國語化)感興趣的朋友可以了解下,或許對你學習有所幫助
    2013-02-02
  • ASP.NET緩存處理類實例

    ASP.NET緩存處理類實例

    這篇文章主要介紹了ASP.NET緩存處理類,實例分析了asp.net緩存的使用技巧,需要的朋友可以參考下
    2015-06-06
  • 手把手教你在.NET中創(chuàng)建Web服務實現(xiàn)方法

    手把手教你在.NET中創(chuàng)建Web服務實現(xiàn)方法

    這篇文章主要介紹了.NET中創(chuàng)建Web服務實現(xiàn)方法,有需要的朋友可以參考一下
    2013-12-12
  • Visual?Studio2022創(chuàng)建WebAPI項目步驟記錄

    Visual?Studio2022創(chuàng)建WebAPI項目步驟記錄

    不管是前后端分離還是提供數(shù)據(jù)服務,WebApi使用的越來越廣泛,而且.NET Core也是我們.NET開發(fā)人員未來發(fā)展的趨勢,所以說學會使用.NET Core Api是非常有必要的,這篇文章主要給大家介紹了關于Visual?Studio2022創(chuàng)建WebAPI項目步驟的相關資料,需要的朋友可以參考下
    2024-01-01
  • C#通過POP3獲取郵件的代碼(正文和附件)

    C#通過POP3獲取郵件的代碼(正文和附件)

    C# POP3獲取郵件的代碼 包括正文和附件,需要的朋友可以參考下。
    2010-03-03
  • ASP.NET中Web API的簡單實例

    ASP.NET中Web API的簡單實例

    Web API框架是一個面向Http協(xié)議的通信框架,Web API 框架是一個面向Http協(xié)議的通信框架。Web API 框架目前支持兩種數(shù)據(jù)格式的序列化:Json 及 Xml。在不做任何配置的情況下,則 Web API 會自動把數(shù)據(jù)使用xml進行序列化,否則使用 json 序列化,需要的朋友可以參考下
    2015-10-10
  • Asp.Net 程序錯誤Runtime Error原因與解決

    Asp.Net 程序錯誤Runtime Error原因與解決

    提示這個,不管怎么改配置文件的設置都不行,下面是修正方法,大家可以試試。
    2010-03-03
  • 在.NET Web API設置響應輸出Json數(shù)據(jù)格式常用的兩種方式詳解

    在.NET Web API設置響應輸出Json數(shù)據(jù)格式常用的兩種方式詳解

    在ASP.NET Core Web API中設置響應輸出Json數(shù)據(jù)格式常用以下兩種方式:可以通過添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化庫在應用程序中全局設置接口響應的Json數(shù)據(jù)格式,本文示例使用的是新的Minimal API模式,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析

    使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析

    這篇文章主要介紹了使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • ASP.NET MVC重寫RazorViewEngine實現(xiàn)多主題切換

    ASP.NET MVC重寫RazorViewEngine實現(xiàn)多主題切換

    這篇文章主要為大家詳細介紹了ASP.NET MVC重寫RazorViewEngine實現(xiàn)多主題切換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論