我正在構建一個新的 webflux spring 服務,并且我啟用了執行器(健康、資訊和普羅米修斯)。將部署此服務的基礎設施有點陳舊,監控工具已經配置為查找“/health”、“/metrics”,管理員(!?)似乎很難尋找不同的網址。
現在,我可以嘗試制作一個虛擬控制器并以大約 300 個狀態回應并重定向到實際端點 - 但監控工具配置為不遵循重定向。
最好的選擇是(IMO)將spring in配置application.yml為使用單獨的 url(例如,而不是/actuator/health簡單地使用/health),但我找不到任何相關資源。
下一個最佳選擇是實作一個新的 RestController 然后轉發請求 - 如下所示:
@RestController
public class ObservabilityForwardConfig {
@GetMapping("/metrics")
public Mono<Rendering> forwardToMetrics() {
log.info("metrics endpoint was hit");
return Mono.just(Rendering.redirectTo("/actuator/prometheus").build());
}
}
這個失敗了,但有一些奇怪的例外:
2022-10-05 14:07:27,211 [reactor-http-epoll-4] ERROR e.e.e.c.s.s.c.RestExceptionHandler - Got an unhandled exception:
org.springframework.core.codec.CodecException: Type definition error: [simple type, class org.springframework.web.reactive.result.view.DefaultRendering]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.web.reactive.result.view.DefaultRendering and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at org.springframework.http.codec.json.AbstractJackson2Encoder.encodeValue(AbstractJackson2Encoder.java:230)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
*__checkpoint ? Handler eu.europa.ec.cc.storage.service.config.ObservabilityForwardConfig#forwardToMetrics() [DispatcherHandler]
Original Stack Trace:
at org.springframework.http.codec.json.AbstractJackson2Encoder.encodeValue(AbstractJackson2Encoder.java:230)
...
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.web.reactive.result.view.DefaultRendering and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300)
這就是為什么我正在尋找一些配置替代品的原因。
uj5u.com熱心網友回復:
Spring Actuator 庫完全支持更改其端點的名稱和路徑。它在 spring boot 檔案的執行器章節中指出。
以下示例重新映射/actuator/health到/healthcheck:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck
所以語法是:
management.endpoints.web.path-mapping.<what_endpoint>=<new_endpoint_path>
uj5u.com熱心網友回復:
我還沒有找到如何配置 spring 如何覆寫這些執行器的路徑,但我發現了為什么我的轉發器類不起作用。我應該用@Controller而不是注釋它@RestController:
@Controller
public class ObservabilityForwardConfig {
@GetMapping("/metrics")
public Mono<Rendering> forwardToMetrics() {
return Mono.just(Rendering.redirectTo("/actuator/prometheus").build());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511816.html
