0

我在一个相对简单的应用程序中使用 Prometheus 0.6.0 Java 客户端。我只有两个计数器和两个仪表,它们通过 HTTP REST 端点公开,使用内置的 PrometheusHTTPServer 我看到了非常不稳定的行为。

有时,计数器根本不会被注册(例如,在访问 HTTP 端点时从不显示),有时会显示# HELPand# TYPE行,但不会显示实际的指标。我可以在我的本地开发盒中看到片状,并在 kubernetes pod 上部署。

为了进一步缩小范围,我有这段代码来初始化计数器。而且我一直在调用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我的主应用程序启动类中的方法发出静态方法调用。

void start() {
    // Initialize stuff for the rest of the app
    ApplicationMetrics.initializeMetrics();
}

我对计数器的配置/设置方式做错了吗?我无法在普罗米修斯问题列表中找到任何关于此的内容。

4

1 回答 1

2

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

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

因此,当您想增加其中一项指标时,您需要说出是哪一项。

counter1.labels(tagValues1).inc();

否则,如果您实际上只想要一个计数器,只需将.labelNames(tags1)呼叫挂断给构建器即可。

"counter1"无论如何,如果您使用现实生活中的示例而不是and ,这个问题(和答案)会更加明显tags1

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

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

于 2019-06-13T08:31:17.040 回答