如何在 Spring Boot 中为 prometheus 制作自己的指标
Posted
技术标签:
【中文标题】如何在 Spring Boot 中为 prometheus 制作自己的指标【英文标题】:How to make own metrics in Spring Boot for prometheus 【发布时间】:2021-08-10 14:32:27 【问题描述】:@GetMapping(value = "/ownMetrics")
public String ownMetrics()
return "ownmetrics_ageName=\"Age\", " + age;
我想制作我自己的指标,并且采用 prometheus 可以读取的正确格式。
【问题讨论】:
【参考方案1】:您可以将Micrometer 用于自定义指标并将其公开给prometheus。如果您使用的是 gradle,请添加以下依赖项:
dependencies
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// metrics: micrometer + prometheus
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus:1.6.6'
在您的服务类中添加MeterRegistry
和Counter
。启动Counter
并调用此计数器的incrementer
。在我的示例中是bidderCallsCounter.increment();
。我将指标名称定义为bidder.calls
,Prometheus 将用_
替换.
。
@Slf4j
@Service
public class YourService
private MeterRegistry meterRegistry;
private Counter bidderCallsCounter;
public YourService(MeterRegistry meterRegistry)
this.meterRegistry = meterRegistry;
private void initBidderCallCounter()
// CREATE A COUNTER
bidderCallsCounter = this.meterRegistry.counter("bidder.calls", "type", "bidder");
private Stream<Flux<BidResponse>> bidResponseStreamMono(Mono<BidRequest> bidRequestMono)
return biddersWebClient.stream()
.map(bidderWebClient ->
// THE INCREMENTER
bidderCallsCounter.increment();
return bidderWebClient.post()
....
.log("BidResponse: ");
);
然后,在您配置 Prometheus 目标后,访问 http://172.17.0.1:8080/actuator/prometheus
,您可以看到可用的自定义指标。在屏幕截图中,您可以看到 Prometheus 抓取了指标 bidder_calls
。
scrape_configs:
- job_name: 'spring-actuator'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
# this should be the target host IP which is outside of the docker:
# 172.17.0.1 or "export DOCKER_GATEWAY_HOST=$(hostname -I | awk 'print $1')"
- targets: [ '172.17.0.1:8080' ]
【讨论】:
是否可以通过带有@GetMapping 的方法传输指标?因为,我想使用 Swagger UI 来记录它。 AFAIK 这不是因为依赖spring-boot-starter-actuator
将指标暴露给外部http://localhost:8080/actuator/metrics
。除非你重写你自己的执行器项目.....
我正在考虑它,也许如果您将端点公开为actuator
,您是否不需要导入 ita 依赖项而只使用micrometer
。但我从来没有测试过...
我会尝试不同的方法,也许我会找到一种可行的方法。如果我找到一个,那么我会发布它以上是关于如何在 Spring Boot 中为 prometheus 制作自己的指标的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring-Boot 项目中为电话号码身份验证创建 REST API?
如何在 Spring Boot 2 中为 Spring Batch 配置数据源以进行测试
如何在 Spring Boot / Spring Data 中为 Amazon RDS Mysql 启用 SSL?