易碎的普罗米修斯 java 客户端
Posted
技术标签:
【中文标题】易碎的普罗米修斯 java 客户端【英文标题】:Flaky prometheus java client 【发布时间】:2019-10-17 08:56:22 【问题描述】:我在一个相对简单的应用程序中使用 Prometheus 0.6.0 Java 客户端。我只有两个计数器和两个仪表,它们通过 HTTP REST 端点公开,使用内置的 Prometheus HTTPServer
我看到了非常不稳定的行为。
有时,计数器根本不会注册(例如,在访问 HTTP 端点时从不显示),有时会显示 # HELP
和 # TYPE
行,但不会显示实际指标。我可以在我的本地开发箱中看到片状,并在 kubernetes pod 上部署。
为了进一步缩小范围,我有这段代码来初始化计数器。而且我在致电counter.inc()
时一直收到 NPE。
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
方法发出一个静态方法调用。
void start()
// Initialize stuff for the rest of the app
ApplicationMetrics.initializeMetrics();
我在配置/设置计数器的方式上做错了吗?我无法在普罗米修斯问题列表中找到与此相关的任何内容。
【问题讨论】:
你能包含更多代码来添加一些上下文吗?初始化代码在哪里,你在哪里增加计数器? @Chris 更新了帖子并提供了更多详细信息 【参考方案1】:您正在创建一个带有标签的计数器(.labelNames(tags)
位),这实际上意味着您正在创建多个指标。如:
request_countapi="/users" 15
request_countapi="/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
没有多大意义。
【讨论】:
以上是关于易碎的普罗米修斯 java 客户端的主要内容,如果未能解决你的问题,请参考以下文章