利用AppMetrics對Web進行監控教程

2021-10-02 17:09:56 字數 4117 閱讀 4322

一、基礎準備

安裝依賴

這裡可以通過nuget或使用命令列進行安裝,具體需要安裝的類庫如下(注意版本):

啟用度量指標

因為我們的資料需要符合promethues格式,所以後續教程我們會替換預設的格式採用符合的格式。首先我們需要program.cs裡輸入以下內容:

public static iwebhost buildwebhost(string args)

; })

.usestartup()

.build();

}

outputmetrics.asprometheusplaintext()

outputmetrics.asprometheusprotobuf()

endpointsoptions.metricstextendpointoutputformatter = metrics.outputmetricsformatters.oftype().first();

endpointsoptions.metricsendpointoutputformatter = metrics.outputmetricsformatters.oftype().first();

完成以上操作後,我們最後還需要進行其他配置,開啟startup.cs檔案增加如下內容:

services.addmvc().addmetrics();

至此我們就完成了基本的初始化了,通過啟動程式並訪問localhost:5000/metrics-text即可檢視最終的輸出內容。

二、自定義指標

由於其內部已經預設提供了若干的指標,但是並不能符合實際業務的需求故以下將對常用的度量指標型別以及用法進行介紹,這裡這裡大家通過注入imetrics介面物件即可訪問,所以下面這部分**不在闡述。

儀錶盤(gauge)

最常見的型別,主要是用於直接反應當前的指標情況,比如我們常見的cpu和記憶體基本都是使用這種方式進行顯示的,可以直觀的看到當前的實際的狀態情況。對於所有的指標我們都需要定義對應的options,當然這可以完成攜程靜態變數**用程式全域性使用。

比如下面我們定義乙個表示當前發生錯誤次數的指標:

gaugeoptions errors = new gaugeoptions()

;完成指標的定義後,我們就可以在需要使用的地方進行指標資料的修改,比如下面我們將錯誤數量設定為10:

metrics.measure.gauge.setvalue(mymetricsregistry.errors, 10);

這樣我們就完成了指標的設定,但是有時候我們還想卻分具體的error是那個層面發起的,這個時候我們需要使用到tag了,下面我們在設定值的同時設定指標,當然也可以在新建指標的時候通過tags變數,並且通用於其他所有指標:

var tags = new metrictags(「fromt」, 「db」);

metrics.measure.gauge.setvalue(mymetricsregistry.errors, tags, 10);

至此我們就完成了乙個基本的指標,下面我們繼續其他型別指標。

計數值(counter)

對於http型別的**來說,存在非常多的數量需要統計記錄,所以計數值此時就特別適合這類情況,比如我們需要統計請求數量就可以利用這類指標型別,下面我們就以請求數來定義這個指標:

var requestcounter = new counteroptions()

;以上我們定義了乙個計數指標,其中我們可以看到我們這裡使用了乙個新變數measurementunit主要是用於定義指標單位的,當然這個只是輔助資訊會一同輸出到結果,下面我們需要進行增加和減少,考慮到大多數情況都是減1和增1的情況:

metrics.measure.counter.increment(requestcounter);

實際情況可能我們都是統計請求但是期望還能單獨統計特定介面的請求,這個時候我們在原本呼叫方式基礎上增加額外的引數:

metrics.measure.counter.increment(requestcounter, 「api」);

如果嫌每次增長1比較慢,我們通過其函式的過載形式填寫我們希望增長的具體值。

計量值(meter)

有點類似於計數值但是相比來說,它可以提供更加豐富的資訊,比如每1、5、15分鐘的增長率等,所以對於一些需要通過增長率觀察的資料特別時候,這裡我們以請求的反應狀態碼進行記錄來體現其用途:

;以上我們完成了乙個指標的定義,下面我們開始使用其並且定義不同的狀態的碼的發生情況,具體如下:

當然如果希望增加的數量自定控制也可以使用其提供的過載形式進行。

柱狀圖(histogram)

顧名思義,主要反應資料的分布情況,所以這裡不在重複闡述,大家對於這種資料表現形式還是比較了解的,所以下面就直接以實際**的實列進行介紹,便於大家的理解:

var postandputrequestsize = new histogramoptions()

;以上我們定義乙個體現post和put請求的資料尺寸的指標,下面我們利用隨機數來進行資料的模擬對其進行資料填充,便於顯示資料:

var rnd = new random();

foreach (var i in enumerable.range(0, 50))

5. 時間線(timer)

對應指標的監控閉然少不了對於時間的記錄,特別對於http來說,直接影響到使用者的體驗就是響應時間,素以我們也需要時刻關於這類指標的變化情況及時做出反應,下面我們就以資料庫的響應時間的情況作為指標進行監控:

timeroptions databasetimer = new timeroptions()

;上面我們通過特別的屬性指定了改指標記錄時間的單位,下面我們使用其指標進行資料的記錄:

using(metrics.measure.timer.time(databasetimer))

我們可以看到為了方便的記錄請求的時間,我們使用using進行涵括,並將需要記錄耗時的請求操作放入其中,在請求完成操作後就可以正確的記錄其需要的時間。

apdex

採用了一種標準的效能指標計算方式,用法類似與上述,這裡僅僅列舉用法:

apdexoptions sampleapdex = new apdexoptions

;using(metrics.measure.apdex.track(sampleapdex))

三、高階指標

平均響應

很多時候我們僅僅依靠乙個指標很難完成乙個實際的需求,是所以我們就需要將多個指標進行組合進行,比如我們期望得到請求次數,同時還有請求的總時間和平均響應時間等,為此我們可以特殊的指標將多個指標進行組合,具體操作如下:

var cachehitratiogauge = new gaugeoptions

;var cachehitsmeter = new meteroptions

;var databasequerytimer = new timeroptions

;var cachehits = metrics.provider.meter.instance(cachehitsmeter);

var calls = metrics.provider.timer.instance(databasequerytimer);

var cachehit = new random().next(0, 2) == 0;

using(calls.newcontext())

thread.sleep(cachehit ? 10 : 100);
metrics.measure.gauge.setvalue(cachehitratiogauge, () => new hitratiogauge(cachehits, calls, m => m.oneminuterate));

xamarin.android -> xamarin.ios -> 混合 -> xamarin.forms

龍華大道1號

如何搭建測試環境 利用docker部署web專案

前言 再看本文章之前需要大概理解docker的技術原理與基本概念,我認為上手之前這些內容並不是很重要,所以這裡就不在贅述,為什麼說不重要呢?其實剛接觸docker的同學可能對概念什麼的並不是很理解,往往官方晦澀難懂的解釋並不會給自己對docker的認識有多大的提高,我的建議還是從實踐 發,先試著從簡...

對pg buffercache 的利用實驗

先看有沒有髒資料 postgres select isdirty from pg buffercache where isdirty t isdirty 0 rows 此時尚未有髒資料。進一步確認 postgres select count from pg buffercache where isd...

SQLSERVER對索引的利用

寫sql語句的時候很多時候會用到filter篩選掉一些記錄,sql對篩選條件簡稱 sarg search argument sarg 1 where amount 4000 and amount 6000 上面這句就是篩選條件 當然這裡不是說sqlserver的where子句,是說sqlserver...