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 子包
本文翻译于 https://godoc.org/github.com/prometheus/client_golang/prometheus, 该文中提供了 prometheus client 的接口使用以及对应的例子
来源: http://www.bubuko.com/infodetail-2543033.html