首页 > 解决方案 > 在 Spring Boot 中使用 Prometheus 推送网关 simpleclient 时出现无效推送指标问题

问题描述

我正在使用 prometheus 简单客户端通过 Spring Boot 应用程序在我的系统中收集指标

void insertBatchJob(String request , String[] labelNames, String[] labelValues,String counter) throws Exception {
            CollectorRegistry registry = new CollectorRegistry();
            Gauge inprogressRequests ;
            if( !gaugeRegiseryMap.containsKey(request) ) {
                inprogressRequests = Gauge.build()
                        .name(request).labelNames(labelNames).help(request).register();
                gaugeRegiseryMap.put(request,inprogressRequests);
            }else{
                inprogressRequests = gaugeRegiseryMap.get(request);
            }
            try {
                inprogressRequests.labels(labelValues[labelValues.length-4],
                        labelValues[labelValues.length-2],
                        labelValues[labelValues.length-3],
                        labelValues[labelValues.length-1]).set(Double.parseDouble(counter));
                registry.register(inprogressRequests);
            } finally {
                PushGateway pg = new PushGateway("127.0.0.1:9091");
                pg.pushAdd(registry, request);
            }
        }

以下代码正在运行,但是当我通过包含标签值的数组时更改 inprogressRequests.labels() 即

` 

    void insertBatchJob(String request , String[] labelNames, String[] labelValues,String counter) throws Exception {
            CollectorRegistry registry = new CollectorRegistry();
            Gauge inprogressRequests ;
            if( !gaugeRegiseryMap.containsKey(request) ) {
                inprogressRequests = Gauge.build()
                        .name(request).labelNames(labelNames).help(request).register();
                gaugeRegiseryMap.put(request,inprogressRequests);
            }else{
                inprogressRequests = gaugeRegiseryMap.get(request);
            }
            try {
                inprogressRequests..labels(labelValues).set(Double.parseDouble(counter));
                registry.register(inprogressRequests);
            } finally {
                PushGateway pg = new PushGateway("127.0.0.1:9091");
                pg.pushAdd(registry, request);
            }
        }` 

同样给我错误-

来自http://127.0.0.1:9091/metrics/job/loop6_2的响应代码为 400,响应正文:推送的指标无效或与现有指标不一致:收集的指标。

这是我第一次使用 prometheus ,如果有人可以分享这一点会很好。

标签: spring-bootprometheusprometheus-pushgateway

解决方案


尝试推送一个空指标,当您尝试一次推送两次相同的指标时会发生此问题。例如,将多个具有相同实验室的样本添加到指标中,或者如果 pushgateway 重新启动,您将无法发送相同的指标再次,您必须先将其删除。

见:https ://github.com/prometheus/pushgateway/blob/master/README.md

在状态码 400


推荐阅读