片状普罗米修斯 java 客户端
Flaky prometheus java client
我在一个相对简单的应用程序中使用 Prometheus 0.6.0 Java 客户端。我只有两个计数器和两个仪表,它们通过 HTTP REST 端点公开,使用内置的 Prometheus HTTPServer
我看到了非常不稳定的行为。
有时,计数器根本不会被注册(例如,在访问 HTTP 端点时从不显示),有时会显示 # HELP
和 # TYPE
行,但不会显示实际指标。我能够在我的本地开发箱和部署在 kubernetes pods.
上看到这种脆弱性
为了进一步缩小范围,我有这段代码来初始化计数器。而且我在 counter.inc()
.
的电话中一直收到 NPE
Counter counter = Counter.build().name("counter").help(helpText).labelNames(tags).register();
counter.inc();
我用仪表试过上面的方法,我得到了同样的错误。
对于上下文,这是从 class 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();
}
并且我在主应用程序启动 class.
中从 start
方法发出静态方法调用
void start() {
// Initialize stuff for the rest of the app
ApplicationMetrics.initializeMetrics();
}
我是不是在计数器 configured/set 上做错了什么?我无法在普罗米修斯问题列表中找到与此相关的任何内容。
您正在创建一个带有标签的计数器(.labelNames(tags)
位),这实际上意味着您正在创建多个指标。如:
request_count{api="/users"} 15
request_count{api="/groups"} 3
因此,当您想增加其中一个指标时,您需要说明是哪个指标。
counter1.labels(tagValues1).inc();
否则,如果您实际上只需要一个计数器,只需放弃对构建器的 .labelNames(tags1)
调用。
无论如何,如果您使用 real-life 示例而不是 "counter1"
和 tags1
:
,这个问题(和答案)会更加明显
Counter requestCount = Counter.build()
.name("request_count")
.help("Number of requests, per API")
.labelNames("api")
.register();
那么很明显,直接递增 requestCount
没有多大意义。
我在一个相对简单的应用程序中使用 Prometheus 0.6.0 Java 客户端。我只有两个计数器和两个仪表,它们通过 HTTP REST 端点公开,使用内置的 Prometheus HTTPServer
我看到了非常不稳定的行为。
有时,计数器根本不会被注册(例如,在访问 HTTP 端点时从不显示),有时会显示 # HELP
和 # TYPE
行,但不会显示实际指标。我能够在我的本地开发箱和部署在 kubernetes pods.
为了进一步缩小范围,我有这段代码来初始化计数器。而且我在 counter.inc()
.
Counter counter = Counter.build().name("counter").help(helpText).labelNames(tags).register();
counter.inc();
我用仪表试过上面的方法,我得到了同样的错误。
对于上下文,这是从 class 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();
}
并且我在主应用程序启动 class.
中从start
方法发出静态方法调用
void start() {
// Initialize stuff for the rest of the app
ApplicationMetrics.initializeMetrics();
}
我是不是在计数器 configured/set 上做错了什么?我无法在普罗米修斯问题列表中找到与此相关的任何内容。
您正在创建一个带有标签的计数器(.labelNames(tags)
位),这实际上意味着您正在创建多个指标。如:
request_count{api="/users"} 15
request_count{api="/groups"} 3
因此,当您想增加其中一个指标时,您需要说明是哪个指标。
counter1.labels(tagValues1).inc();
否则,如果您实际上只需要一个计数器,只需放弃对构建器的 .labelNames(tags1)
调用。
无论如何,如果您使用 real-life 示例而不是 "counter1"
和 tags1
:
Counter requestCount = Counter.build()
.name("request_count")
.help("Number of requests, per API")
.labelNames("api")
.register();
那么很明显,直接递增 requestCount
没有多大意义。