golang prometheus包的使用


prometheus包提供了用於實現監控代碼的metric原型和用於注冊metric的registry。子包(promhttp)允許通過HTTP來暴露注冊的metric或將注冊的metric推送到Pushgateway。

Metrics

  • prometheus一共有5種metric類型,前四種為:Counter,Gauge,Summary 和Histogram,每種類型都有對應的vector版本:GaugeVec, CounterVec, SummaryVec, HistogramVec,vector版本細化了prometheus數據模型,增加了label維度。第5種metric為Untyped,它的運作方式類似Gauge,區別在於它只向prometheus服務器發送類型信號。
  • 只有基礎metric類型實現了Metric接口,metric和它們的vector版本都實現了collector接口。collector負責一系列metrics的采集,但是為了方便,metric也可以“收集自己”。注意:Gauge, Counter, Summary, Histogram, 和Untyped自身就是接口,而GaugeVec, CounterVec, SummaryVec, HistogramVec, 和UntypedVec則不是接口。
  • 為了創建metric和它們的vector版本,需要選擇合適的opts結構體,如GaugeOpts, CounterOpts, SummaryOpts, HistogramOpts, 或UntypedOpts.

Custom Collectors and constant Metrics

  • 實現自己的metric,一般只需要實現自己的collector即可。如果已經有了現成的metric(prometheus上下文之外創建的),則無需使用Metric類型接口,只需要在采集期間將現有的metric映射到prometheus metric即可,此時可以使用 NewConstMetric, NewConstHistogram, and NewConstSummary (以及對應的Must… 版本)來創建metric實例,以上操作在collect方法中實現。describe方法用於返回獨立的Desc實例,NewDesc用於創建這些metric實例。(NewDesc用於創建prometheus識別的metric
  • 如果只需要調用一個函數來收集一個float值作為metric,那么推薦使用GaugeFunc, CounterFunc, 或UntypedFunc。

Advanced Uses of the Registry

  • MustRegister 是注冊collector最通用的方式。如果需要捕獲注冊時產生的錯誤,可以使用Register 函數,該函數會返回錯誤。
  • 如果注冊的collector與已經注冊的metric不兼容或不一致時就會返回錯誤。registry用於使收集的metric與prometheus數據模型保持一致。不一致的錯誤會在注冊時而非采集時檢測到。前者會在系統的啟動時檢測到,而后者只會在采集時發生(可能不會在首次采集時發生),這也是為什么collector和metric必須向Registry describe它們的原因。
  • 以上提到的registry都被稱為默認registry,可以在全局變量DefaultRegisterer中找到。使用NewRegistry可以創建custom registry,或者可以自己實現Registerer 或Gatherer接口。custom registry的Register和Unregister運作方式類似,默認registry則使用全局函數Register和Unregister。
  • custom registry的使用方式還有很多:可以使用NewPedanticRegistry來注冊特殊的屬性;可以避免由DefaultRegisterer限制的全局狀態屬性;也可以同時使用多個registry來暴露不同的metrics。
  • DefaultRegisterer注冊了Go runtime metrics (通過NewGoCollector)和用於process metrics 的collector(通過NewProcessCollector)。通過custom registry可以自己決定注冊的collector。

HTTP Exposition

  • Registry實現了Gather接口。調用Gather接口可以通過某種方式暴露采集的metric。通常metric endpoint使用http來暴露metric。通過http暴露metric的工具為promhttp子包。

 

函數和類型說明:

  • func Register(c Collector) error:使用DefaultRegisterer來注冊傳入的Collector
  • func Unregister(c Collector) bool:使用DefaultRegisterer來移除傳入的Collector的注冊信息
  • type AlreadyRegisteredError:該類型實現了error接口,由Register返回,用於判斷用於注冊的collector是否已經被注冊過
  • type Collector:用於采集prometheus metric,如果運行多個相同的實例,則需要使用ConstLabels來注冊這些實例。實現collector接口需要實現Describe和Collect方法,並注冊collector。
  • type Registerer:負責collector的注冊和去注冊,實現custom registrer時應該實現該接口

帶Must的版本函數只是對不帶Must函數的封裝,增加了panic操作,如:

// MustRegister implements Registerer.
func (r *Registry) MustRegister(cs ...Collector) {
  for _, c := range cs {
    if err := r.Register(c); err != nil {
      panic(err)
    }
  }
}

  文翻譯於https://godoc.org/github.com/prometheus/client_golang/prometheus,該文中提供了prometheus client的接口使用以及對應的例子


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM