脆弱的prometheus java客户端

脆弱的prometheus java客户端,java,prometheus,prometheus-java,Java,Prometheus,Prometheus Java,我正在一个相对简单的应用程序中使用Prometheus 0.6.0 Java客户端。我只有两个计数器和两个仪表,它们通过HTTP REST端点公开,使用内置的PrometheusHTTPServer,我看到了非常古怪的行为 有时,计数器根本不会被注册(例如,在点击HTTP端点时从不显示),其他时候,#HELP和#TYPE行会显示,但不会显示实际的度量。我可以在我的本地开发盒中看到片状物,也可以在kubernetes吊舱上看到片状物 为了进一步缩小范围,我有一些代码来初始化计数器。我一直在调用co

我正在一个相对简单的应用程序中使用Prometheus 0.6.0 Java客户端。我只有两个计数器和两个仪表,它们通过HTTP REST端点公开,使用内置的Prometheus
HTTPServer
,我看到了非常古怪的行为

有时,计数器根本不会被注册(例如,在点击HTTP端点时从不显示),其他时候,
#HELP
#TYPE
行会显示,但不会显示实际的度量。我可以在我的本地开发盒中看到片状物,也可以在kubernetes吊舱上看到片状物

为了进一步缩小范围,我有一些代码来初始化计数器。我一直在调用
counter.inc()
时得到一个NPE

我用仪表试过上面的方法,得到了同样的错误

对于上下文,将使用以下代码从类
ApplicationMetrics
调用它:

public static Counter counter1;
public static Counter counter2;

static void initializeMetrics() {
    counter1 = Counter.build().name("counter1").help(helpText1).labelNames(tags1).register();
    counter1.inc();

    counter2 = Counter.build().name("counter2").help(helpText2).labelNames(tags2).register();
    counter2.inc();
}
我从主应用程序启动类中的
start
方法发出一个静态方法调用

void start() {
    // Initialize stuff for the rest of the app
    ApplicationMetrics.initializeMetrics();
}

计数器的配置/设置方式是否有问题?我在普罗米修斯发行清单上找不到任何与此相关的信息。

您正在创建一个带有标签的计数器(标签).labelNames(tags)位),这实际上意味着您正在创建多个指标。例如:

request_count{api="/users"} 15
request_count{api="/groups"} 3
所以,当你想增加这些指标中的一个时,你需要说出哪一个

counter1.标签(tagValues1.inc();
否则,如果您实际上只需要一个计数器,只需将
.labelNames(tags1)
调用放到生成器中即可

无论如何,如果您使用的是现实生活中的示例,而不是
“counter1”
标记1
,那么这个问题(和答案)会更加明显:

Counter requestCount=Counter.build()
.name(“请求计数”)
.help(“每个API的请求数”)
.标签名称(“api”)
.register();

那么很明显,直接递增
requestCount
没有多大意义。

您可以包含更多的代码来添加一些上下文吗?初始化代码在哪里?你在哪里增加计数器?@Chris用更多细节更新了帖子
request_count{api="/users"} 15
request_count{api="/groups"} 3