本文共 2805 字,大约阅读时间需要 9 分钟。
关于推送(PUSH)模式,Prometheus本身并不支持直接推送数据,但官方提供了PushGateway组件,通过这个组件可以实现数据的推送。PushGateway作为一个独立部署的代理服务,其主要职责是接收来自客户端的数据,并将这些数据存储在本地。为了防止数据丢失,PushGateway支持本地存储数据,存储时间可通过参数--persistence.interval配置(默认为5分钟)。
需要注意的是,即使PushGateway接收到客户端的数据,Prometheus在拉取时也只会获取到最后一次推送的数据。为了防止PushGateway成为单点故障,建议在前面部署Nginx进行负载均衡,实现多节点部署。
在Prometheus配置文件中,需要添加PushGateway作为目标。示例配置如下:
job_name: 'pushgateway'scrape_interval: 10shonor_labels: truestatic_configs:- targets: ['localhost:9091'] labels: instance: pushgateway
配置完成后重启Prometheus,PushGateway应会显示为UP状态。
import io.prometheus.client.CollectorRegistry;import io.prometheus.client.Gauge;import io.prometheus.client.Timer;import io.prometheus.client.Counter;import io.prometheus.client.Summary;import io.prometheus.client.PushGateway;public class PushExample { public static void main(String[] args) throws Exception { // 创建一个示例Gauge Gauge gauge = Gauge.build("my_gauge_metric", "这是一个自定义指标") .labelNames("aaa", "bbb") .register(); // 创建一个带标签的Gauge子项 Gauge.Child gaugeChild = gauge.labels("AAA", "BBB"); gaugeChild.set(334.5); // 创建一个示例Timer Gauge gaugeTimer = Gauge.build("my_timer_metric", "这是一个示例Timer") .register(); Timer timer = gaugeTimer.startTimer(); Thread.sleep(3000L); timer.stop(); // 创建一个示例Counter Counter counter = Counter.build("my_counter_metric", "这是一个示例Counter") .register(); counter.inc(); counter.inc(); // 创建一个示例Summary Summary summary = Summary.build("my_summary_metric", "这是一个示例Summary") .register(); summary.observe(45.6); summary.observe(54.5); // 初始化PushGateway String pushUrl = "xxx.xxx.xxx.xxx:9091"; PushGateway pg = new PushGateway(pushUrl); // 将注册到的所有指标一起推送 pg.pushAdd(CollectorRegistry.defaultRegistry, "my_job", null); }} 以上代码演示了如何对四种常见指标(Gauge, Timer, Counter, Summary)进行推送。推送后,可以在Prometheus中查看这些指标的数据。
转载地址:http://iyxkz.baihongyu.com/