Я пытаюсь перенести мои метрики Прометея в микрометры, но теперь я застрял здесь с одной вещью ...
На данный момент у меня есть гистограмма Прометея, настроенная следующим образом:
private static final Histogram REQUEST_DURATION = Histogram
.build("http_request_duration_milliseconds", "Duration in milliseconds for processing a request.")
.labelNames("http_method", "http_status", "java_class", "java_method")
.buckets(10, 25, 50, 100, 500, 1000)
.register();
Так что для переключения на микрометр я заменил его следующим образом:
Timer.builder("http.request.duration")
.description("Duration in seconds for processing a request.")
.sla(Duration.ofMillis(10), Duration.ofMillis(25), Duration.ofMillis(50), Duration.ofMillis(100), Duration.ofMillis(500), Duration.ofMillis(1000), Duration.ofMillis(5000))
.register(registry);
Ok. Давайте посмотрим, как я хочу это использовать ... На данный момент я просто звоню
REQUEST_DURATION.labels(httpMethod, httpStatus, javaClass, javaMethod).observe(milliseconds);
Так что я заменил это на
Metrics.timer("http.request.duration",
"http.method", httpMethod,
"http.status", httpStatus,
"java.class", javaClass,
"java.method", javaMethod)
.record(Duration.ofNanos(nanoseconds));
Но проблема сейчас в том, что Микрометр жалуется, что я ранее настроил метрику без этих тегов. Конечно, я сделал, потому что я не знаю значения на тот момент. Вот исключение:
java.lang.IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter containing tag keys []. The meter you are attempting to register has keys [http.method, http.status, java.class, java.method].
Ok. Итак, я подумал, тогда давайте определим сегменты с помощью вызова Metrics.timer
. Но это не работает, потому что нет способа передачи этих значений.
Итак ... Как я могу установить sla
сегментов и tags
для моей метрики?