如何将 Spring 引导执行器上的指标拆分为单独的端点/端口



我正在使用Spring Boot 2.x和Prometheus。

我想公开一个端点:端口,普罗米修斯可以抓取它与执行器路线上的其余端点分开。

这是为了允许围绕执行器与指标使用不同的安全模型,有谁知道这是否可能以及如何?

这是我从Slack频道得到的答案。希望这有帮助

Spring Boot 上的默认 Prometheus 端点由此类公开 https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/export/prometheus/PrometheusScrapeEndpoint.java

您可以在下面创建具有不同 ID 的第二个类

@WebEndpoint(id = "prometheus")

这将公开第二个终结点。然后,您可以将 Prometheus 配置为使用不同的抓取间隔抓取两个单独的端点

你可以使用io.prometheus。

添加到您的pom.file

<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>${prom.version}</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>${prom.version}</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_httpserver</artifactId>
<version>${prom.version}</version>
</dependency>

并创建这样的类

@Configuration
@ComponentScan(basePackageClasses = MetricConfiguration.class)
public class MetricConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(MetricConfiguration.class);
private HTTPServer server;
private static final int DEFAULT_PORT = 28080;
@PostConstruct
private void init() {
DefaultExports.initialize();
server = new HTTPServer(DEFAULT_PORT);
LOGGER.info("prometheus exporter started on port {}", DEFAULT_PORT);
}
@PreDestroy
private void destroy() {
server.stop();
LOGGER.info("prometheus exporter stopped");
}
}

在应用程序上享受指标:28080/指标

最新更新