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