当前位置: 首页 > news >正文

pushgateway的快速使用教程(附Java版通用推送代码)

目录

一、什么是pushgateway?

二、pushgateway的安装 

1、根据系统架构选择对应的安装包

2、安装

3、进入安装目录的bin目录进行启动

4、Prometheus配置 pushgateway

5、重启Prometheus 

三、java代码推送指标到pushgateway 

1、引入依赖

2、配置类 

3、推送指标工具类 

4、接收指标信息实体类


一、什么是pushgateway?

       Pushgateway 是 Prometheus 生态系统中的一种独特数据采集方式,它采用了被动推送的模式来获取监控数据。作为一个独立的插件,Pushgateway 可以灵活地运行在任何节点上,而不必局限于被监控的客户端。用户可以通过自定义编写的脚本,将需要监控的数据发送至 Pushgateway。随后,Pushgateway 会将这些数据推送至 Prometheus Server,从而实现数据的集中管理和监控。

       也就是说,如果我们需要监控的对象的指标无法通过Prometheus的exporter直接获取,我们可以采用其他方法自行采集这些指标。随后,将这些采集到的指标推送至Pushgateway,Prometheus再从Pushgateway中拉取这些指标数据,以此实现通过Prometheus进行统一监控的目的。

        

二、pushgateway的安装 

1、根据系统架构选择对应的安装包

     下载安装包地址:https://github.com/prometheus/pushgateway/releases

这里我们使用的服务器的系统架构是amd的,所以我们就下载对应amd的安装包即可。

2、安装

     解压即安装。

tar -zxvf   pushgateway-1.10.0.linux-amd64.tar.gz

3、进入安装目录的bin目录进行启动

  nohup ./pushgateway  &


访问地址:http://127.0.0.1:9091/metrics ,出现如下页面便是访问成功!

4、Prometheus配置 pushgateway

     在Prometheus的配置文件prometheus.yml文件中增加如下配置:

  - job_name: pushgateway
    honor_labels: true  ##加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖
    static_configs:
      - targets: ['127.0.0.1:9091']
        labels:
          instance: pushgateway
          service: pushgatewayservice

5、重启Prometheus 

 使用如下命令,查出Prometheus进程的pid

lsof -i:19090

  使用如下命令,直接杀死Prometheus进程

kill -9 [pid]

使用如下命令,重新启动Prometheus

  nohup ./prometheus --config.file=prometheus.yml --web.listen-address=0.0.0.0:19090 &     

 此时,登录Prometheus的管理界面,便可以看得,pushgateway便已经接入Prometheus的监控中。

三、java代码推送指标到pushgateway 

1、引入依赖

<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient</artifactId><version>0.15.0</version>
</dependency><dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_pushgateway</artifactId><version>0.15.0</version>
</dependency>
2、配置类 
@Configuration
public class PushGateWayConfig {@Value("${prometheus.pushGateway.ip}")private String pushGatewayIp;@Value("${prometheus.pushGateway.port}")private String pushGatewayPort;@Beanpublic PushGateway pushGateway() {return new PushGateway(pushGatewayIp + ":" + pushGatewayPort);}}
3、推送指标工具类 
@Component
public class PushGatewayUtils {@Autowiredprivate PushGateway pushGateway;@Value("${prometheus.pushGateway.port}")private String pushGatewayPort;/*** 子指标,标签名,统一就是subCode*/private final static String LABEL_NAME = "subCode";/*** @Description: 往pushgateway批量发送指标* @Date: 2024/10/17  9:23* @Param paramList: 指标集合* @Param ip: 监控对象的ip* @return: void**/public void sendMetrics(List<PushMetricToPrometheusParam> paramList, String ip) throws IOException {Map<String, String> insMap = new HashMap<>();insMap.put("instance", ip + ":" + pushGatewayPort);CollectorRegistry registry = new CollectorRegistry();try {for (PushMetricToPrometheusParam param : paramList) {//有子指标if (param.getIsHaveChildMetric()) {Gauge duration = Gauge.build().name(param.getParamName()).labelNames(LABEL_NAME).help(param.getHelpInfo()).register(registry);//设置各个子指标的值for (int i = 0; i < param.getLabelValues().length; i++) {duration.labels(param.getLabelValues()[i]).set(param.getMetricValues()[i]);}} else {//无子指标Gauge duration = Gauge.build().name(param.getParamName()).help(param.getHelpInfo()).register(registry);duration.set(param.getMetricValues()[0]);}}} finally {pushGateway.push(registry, "custom_metrics_job", insMap);}}
}
4、接收指标信息实体类
@Data
@Accessors(chain = true)
public class PushMetricToPrometheusParam {private String paramName;private String helpInfo;/*** 是否有子指标,默认有*/private Boolean isHaveChildMetric = true;/*** 子指标,标签名,默认值就是subCode,子指标名称最好也是设置成这个*/
/*    private String[] labelNames = {"subCode"};*//*** 子指标标签名对应的值*/private String[] labelValues;/*** 指标值,如果是多子指标,子指标标签名、标签值、该子指标的值,就是通过在数组中的位置一一对应*/private Double[] metricValues;
}

想要往pushgateway推送指标直接使用步骤3的工具类的方法sendMetrics进行推送即可。推送后访问该地址http://127.0.0.1:9091/metrics ,便可以看到你推送的指标。


http://www.mrgr.cn/news/55663.html

相关文章:

  • 什么是 SQL 注入攻击?如何防止 SQL 注入?
  • SQL 自学:事务处理的COMMIT 和 ROLLBACK 语句的运用
  • ant design vue TimePicker时间选择器不点击确认也可以设置值
  • AI驱动的支持截图或线框图快速生成网页应用的开源项目
  • 接口测试(四)jmeter——文件上传
  • 嵌软面试一百问(持续更新中)
  • EWM 库存盘点
  • 数组转List
  • Python机器学习中的主成分分析(PCA)全面解析与应用
  • jmeter学习(8)界面的使用
  • 旧电脑安装Win11提示“这台电脑当前不满足windows11系统要求”,安装中断。怎么办?
  • 比亚迪智驾变阵:整合自研,冲刺量产,目标让10万级也搭NOA
  • 红队老子养成记3 - 学会反弹shell的多种姿势,拿shell拿手软!!(全网最多姿势!)
  • IO编程——消息队列
  • 【H2O2|全栈】JS入门知识(五)
  • 碰到这个问题请更新或重新安装fastapi版本
  • 时序分解 | Matlab实现EEMD+SE集合经验模态分解+样本熵计算的时间序列信号分解
  • Android 性能之 Game Mode
  • 基于微信小程序的驾校预约系统设计与实现
  • P3924 康娜的线段树
  • 2025医药化工水处理新技术、新工艺、新装备发展论坛3月4日济南举办
  • 【VUE小型网站开发】优化通用配置
  • 【Docker技术详解】(一)Docker镜像文件系统的关系和交互
  • 27.3 一致性哈希算法介绍
  • 142 环形链表II
  • Vim使用与进阶