将自定义标签注入Java客户端的默认jmx Prometheus度量中

将自定义标签注入Java客户端的默认jmx Prometheus度量中,prometheus,prometheus-java,Prometheus,Prometheus Java,我们的系统由多个基于JAVA的微服务组成,每个微服务报告其RT状态 集成代码看起来非常简单 // Initialize default JVM metrics for Prometheus DefaultExports.initialize(); DeploymentInfo monitoringServletInfo = Servlets.deployment() .setClassLoader(MonitoringServer.class.getCl

我们的系统由多个基于JAVA的微服务组成,每个微服务报告其RT状态

集成代码看起来非常简单

// 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
我们的目的是添加一个自定义标签,如,那么它将是超级容易分开比在格拉法纳

jvm_buffer_pool_used_bytes{pool="direct",service="foo"} 116776.0
我想相信lib必须有这样的能力,不幸的是谷歌搜索它一段时间并没有这么成功


任何想法都将不胜感激。

我强烈建议将其用于该工作。那是

a) 更易于集成和

b) 您也可以添加所谓的 “”这正是您想要的(MicroEther使用术语“标记”而不是“标签”,但概念相同)

特别是对于JVM也通过JMX提供的“默认”指标,它有一个简单的集成:

new JvmMemoryMetrics().bindTo(registry);

你在你的普罗米修斯指标中得到了所有的记忆指标。(有关更多信息,请参阅)

感谢您回答我的问题,但是,我们不能使用其他库。似乎我通过提供定制MetricsServlet.class实现找到了解决方法。我只是好奇,是什么阻碍了您使用另一个库?我们的系统基于数十种微服务。据我所知,千分尺使用稍微不同的度量名称,移动到千分尺意味着,不合理的代码重构和Grafana仪表盘的调整,这是不值得的。
new JvmMemoryMetrics().bindTo(registry);