使用 Jax-Rs 将 Prometheus 指标端点添加到 Java 应用程序
Add Prometheus Metrics Endpoint to Java App Using Jax-Rs
我正在尝试将 Prometheus 指标导出器添加到我的 Java 应用程序。该应用当前正在使用 javax.ws.rs
定义 REST 端点。
例如:
Import javax.ws.rs.*;
Import javax.ws.rs.core.MediaType;
Import javax.ws.rs.core.Response;
@GET
@Path(“/example”)
@Timed
Public Response example(@QueryParam(“id”) Integer id) {
return Response.ok(“testing”)
}
我在 Java 中找到的用于设置 Prometheus 的所有示例都使用 Spring。他们提出以下建议:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import io.prometheus.client.exporter.HTTPServer;
import java.io.IOException;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
try {
HTTPServer server = new HTTPServer(8081);
} catch (IOException e) { e.printStackTrace(); }
}
}
有没有一种方法可以在我当前的设置中简单地定义一个新端点,例如:
@GET
@Path(“/metrics”)
@Timed
Public Response example {
return Response.ok(“return prom metrics here”)
}
无需将 Spring
引入堆栈?
这可以按如下方式完成:
import io.prometheus.client.Counter;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.exporter.TextFormat;
CollectorRegistry registry = new CollectorRegistry();
Counter exCounter = Counter.build().name(“example”).register(registry);
@GET
@Path(“/metrics”)
Public String getMetrics() {
Writer writer = new StringWriter();
try {
TextFormat.write004(writer, registry.metricFamilySamples());
return writer.toString();
} catch (IOException e) {
return “error”;
}
}
我正在尝试将 Prometheus 指标导出器添加到我的 Java 应用程序。该应用当前正在使用 javax.ws.rs
定义 REST 端点。
例如:
Import javax.ws.rs.*;
Import javax.ws.rs.core.MediaType;
Import javax.ws.rs.core.Response;
@GET
@Path(“/example”)
@Timed
Public Response example(@QueryParam(“id”) Integer id) {
return Response.ok(“testing”)
}
我在 Java 中找到的用于设置 Prometheus 的所有示例都使用 Spring。他们提出以下建议:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import io.prometheus.client.exporter.HTTPServer;
import java.io.IOException;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
try {
HTTPServer server = new HTTPServer(8081);
} catch (IOException e) { e.printStackTrace(); }
}
}
有没有一种方法可以在我当前的设置中简单地定义一个新端点,例如:
@GET
@Path(“/metrics”)
@Timed
Public Response example {
return Response.ok(“return prom metrics here”)
}
无需将 Spring
引入堆栈?
这可以按如下方式完成:
import io.prometheus.client.Counter;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.exporter.TextFormat;
CollectorRegistry registry = new CollectorRegistry();
Counter exCounter = Counter.build().name(“example”).register(registry);
@GET
@Path(“/metrics”)
Public String getMetrics() {
Writer writer = new StringWriter();
try {
TextFormat.write004(writer, registry.metricFamilySamples());
return writer.toString();
} catch (IOException e) {
return “error”;
}
}