现状
使用 Prometheus 通过 consul 对 springboot 微服务实例指标进行采集,然后准备显示到指标图中,主要包括了如下几个步骤:
- 微服务仍然使用的是 eureka,因 Prometheus 仅支持 consul 自动发现微服务实例,所以对 eureka 集成了 consul。
- 微服务 springboot 添加 Prometheus 依赖。
- Prometheus 添加基于 consul 的采集配置(连接到 eureka)。
- 启动 Prometheus 采集指标,出现了本文标题的错误。
本文只简单列举引入的 jar 依赖,不包括具体的配置,主要用来陈述出现该错误的原因和解决办法。
相关依赖版本
- eureka 添加 consul 依赖
<!-- Prometheus 官方文档上只提供了对consul的支持,为了让 Prometheus 能自动服务发现而使用的组件 -->
<dependency>
<groupId>at.twinformatics</groupId>
<artifactId>eureka-consul-adapter</artifactId>
</dependency>
- springboot 添加 Prometheus 依赖
<!-- prometheus -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
- prometheus 添加 scrape 配置
- job_name: 'shanhy-springboot-service1'
scheme: http
metrics_path: '/shanhy-springboot-service1/actuator/prometheus'
consul_sd_configs:
- server: '192.168.1.120:8761'
datacenter: 'default'
scheme: http
services: ['SHANHY_SPRINGBOOT_SERVICE1']
relabel_configs:
- source_labels: [job]
target_label: application
错误原因
通过查看 eureka-consul-adapter
源码可知,eureka 在集成 eureka-consul-adapter
后,eureka-consul-adapter
中使用了 Async
异步请求,这里如果你不做任何配置,会出现超时错误,也就是标题的 503 错误。
解决办法
增加异步请求超时时间,你可以设置很大的值或者设置 -1
不超时。
#异步请求超时时间设置,-1 为不超时,主要为了解决 Prometheus 通过eureka采集指标数据503问题。
spring.mvc.async.request-timeout=-1
(END)