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;

    @Bean
    public PushGateway pushGateway() {
        return new PushGateway(pushGatewayIp + ":" + pushGatewayPort);
    }


}
3、推送指标工具类 
@Component
public class PushGatewayUtils {

    @Autowired
    private 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 ,便可以看到你推送的指标。

上一篇:【Flutter】状态管理:高级状态管理 (Riverpod, BLoC)


下一篇:Prisma ORM 第四章 表之间关系的建立和删除-2. connectOrCreate