Вставить настраиваемую метку в метрики jmx Prometheus по умолчанию для клиента Java

Наша система состоит из нескольких микросервисов на основе JAVA, каждый из которых сообщает о своем статусе RT, используя io.prometheus simpleclient

Код интеграции выглядит довольно просто

// Initialize default JVM metrics for Prometheus
    DefaultExports.initialize();

    DeploymentInfo monitoringServletInfo = Servlets.deployment()
            .setClassLoader(MonitoringServer.class.getClassLoader())
            .setContextPath("/")
            .setDeploymentName("monitoring")
            .addServlet(Servlets.servlet(MetricsServlet.class).addMapping("/*"));

    DeploymentManager monitoringDeployment = Servlets.defaultContainer().addDeployment(monitoringServletInfo);
    monitoringDeployment.deploy();
    HttpHandler monitoringHandler = monitoringDeployment.start();

    server = Undertow.builder()
            .addHttpListener(port, "0.0.0.0")
            .setHandler(
                    Handlers.path().addExactPath(HEALTH_PATH, new HealthHandler())
                            .addExactPath(MONITORING_PATH, monitoringHandler))
            .build();

    server.start();

Поскольку все микросервисы имеют одно и то же имя метрик, мы ищем способ их различать, предоставляя настраиваемую метку для каждого микросервиса.

например, эта метрика имеет следующее определение

jvm_buffer_pool_used_bytes{pool="direct",} 116776.0

наша цель - добавить собственный ярлык, например, тогда его будет намного проще отделить, чем в Grafana.

jvm_buffer_pool_used_bytes{pool="direct",service="foo"} 116776.0

Я хочу верить, что у библиотеки должна быть такая возможность, к сожалению, поиск в Google на какое-то время не был таким успешным

Любая идея будет оценена по достоинству.


person Denis Voloshin    schedule 11.04.2021    source источник


Ответы (1)


Я настоятельно рекомендую использовать для этой работы микрометр. Который

а) проще интегрировать и

б) вы также можете добавить так называемые общие теги, которые вам нужны ( Micromether использует термин тег вместо метки, но концепция та же).

registry.config().commonTags("service", "someService");

Специально для метрик по умолчанию, которые JVM предоставляет также через JMX, она имеет простую интеграцию:

new JvmMemoryMetrics().bindTo(registry);

и у вас есть все метрики памяти в ваших метриках Prometheus. (дополнительную информацию см. здесь)

person Jens Baitinger    schedule 12.04.2021
comment
Спасибо, что ответили на мои вопросы, однако мы не можем использовать альтернативную библиотеку. Похоже, я нашел способ решить эту проблему, предоставив настраиваемую реализацию MetricsServlet.class. - person Denis Voloshin; 12.04.2021
comment
просто из любопытства, что мешает вам использовать другую библиотеку? - person Jens Baitinger; 12.04.2021
comment
наша система основана на десятках микросервисов. Насколько мне известно, Micrometer использует несколько другие названия метрик, переход на Micrometer означает неоправданный рефакторинг кода и корректировку дашбордов Grafana, это того не стоит. - person Denis Voloshin; 12.04.2021