Flaky Прометей Java-клиент - PullRequest
0 голосов
/ 31 мая 2019

Я использую Java-клиент Prometheus 0.6.0 в относительно простом приложении.Все, что у меня есть, это два счетчика и два датчика, и они выставляются через конечную точку HTTP REST, используя встроенный Прометей HTTPServer И я наблюдаю довольно странное поведение.

Иногда счетчики выигрывали 'не регистрироваться вообще (например, никогда не показываться при достижении конечной точки HTTP), в других случаях отображаются строки # HELP и # TYPE, но не фактическая метрика.Я могу видеть ошибки как в своем локальном окне разработчика, так и в развертывании на kubernetes pods.

Чтобы сузить это, у меня есть немного кода для инициализации счетчика.И я последовательно получаю 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 метода в моем главном классе запуска приложения.

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

Что-то не так с настройкой / настройкой счетчиков?Я не смог ничего найти в списке проблем Прометея по этому поводу.

1 Ответ

1 голос
/ 13 июня 2019

Вы создаете счетчик с метками (бит .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 напрямую не имеет особого смысла.

...