Flaky Прометей Java-клиент

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

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

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

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

0 ответов

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

Другие вопросы по тегам