片状Prometheus Java客户端

时间:2019-05-31 17:44:38

标签: java prometheus prometheus-java

我在一个相对简单的应用程序中使用Prometheus 0.6.0 Java客户端。我所拥有的只有两个计数器和两个量规,并且它们使用内置的Prometheus select v.score, count(s.score) as [countTimes] from (values (1), (2), (3), (4) ) v(score) left join ScoresTable s on s.score = v.score group by v.score; 通过HTTP REST端点公开,并且我看到非常不稳定的行为。

有时,计数器根本不会注册(例如,在到达HTTP端点时永远不会显示),而有时会显示HTTPServer# HELP行,但不会显示实际指标。我可以在本地开发人员框中看到脆弱性,并且可以在kubernetes容器中部署。

为了进一步缩小范围,我有这段代码来初始化计数器。而且,在向# TYPE的通话中,我一直得到NPE。

counter.inc()

我使用量规尝试了上述操作,但得到了相同的错误。

对于上下文,这是使用以下代码从类Counter counter = Counter.build().name("counter").help(helpText).labelNames(tags).register(); counter.inc(); 中调用的:

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

我对计数器的配置/设置有误吗?我无法在普罗米修斯问题列表中找到与此相关的任何内容。

1 个答案:

答案 0 :(得分:1)

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

request_count{api="/users"} 15
request_count{api="/groups"} 3

因此,当您想增加这些指标之一时,您需要说出哪一个。

counter1.labels(tagValues1).inc();

否则,如果您实际上只想要一个计数器,只需将.labelNames(tags1)调用放到构建器即可。

无论如何,如果您使用真实示例而不是"counter1"tags1,那么这个问题(和答案)会更加明显:

Counter requestCount = Counter.build()
    .name("request_count")
    .help("Number of requests, per API")
    .labelNames("api")
    .register();

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