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

prometheus?client_go為應(yīng)用程序自定義監(jiān)控指標

 更新時間:2023年02月15日 15:01:04   作者:a朋  
這篇文章主要為大家介紹了prometheus?client_go為應(yīng)用程序自定義監(jiān)控指標詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

使用prometheus client_go為應(yīng)用程序添加監(jiān)控指標

使用prometheus client_go為應(yīng)用程序添加監(jiān)控指標時,通常為http注冊一個client_go默認的handler,這樣就可以通過/metrics接口,拉取應(yīng)用程序的metrics指標了:

http.Handle("/metrics", promhttp.Handler())

但是,該默認的handler會自動引入go的指標和proc的指標:

go的指標:

go_gc_duration_seconds
go_goroutines
go_info
....

proc的指標

process_start_time_seconds
process_cpu_seconds_total
....

默認handler為啥會引入go指標和proc指標,如果不需要要,可以去掉它們嗎?

原因

從源碼中找原因,http handler:

http.Handle("/metrics", promhttp.Handler())

client_go中該handler的實現(xiàn):

// prometheus/client_golang/prometheus/promhttp/http.go
func Handler() http.Handler {
    return InstrumentMetricHandler(
        prometheus.DefaultRegisterer, HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}),
    )
}

其中DefaultRegister、DefaultGather指向同一個Registry對象,即defaultRegistry

// prometheus/client_golang/prometheus/registry.go
var (
    defaultRegistry              = NewRegistry()
    DefaultRegisterer Registerer = defaultRegistry
    DefaultGatherer   Gatherer   = defaultRegistry
)
func init() {
    MustRegister(NewProcessCollector(ProcessCollectorOpts{}))    // 采集Proc指標
    MustRegister(NewGoCollector())                                // 采集Go指標
}
func MustRegister(cs ...Collector) {
    DefaultRegisterer.MustRegister(cs...)
}

該Registry對象在init()中,被注入了:

  • NewProcessCollector:采集進程的指標信息;
  • NewGoCollector: 采集go runtime的指標信息;

去掉Proc和Go指標

在實現(xiàn)自己的exporter或為應(yīng)用程序添加指標時,若不需要Proc/Go指標,可以:

  • 不使用 defaultRegister,自己 NewRegister,自定義使用哪些collector,即可去掉 Proc/Go 指標;
import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
    // 創(chuàng)建一個自定義的注冊表
    registry := prometheus.NewRegistry()
    // 可選: 添加 process 和 Go 運行時指標到我們自定義的注冊表中
    registry.MustRegister(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}))
    registry.MustRegister(prometheus.NewGoCollector())
    // 創(chuàng)建一個簡單的 gauge 指標。
    temp := prometheus.NewGauge(prometheus.GaugeOpts{
        Name: "home_temperature_celsius",
        Help: "The current temperature in degrees Celsius.",
    })
    // 使用我們自定義的注冊表注冊 gauge
    registry.MustRegister(temp)
    // 設(shè)置 gague 的值為 39
    temp.Set(39)
    // 暴露自定義指標
    http.Handle("/metrics", promhttp.HandlerFor(registry, promhttp.HandlerOpts{Registry: registry}))
    http.ListenAndServe(":8080", nil)
}

其中:

prometheus.NewRegistry()創(chuàng)建自己的注冊表(不使用defaultRegistry);

registry.MustRegister():

  • 若添加了ProcessCollector,會自動添加process_*監(jiān)控指標;
  • 若添加了GoCollector,會自動添加go_*監(jiān)控指標;
  • promhttp.HandlerFor創(chuàng)建針對registry的http handler;
  • promhttp.HandlerOpts{Registry: registry}: 將添加promhttp_*相關(guān)的指標;

參考: https://github.com/prometheus...

以上就是prometheus client_go為應(yīng)用程序自定義監(jiān)控指標的詳細內(nèi)容,更多關(guān)于prometheus client_go監(jiān)控指標的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go-zero自定義中間件的幾種方式

    go-zero自定義中間件的幾種方式

    首先 go-zero 已經(jīng)為我們提供了很多的中間件的實現(xiàn),但有時難免有需求需要自定義,這里介紹幾種自定義的方法,文中通過代碼示例講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-07-07
  • 淺談Golang的方法傳遞值應(yīng)該注意的地方

    淺談Golang的方法傳遞值應(yīng)該注意的地方

    這篇文章主要介紹了淺談Golang的方法傳遞值應(yīng)該注意的地方,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang收支記賬程序詳細編寫過程

    Golang收支記賬程序詳細編寫過程

    這篇文章主要介紹了Golang實現(xiàn)收支記賬程序流程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • Go語言HTTP請求流式寫入body的示例代碼

    Go語言HTTP請求流式寫入body的示例代碼

    這篇文章主要介紹了Go語言HTTP請求流式寫入body,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • sublime3+Golang+代碼補全的實現(xiàn)

    sublime3+Golang+代碼補全的實現(xiàn)

    本文主要介紹了sublime3+Golang+代碼補全的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • goLang引入自定義包的方法

    goLang引入自定義包的方法

    今天小編就為大家分享一篇goLang引入自定義包的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 詳解在Go語言單元測試中如何解決Redis存儲依賴問題

    詳解在Go語言單元測試中如何解決Redis存儲依賴問題

    在編寫單元測試時,除了?MySQL?這個外部存儲依賴,Redis?應(yīng)該是另一個最為常見的外部存儲依賴了,本文就來講解下如何解決?Redis?外部依賴,文章通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • GoLang語法之標準庫fmt.Printf的使用

    GoLang語法之標準庫fmt.Printf的使用

    fmt包實現(xiàn)了類似C語言printf和scanf的格式化I/O,主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分,本文就來介紹一下GoLang語法之標準庫fmt.Printf的使用,感興趣的可以了解下
    2023-10-10
  • 關(guān)于go語言載入json可能遇到的一個坑

    關(guān)于go語言載入json可能遇到的一個坑

    Go 語言從新手到大神,每個人多少都會踩一些坑,那么下面這篇文章主要給大家介紹了關(guān)于go語言載入json可能遇到的一個坑,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Golang實現(xiàn)Md5校驗的示例代碼

    Golang實現(xiàn)Md5校驗的示例代碼

    本文主要介紹了Golang實現(xiàn)Md5校驗的示例代碼,要求接收方需要文件的md5值,和接收到的文件做比對,以免文件不完整,但引起bug,下面就一起來解決一下
    2024-08-08

最新評論