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