我在一个相对简单的应用程序中使用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
我对计数器的配置/设置有误吗?我无法在普罗米修斯问题列表中找到与此相关的任何内容。
答案 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
并没有多大意义。