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

  • 相关阅读:
    Partial Tree(DP)
    Petya and Array (权值线段树+逆序对)
    Tomb Raider(暴力模拟)
    Tunnel Warfare (区间合并|最大值最小值巧妙方法)
    Array Product(模拟)
    Saving Tang Monk II(bfs+优先队列)
    Water Tree(树链剖分+dfs时间戳)
    Tree(树链剖分+线段树延迟标记)
    Jiu Yuan Wants to Eat(树链剖分+线段树延迟标记)
    旅行(树链剖分+动态开点线段树)
  • 原文地址:https://www.cnblogs.com/charlieroro/p/8670959.html
Copyright © 2020-2023  润新知