您好,登錄后才能下訂單哦!
本篇文章為大家展示了Metrics中怎么監控應用程序的性能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Metrics提供5種基本的度量類型:Gauges, Counters, Histograms, Meters和 Timers
Gauge是最簡單的度量類型,只有一個簡單的返回值,他用來記錄一些對象或者事物的瞬時值。
比如,我們類型為Gauge的計數器來記錄某個服務目前開通的城市個數
Metric.Gauge("Service Cities Count", () => Cities.Count, new Unit("個"));
Counter是一個簡單64位的計數器,他可以增加和減少。
比如我們可以定義兩個Counter類型的計數器,用來統計所有服務請求數目,和目前正在處理的請求總數。
/// <summary> /// keep the total count of the requests/// </summary>private readonly Counter totalRequestsCounter = Metric.Counter("Requests", Unit.Requests);/// <summary> /// count the current concurrent requests/// </summary>private readonly Counter concurrentRequestsCounter = Metric.Counter("SampleMetrics.ConcurrentRequests", Unit.Requests);
這樣,在我們請求處理開始的時候,同時將這兩個計數器自增。
this.concurrentRequestsCounter.Increment(); // increment concurrent requests counterthis.totalRequestsCounter.Increment(); // increment total requests counter
當某一個請求處理完成之后,將目前正在處理的請求減一
this.concurrentRequestsCounter.Decrement(); // decrement number of concurrent requests
這種計數器也可以用來統計諸如當前有多少人在線,或者服務器中有多少處于有效期內的session
Meter是一種只能自增的計數器,通常用來度量一系列事件發生的比率。他提供了平均速率,以及指數平滑平均速率,以及采樣后的1分鐘,5分鐘,15分鐘速率。
比如需要統計請求的速率,比如統計平均每分鐘內有多少次請求進來。只需要定義一個metric
/// <summary> /// measure the rate at which requests come in/// </summary>private readonly Meter meter = Metric.Meter("Requests", Unit.Requests,TimeUnit.Seconds);
在處理請求的地方,調用Mark方法即可。
this.meter.Mark(); // signal a new request to the meter
再比如,要測量服務出錯的概率,比如每小時出錯多少次。可以定義一個metric。
/// <summary> /// measure the rate of service exception/// </summary>private readonly Meter errorMeter = Metric.Meter("Error", Unit.Errors, TimeUnit.Hours);
這樣,在處理請求的時候,如果出現異常了,調用一下errorMeter的Mark方法即可。
this.errorMeter.Mark();// signal a new error to the meter
Histrogram是用來度量流數據中Value的分布情況,Histrogram可以計算最大/小值、平均值,方差,分位數(如中位數,或者95th分位數),如75%,90%,98%,99%的數據在哪個范圍內。
比如,我們想度量,所有傳進來服務的請求參數的長度分布。那么,可以定義一個histogram。
/// <summary> /// keep a histogram of the input data of our request method /// </summary>private readonly Histogram histogramOfData = Metric.Histogram("ResultsExample", Unit.Items);
然后在請求的地方,調用其Update方法來更新值。
this.histogramOfData.Update(request.length, methodName); // update the histogram with the input data
Timer是Histogram跟Meter的一個組合,比如要統計當前請求的速率和處理時間。
就可以定義一個Timer:
/// <summary> /// measure the time rate and duration of requests/// </summary>private readonly Timer timer = Metric.Timer("Requests", Unit.Requests);
在使用的時候,調用timer的NewContext即可。
using (this.timer.NewContext(i.ToString())) // measure until disposed{ ... }
收集了這么多數據之后,我們需要把數據時實的動態展示或者保存起來。Metric提供了多種的數據報告接口。包括自帶的Metrics.NET.FlotVisualization, 以及輸出到專業的系統監控Graphite,輸出到開源,分布式,時間序列的中InfluxDB,或者輸出到ElasticSearch中。配置起來也非常簡單。比如如果要直接在http頁面上展現,只需要在初始化的時候,設置合適的EndPoint即可:
Metric.Config .WithHttpEndpoint("http://localhost:1234/metrics/") .WithAllCounters() .WithInternalMetrics() .WithReporting(config => config .WithConsoleReport(TimeSpan.FromSeconds(30))
然后在瀏覽器中輸入 http://localhost:1234/metrics/,就可以看到各種采集的準實時各種度量信息:
上面自帶的性能DashBoard略顯簡陋。 通常,我們一般會將這些實時采集的數據存儲到分布式時序數據庫InfluxDB中,然后利用開源的圖表控件Grafana來實時展現這些數據,比如,可以制作想下面這樣的,動態的性能準實時監控系統:
上述內容就是Metrics中怎么監控應用程序的性能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。