prometheus 监控feign请求
时间: 2023-06-29 16:05:53 浏览: 205
撸了一个 Feign 增强包 V2.0 升级版.doc
要在 Prometheus 中监控 Feign 请求,需要安装并配置以下组件:
1. Prometheus:用于收集和存储指标数据。
2. Spring Boot Actuator:用于公开应用程序的度量指标。
3. Micrometer:用于将 Spring 应用程序的度量指标暴露给 Prometheus。
接下来,您可以添加以下依赖项:
```
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.0.6</version>
</dependency>
```
然后,您需要在应用程序中的 application.yml 文件中添加以下配置:
```
management.endpoints.web.exposure.include=*
management.metrics.web.client.requests-metric-name=http.client.requests
```
此配置将启用 Actuator 端点并配置 Micrometer 以公开 HTTP 客户端请求的指标。最后,您需要在您的 Feign 客户端中添加一个拦截器来记录请求的指标:
```
@Bean
public Feign.Builder feignBuilder() {
return Feign.builder()
.requestInterceptor(new MetricsRequestInterceptor())
.client(new OkHttpClient());
}
class MetricsRequestInterceptor implements RequestInterceptor {
private final Timer.Builder requestTimerBuilder;
public MetricsRequestInterceptor() {
this.requestTimerBuilder = Timer.builder("http.client.requests")
.description("HTTP requests executed by the Feign client")
.tag("method", "GET");
}
@Override
public void apply(RequestTemplate requestTemplate) {
Timer.Sample sample = Timer.start();
requestTemplate.header("Content-Type", "application/json");
Response response = null;
try {
response = delegate().execute(requestTemplate.request());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (response != null) {
int statusCode = response.status();
sample.stop(requestTimerBuilder.tag("status", String.valueOf(statusCode)).register(meterRegistry));
}
}
}
}
```
这个拦截器会记录每个请求的持续时间,并将其公开给 Prometheus。您可以使用以下指令在 Prometheus 中查询这些指标:
```
http_client_requests_count{status="200", method="GET", uri="/your/uri"}
http_client_requests_duration_seconds{status="200", method="GET", uri="/your/uri"}
```
阅读全文