监测与采集
指标监测
通过Prometheus提供的客户端库可以向代码添加额外的监测代码,这些客户端库实现了Prometheus的指标类型,可以让你定义自己的内部应用度量指标并通过HTTP将这些指标数据发布给Prometheus服务器。
Prometheus为大多数开发语言提供了客户端库。如果现有的库不适合你的应用或者想避免依赖,可以参照指标格式提供自己的实现。
监测代码开发
客户端库
客户端库的关键类是Collector,它有一个方法(通常称为“collect
”),返回零个或多个指标及其样本。采集器(Collectors)注册到CollectorRegistry,通过将CollectorRegistry传递到一个“桥接”类/方法/函数,这个“桥接”类/方法/函数以Prometheus支持的格式返回指标数据。每次抓取时,CollectorRegistry必须回调每一个注册的采集器的collect
方法。
大多数用户使用的接口是Counter,Gauge,Histogram和Summary采集器,这些接口代表单一指标,可以涵盖绝大多数用户的需求用例。 更高级的用例(例如从另一个监视/度量的系统进行代理)需要编写自定义收集器。
CollectorRegistry提供了register()
/unregister()
函数,并且允许收集器注册到多个CollectorRegistry。
客户端库是线程安全的。
度量指标
客户端库实现一个默认的CollectorRegistry,标准的指标默认会注册到这里而不需要用户参与。客户端库也提供将指标注册到其它CollectorRegistry的方法。
class YourClass {
static final Counter requests = Counter.build()
.name("requests_total")
.help("Requests.").register();
}
上述示例代码将requests注册到默认的CollectorRegistry。
Counter提供如下方法:
inc(): Counter值增1
inc(double v):将计数器增加给定的数量,v>=0。
Gauge表示一个可上下浮动的值,Gauge提供如下方法:
- inc(): gauge的值增1
- inc(double v): gauge的值增指定的数量
- dec(): gauge的值减1
- dec(double v): gauge的值减指定的数量
- set(double v): 设定gauge为给定的值
指标发布
发布器
Prometheus提供了一些官方的指标发布器,例如JMX exporter可以从各种基于JVM的应用程序发布指标,例如Kafka和Cassandra。同时,第三方也提供了众多的指标发布器。