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

Prometheus Go client library使用方式詳解

 更新時間:2023年11月30日 11:10:41   作者:frank  
這篇文章主要為大家介紹了Prometheus Go client library使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

介紹

Prometheus 支持 4 種 指標(biāo)類型,分別是 Counter、Gauge、Histogram 和 Summary。

Counter 指標(biāo)類型,指標(biāo)值是只能遞增,不能遞減的數(shù)值。需要注意的是,當(dāng) Prometheus server 重啟時,指標(biāo)值會被重置為 0。該指標(biāo)類型可用于統(tǒng)計接口的請求數(shù)、錯誤數(shù)等使用場景。

Gauge 指標(biāo)類型,指標(biāo)值是可增可減的數(shù)值。該指標(biāo)類型可用于統(tǒng)計 CPU、內(nèi)存和硬盤的使用情況,goroutine 的數(shù)量等使用場景。

Histogram 指標(biāo)類型,指標(biāo)值基于桶分布。開發(fā)者可以自定義桶的區(qū)間。該指標(biāo)類型可用于統(tǒng)計接口的延時請求數(shù)等使用場景。

Summary 指標(biāo)類型,與 Histogram 類似,區(qū)別是 Histogram 直接統(tǒng)計了不同區(qū)間中的指標(biāo)數(shù)值,而 Summary 是基于客戶端級別,因此不能統(tǒng)計多個實例的聚合數(shù)據(jù)。該指標(biāo)類型可用于預(yù)先不知道指標(biāo)桶劃分區(qū)間的場景。 

使用方式

一般在實際應(yīng)用場景中,通常一個指標(biāo)需要對應(yīng)多條時序數(shù)據(jù)(Label Name 為維度),此時就需要使用支持標(biāo)簽的指標(biāo)類型。

Prometheus 有 4 種支持標(biāo)簽的指標(biāo)類型,分別是 ConterVec、GaugeVec、HistogramVec、SummaryVec。

CounterVec

CounterVec 與 Counter 的區(qū)別是,它支持 Label,我們可以按照 Lable 維度,將同一個指標(biāo)的數(shù)據(jù)按照 Lable 分組統(tǒng)計。例如,同一個 Api 接口的請求數(shù),我們可以定義 Lable (Code、Method),按照狀態(tài)碼和 HTTP 請求方式,分組統(tǒng)計同一個 Api 接口的請求數(shù)。

示例代碼:

var (
 // 標(biāo)簽名
 labelNames = []string{"host", "code", "path", "method"}
 // HttpReqs 實例化 CounterVec
 HttpReqs *prometheus.CounterVec = prometheus.NewCounterVec(prometheus.CounterOpts{
  Name: "http_requests_total",
  Help: "How many HTTP requests processed, partitioned by status code and HTTP method.",
 },
  labelNames,
 )
)

閱讀上面這段代碼,我們使用 NewCounterVec 創(chuàng)建一個實例,它支持多個方法,我們可以使用其中一個性能相對較高的方法 WithLabelValues,返回一個 Counter

示例代碼:

func Metrics() gin.HandlerFunc {
 return func(c *gin.Context) {
  c.Next()
  host := c.RemoteIP()
  code := fmt.Sprintf("%d", c.Writer.Status())
  method := c.Request.Method
  labelsByHttpReqs := []string{host, code, c.FullPath(), method}
  prometheus_metrics.HttpReqs.WithLabelValues(labelsByHttpReqs...).Inc()
 }
}

Counter 支持兩個方法,分別是 Inc() 和 Add(),其中 Inc() 將 Counter 增加 1,Add() 將 Counter 增加給定值,需要注意的是,給定值必須為非負(fù)值,否則會引發(fā) panic。

需要注意的是,在我們創(chuàng)建指標(biāo)之后,還需要使用 Register() 接口的 Register() 方法,注冊之后才可以被收集到指標(biāo)數(shù)據(jù)。如果需要注冊多個指標(biāo),可以使用 MustRegister() 方法。

示例代碼:

reg := prometheus.NewRegistry()
reg.MustRegister(prometheus_metrics.HttpReqs, prometheus_metrics.OpsQueued, prometheus_metrics.Latencies, prometheus_metrics.Temps)

GaugeVec

GaugeVec 與 Gauge 的區(qū)別是,它支持 Label,我們可以按照 Lable 維度,將同一個指標(biāo)的數(shù)據(jù)按照 Lable 分組統(tǒng)計。

示例代碼:

var (
 labelNamesByOpsQueued = []string{
  "user",
  "type",
 }
 OpsQueued = prometheus.NewGaugeVec(
  prometheus.GaugeOpts{
   Name:      "ops_queued",
   Help:      "Number of blob storage operations waiting to be processed, partitioned by user and type.",
  },
  labelNamesByOpsQueued,
 )
)

閱讀上面這段代碼,我們使用 NewGaugeVec 創(chuàng)建實例。

HistogramVec

HistogramVec 與 Histogram 的區(qū)別是,它支持 Label,我們可以按照 Lable 維度,將同一個指標(biāo)的數(shù)據(jù)按照 Lable 分組統(tǒng)計。

示例代碼:

var (
 labelNamesByLatencies = []string{"method", "code"}
 Latencies             = prometheus.NewHistogramVec(
  prometheus.HistogramOpts{
   Name:    "http_request_duration_seconds",
   Help:    "Tracks the latencies for HTTP requests.",
   Buckets: []float64{0.99, 0.9, 0.5},
  },
  labelNamesByLatencies,
 )
)

SummaryVec

SummaryVec 與 Summary 的區(qū)別是,它支持 Label,我們可以按照 Lable 維度,將同一個指標(biāo)的數(shù)據(jù)按照 Lable 分組統(tǒng)計。

示例代碼:

var (
 labelNamesByTemps = []string{"species"}
 Temps             = prometheus.NewSummaryVec(
  prometheus.SummaryOpts{
   Name:       "pond_temperature_celsius",
   Help:       "The temperature of the frog pond.",
   Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
  },
  labelNamesByTemps,
 )
)

閱讀上面這段代碼,使用 NewSummaryVec 創(chuàng)建實例。

總結(jié)

本文我們主要介紹 4 種指標(biāo)類型的含義,通過 Label 可以將 4 種類型的指標(biāo)數(shù)據(jù),按照 Label 的維度分組統(tǒng)計,我們以支持 Label 的 CounterVec 為例,介紹了它的使用方式,其余 3 種支持 Label 的指標(biāo)也提供了簡單的使用示例。

感興趣的讀者朋友們可以通過閱讀源碼,了解更多關(guān)于其它 3 種支持 Label 的指標(biāo)。

更多關(guān)于Prometheus Go client library的資料請也可以關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go語言yaml轉(zhuǎn)map、map遍歷的實現(xiàn)

    go語言yaml轉(zhuǎn)map、map遍歷的實現(xiàn)

    本文主要介紹了go語言yaml轉(zhuǎn)map、map遍歷的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Go語言func匿名函數(shù)閉包示例詳解

    Go語言func匿名函數(shù)閉包示例詳解

    這篇文章主要為大家介紹了Go語言func匿名函數(shù)閉包示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • golang之log rotate詳解

    golang之log rotate詳解

    下面小編就為大家?guī)硪黄猤olang之log rotate詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Go uuid庫的具體使用

    Go uuid庫的具體使用

    在現(xiàn)代軟件開發(fā)中,全球唯一標(biāo)識符(UUID)在許多場景中發(fā)揮著重要的作用,本文主要介紹了Go uuid庫的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • ???????Golang實現(xiàn)RabbitMQ中死信隊列幾種情況

    ???????Golang實現(xiàn)RabbitMQ中死信隊列幾種情況

    本文主要介紹了???????Golang實現(xiàn)RabbitMQ中死信隊列幾種情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go語言實現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法

    Go語言實現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法

    這篇文章主要介紹了Go語言實現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法,以實例形式詳細(xì)分析了幾種常見的排序技巧與實現(xiàn)方法,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • Golang設(shè)計模式之責(zé)任鏈模式講解和代碼示例

    Golang設(shè)計模式之責(zé)任鏈模式講解和代碼示例

    責(zé)任鏈?zhǔn)且环N行為設(shè)計模式, 允許你將請求沿著處理者鏈進(jìn)行發(fā)送, 直至其中一個處理者對其進(jìn)行處理,本文就詳細(xì)給大家介紹一下Golang 責(zé)任鏈模式,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-06-06
  • Go語言中程序是怎么編譯的實現(xiàn)

    Go語言中程序是怎么編譯的實現(xiàn)

    本文主要介紹了Go語言中程序是怎么編譯的實現(xiàn),深入探討Go語言的編譯機制和最新的模塊管理系統(tǒng)Go Modules的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Go使用chan或context退出協(xié)程示例詳解

    Go使用chan或context退出協(xié)程示例詳解

    這篇文章主要為大家介紹了Go使用chan或context退出協(xié)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • golang中package?is?not?in?GOROOT報錯的真正解決辦法

    golang中package?is?not?in?GOROOT報錯的真正解決辦法

    這篇文章主要給大家介紹了關(guān)于golang中package?is?not?in?GOROOT報錯的真正解決辦法,文中通過圖文介紹的非常詳細(xì),對同樣遇到這個問題的朋友具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03

最新評論