使用 Prometheus 监控 Java 网络应用程序

Monitor Java web-app using Prometheus

我在 Tomcat 上获得了一个简单的 java Web 应用程序 运行,我想使用 Prometheus 对其进行监控。 我使用 the official client 在我的 java 应用程序中添加了一些计数器和仪表,我在另一台服务器上安装了 Prometheus,不想使用 Prometheus 从我的 java 应用程序中提取指标。

Prometheus 得到了 tons of exporters,但我不清楚哪个适合我的用例。 我考虑过使用 Prometheus push gateway but according to the documentation Pushgateway 的唯一有效用例是用于捕获服务级批处理作业的结果,这不是我的情况。 我应该怎么做才能从我的 java 应用程序中提取指标?

您应该让您的应用程序通过 HTTP 公开指标。您可能希望将 servlet 连接到您现有的网络服务器。

为了注册MetricsServlet:

如果您正在使用 spring-boot 注册一个 bean 来表示端点:

@Bean
ServletRegistrationBean registerPrometheusExporterServlet(CollectorRegistry metricRegistry) {
    ServletRegistrationBean srb = new ServletRegistrationBean();
    srb.setServlet(new MetricsServlet(metricRegistry));
    srb.setUrlMappings(Arrays.asList("/prometheus"));
    return srb;
}

如果是非 spring 应用程序,请在 web.xml:

中添加 servlet
<servlet>
        <servlet-name>metrics</servlet-name>
        <servlet-class>io.prometheus.client.exporter.MetricsServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>metrics</servlet-name>
    <url-pattern>/metrics/</url-pattern>
</servlet-mapping>