首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang prometheus包的使用

golang prometheus包的使用

作者头像
charlieroro
发布2020-03-24 12:09:23
2.5K0
发布2020-03-24 12:09:23
举报
文章被收录于专栏:charlierorocharlieroro

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的接口使用以及对应的例子

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Metrics
  • Custom Collectors and constant Metrics
  • Advanced Uses of the Registry
  • HTTP Exposition
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档