在普罗米修斯中将计数器值初始化为0

Posted

技术标签:

【中文标题】在普罗米修斯中将计数器值初始化为0【英文标题】:initialize counter value to 0 in prometheus 【发布时间】:2021-12-21 17:42:08 【问题描述】:

我使用的是简单的客户端 Prometheus 0.6.0 版

我有一组这样定义的计数器

private static final Counter CD_PRODUCT_SUCCESS_CREATED = new  Counter.Builder()
            .name("cd_Product_success_created")
            .help("product success created.")
            .labelNames("podname")
            .create()
            .register(CollectorRegistry.defaultRegistry);
....
 public List<MetricFamilySamples> collect() 
        List<MetricFamilySamples> samples = new ArrayList<>();
        samples.addAll(CD_PRODUCT_SUCCESS_CREATED.collect());
        ....
        return samples;

public void addCdProductSuccessCreated() 
        CD_PRODUCT_SUCCESS_CREATED.labels(podName).inc();
    

我将这个类注入到我需要它的地方,然后调用诸如 addCdProductSuccessCreated() 之类的方法,但是对于没有值的指标,当我抓取它们时它们看起来是空的:

# HELP cd_Product_success_created
# TYPE cd_Product_success_created counter

我的问题是如何使用值 0 初始化计数器,以便即使未调用 inc 方法也能显示出来

【问题讨论】:

见Existential issues with metrics。您应该能够通过像inc'ing 或set'ting 度量值 排除incset 一样继续进行初始化为零 检查了你发布的文章我不能完全得到答案我应该添加一个静态块 static counter.labels("podname"); ... 像这样? 我不是 Java 开发人员。该示例似乎与您正在执行的操作相匹配,并且应该为您提供一个归零的counter,以便该指标出现在导出器中,您可以将其包含在 PromQL 中。你试过了吗? 【参考方案1】:

找到答案我确实添加了这样的块

static  CD_PRODUCT_SUCCESS_CREATED .labels("podname"); ... 

对于所有指标,现在我可以看到指标的 0.0 值

【讨论】:

以上是关于在普罗米修斯中将计数器值初始化为0的主要内容,如果未能解决你的问题,请参考以下文章

普罗米修斯获得整数计数

从 grafana 中的计数器指标计算值

从文件中解析普罗米修斯指标并更新计数器

普罗米修斯:如果我也将直方图用于同一种指标,使用计数器有啥好处吗?

如何获取警报计数,在普罗米修斯上一周警报触发了多少次

易碎的普罗米修斯 java 客户端