spring-boot-actuator 相关问题

Spring Boot Actuator是Spring Boot的子项目。它为您的应用程序添加了多种生产级服务,而您只需付出很少的努力。

SpringBoot Actuator 版本 1.X 就绪性和活性探针

我正在探索激活 SpringBoot 1.X 的就绪性和活性探测器的选项。必须启用两个端点才能实现无缝 Kubernetes 部署。关于实现这一目标有什么见解吗? /

回答 1 投票 0

Spring Boot 3 - 执行器中缺少dispatcherServletRegistration bean

当我启动 Spring Boot 3.2.0 应用程序并调用运行状况端点时,我收到错误消息: java.lang.IllegalArgumentException:无法在

回答 2 投票 0

Spring 启动云 kubernetes - java.lang.IllegalArgumentException:未启用重新启动端点

我有一个带有 kubernetes 依赖项的 Spring Boot 微服务,用于配置映射和秘密支持。当前的 Spring Boot 版本是 2.3.9.RELEASE 。并且 kubernetes 依赖版本是 1.1.0.REL...

回答 1 投票 0

如何在 Swagger UI 中公开 Actuator 端点?

如何在 Swagger UI 中公开 Actuator 端点?我希望我能翻转表演执行器标志 弹簧文档: 招摇用户界面: 启用:真 路径:/swagger-ui 配置网址:/swagger-ui/confi...

回答 2 投票 0

尝试在根级别更改记录器级别

当我尝试通过根级别的执行器动态更改记录器时。通过这个curl -i -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "TRACE"}' http://

回答 1 投票 0

Spring Boot Prometheus 指标中无法解释的“root”uri

在 Spring Boot API 的 Prometheus 指标中,有一个非常神秘的根“端点”,有时似乎会被调用。这看起来像是有人在探测我们的 API,但端点却没有......

回答 3 投票 0

CXF 和弹簧启动执行器,执行器端点不可用

我有一个使用 Spring Boot 1.4.2 和 CXF JAXRS 的项目设置。我想将弹簧启动执行器添加到项目中。这是我添加到项目中的配置。 我有一个使用 Spring Boot 1.4.2 和 CXF JAXRS 的项目设置。我想将弹簧启动执行器添加到项目中。这是我添加到项目中的配置。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> 在此之后我创建了一个 WAR 文件,然后将其部署在外部 tomcat 服务器中。但是当我访问健康 URL localhost:8080/management/health 时,它给出 404 HTTP 代码。服务器正常启动,我可以看到包含以下详细信息的日志: 健康配置日志 [localhost-startStop-1] 信息 org.springframework.boot.actuate.endpoint.mvc.EndpointHandlerMapping - 映射“{[/management/health || /management/health.json],products=[application/json]}" 公开 java.lang.Object Servlet 配置日志 [localhost-startStop-1] 信息 org.springframework.boot.web.servlet.DelegatingFilterProxyRegistrationBean - 映射过滤器:'springSecurityFilterChain' 到:[/*] [localhost-startStop-1] 信息 org.springframework.boot.web.servlet.FilterRegistrationBean - 映射 过滤器:“webRequestLoggingFilter”至:[/*] [localhost-startStop-1] 信息 org.springframework.boot.web.servlet.FilterRegistrationBean - 映射 过滤器:“applicationContextIdFilter”至:[/*] [localhost-startStop-1] 信息 org.springframework.boot.web.servlet.ServletRegistrationBean - 映射 servlet:'dispatcherServletRegistration' 到 [] [localhost-startStop-1] 信息 org.springframework.boot.web.servlet.ServletRegistrationBean - 映射 servlet:'dispatcherServlet' 到 [/] [localhost-startStop-1] 信息 org.springframework.boot.web.servlet.ServletRegistrationBean - 映射 servlet:'CXFServlet' 到 [/services/*] 问题已解决,这是详细信息。由于 CXF 和 Spring Boot 一起配置在一起,因此 CXF REST API 和执行器端点都配置为 '/'。为 CXF RESt 端点配置的 servlet bean 的名称是dispatcherServletRegistration。由于 CXf 的引导启动器位于 POM 中,因此还发生了 CXF servlet 的自动配置。因此,您可以找到 CXFServlet 也配置为 /services/*。 将 servlet: 'dispatcherServletRegistration' 映射到 [] 将 servlet: 'dispatcherServlet' 映射到 [/] 将 servlet:“CXFServlet”映射到 [/services/*] 我删除了自动配置选项(CXFServlet),因为我需要一些 CXF JAXRS 实现所需的自定义,并将 dispatcherServletRegistration 映射到 /services/*,现在一切正常。现在执行器在 '/' 下工作,CXF REST API 在 /services 下工作。 就我而言,我有 Spring 1.5.X ,我无法对 CXF 和 Spring Actuator 使用两个不同的基本路径。我需要保留“/”作为根应用程序路径,并添加一个 RestEnpoint 来返回执行器运行状况结果。 因此,当 CXF 返回使用 @Autowired + ObjectMapper 在服务层上生成的 Health Info 的字符串结果时,我使用另一种方法。 注意:您应该启用注释上下文支持才能应用此解决方案。 以下解决方法对我有用: 将 CXF Servlet 保留在“/”上 在我的例子中,我使用 Camel + CXF,但是您需要做的就是创建以下组件来构建 Health 对象: @Component public class InfoHealthEndpoint extends HealthEndpoint { @Autowired private InfoEndpoint infoEndpoint; public InfoHealthEndpoint(HealthAggregator healthAggregator, Map<String, HealthIndicator> healthIndicators) { super(healthAggregator, healthIndicators); } @Override public Health invoke() { Health health = super.invoke(); return new Health.Builder(health.getStatus(), health.getDetails()) .withDetail("info", infoEndpoint.invoke()) .build(); } } 并创建一个为 CXF 响应控制器返回字符串结果的服务。 @服务 公共课 HealthService { @Autowired private InfoHealthEndpoint infoHealthEndpoint; @Autowired private ObjectMapper mapper; private static final String HEALTH_UP = "UP"; public void health(Exchange exchange) throws JsonProcessingException { Health health = infoHealthEndpoint.invoke(); String healthReponse = mapper.writeValueAsString(infoHealthEndpoint.invoke()); if(!HEALTH_UP.equals(health.getStatus().getCode())){ Response response = Response.status(503).entity(healthReponse).build(); exchange.getOut().setBody(response); exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE); }else{ exchange.getIn().setBody(healthReponse); } } } 注意:在我的例子中,我使用 Apache Camel (Exchange) 在路由上设置响应,但是此解决方案可以通过使用简单的字符串返回适用于另一种情况。 此答案归功于@Danny:将 Spring Boot Actuator /health 和 /info 合并为一个 它对我有用 @Bean @Primary public DispatcherServletPath dispatcherServletPath() { return () -> ""; } @Bean public DispatcherServlet dispatcherServletActuator() { return new DispatcherServlet(); } @Bean public ServletRegistrationBean<CXFServlet> dispatcherServlet() { ServletRegistrationBean<CXFServlet> cxf = new ServletRegistrationBean<>(new CXFServlet(), "/v1/*"); cxf.setName("cxfServlet"); return cxf; }

回答 3 投票 0

新 Spring Boot 项目的 ClassNotFoundException io.micrometer.tracing.Tracer

我使用 springinitializr 创建了一个新的 Spring Boot 项目,其依赖项: 弹簧模量 弹簧启动执行器 实际配置。 无需更改任何内容即可启动应用程序

回答 1 投票 0

升级到 Spring Boot 3 后执行器端点返回 500 错误

我正在将服务从 Spring Boot 2.7 升级到 3.2.0,并遇到一个问题:访问执行器端点时出现 HTTP Status 500 – Internal Server Error 错误。 查看堆栈...

回答 3 投票 0

为什么 Spring Boot 执行器记录器端点不起作用?

我正在使用Spring Boot 3.2.2,JDK 21,Maven。文件 pom.xml 我正在使用 Spring Boot 3.2.2、JDK 21、Maven。文件pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.2</version> <relativePath/> </parent> <groupId>vy</groupId> <artifactId>certificate_spring</artifactId> <version>0.0.1-SNAPSHOT</version> <name>certificate_spring</name> <description>Demo project for Spring Boot</description> <properties> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 文件application.properties logging.level.root=INFO 文件CertificateSpringApplication.java package vy.certificate_spring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class CertificateSpringApplication { public static void main(String[] args) { SpringApplication.run(CertificateSpringApplication.class, args); } } 文件FooController.java package vy.certificate_spring.account.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller("/foo") public class FooController { @GetMapping("/bar") public String bar(){ return "bar"; } } 这里的参考文档https://docs.spring.io/spring-boot/docs/current/actuator-api/htmlsingle/#loggers.all说去http://localhost:8080/actuator/loggers ,但我发现它不起作用。 为什么 Spring Boot 执行器记录器端点不起作用? 您必须使用以下属性定义公开哪些端点management.endpoints.web.exposure.include。您可以使用添加所有端点 management.endpoints.web.exposure.include=* https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.exusing

回答 1 投票 0

运行 Junit 测试时切入点不应为空

我最近对我的项目进行了 spring boot 从 2.6.9 升级到 3.0.6 当我运行项目时一切正常,点击所有 API,但是当我尝试运行 junit 测试用例时,它失败并显示

回答 1 投票 0

springboot 3.2.2中无法基于@Timed获取微米指标

我有一个简单的 springboot REST API,我想在其中检查不同操作所花费的时间。我正在使用 Springboot 3.2.2 和 Micrometer 提供的 @Timed 注释。当我执行休息时...

回答 1 投票 0

有人可以给我一个在 Spring Boot 应用程序版本 3.1.5 上启用 /actuator/jolokia 的参考吗

我想在 Spring Boot 应用程序上启用 jolokia,但似乎我无法使用 jolokia-core 依赖项 https://mvnrepository.com/artifact/org.jolokia/jolokia-core 来做到这一点。 我能够做到...

回答 2 投票 0

Spring Boot 准备就绪探测在 kubernetes 上失败

我有一个 Spring Boot 应用程序版本 3.2.1,我使用 Docker 驱动程序在 WSL 内的 Minikube 上运行。该应用程序非常小,只需几秒钟即可启动。在本地主机上运行时,

回答 1 投票 0

Spring Boot 跟踪执行器正在记录出站请求中包含密码的 HTTP 正文

MultiValueMapmap = new LinkedMultiValueMap(); map.set("用户名", "user1"); map.set("密码", "通过...

回答 1 投票 0

如何打开/关闭本地或测试环境的可观察性?

我想要实现的目标: 打开/关闭本地或测试环境的可观察性。 我尝试了什么: 我们的项目具有以下依赖项。通过这些,它可以生成指标、跟踪并将其发送到...

回答 1 投票 0

安装Spring Boot执行器

我有一个 SpringBoot 应用程序,其配置在端口 8081 上运行: @豆 public SecurityFilterChain filterChain(HttpSecurity http) 抛出异常 { http.csrf(AbstractHttpConf...

回答 1 投票 0

为 Spring Web 客户端默认指标添加标签

我目前正在开发一个 Spring webflux 项目,该项目具有 Actuator、Micrometer 依赖项,如下所示, io.千分尺 我目前正在开发一个 Spring webflux 项目,该项目具有 Actuator、Micrometer 依赖项,如下所示, <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> </dependency> 公开默认指标(包括 Spring webClient 指标)。我有 4 个不同的端点,我使用 Spring WebClient 调用它们。我想知道是否有一种方法可以为每个添加到默认指标的 Web 客户端调用添加特定标签。我有一些指标,例如来自 Webclient 的 Histogram,在 /actuator/prometheus 端点公开,如下, http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.001048576",} 0.0 http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.002088576",} 1.0 在我的代码中,我想在 Webclient 调用中添加一些额外的标签,以实现上述所有指标。例如这样的事情, http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.001048576",investor="A", version="v1"} 0.0 http_client_requests_seconds_bucket{clientName="my-app.com",method="GET",outcome="SUCCESS",status="200",uri="/shops",le="0.002088576",investor="A", version="v1"} 1.0 注意我添加的 2 个自定义标签 investor="A"、version="v1"。我正在寻找一些可能看起来像这样的代码, @Autowire private WebClient webclient; // Assume there is already a bean created for us public Mono<String> getShopsList(String... extraTags) { return webclient.baseUrl("http://my-app.com") .build() .get() .uri("/shops") .tags(extraTags) // Some extra tags I want callers of the method to pass. Note there are only 4-5 methods that call "getShopsList()" method .retrieve() .bodyToMono(String.class); } 有人可以帮忙找到实现这一目标的最佳方法吗? 预期的方法是引入您的自定义标签提供程序: @Component public class CustomWebClientExchangeTagsProvider extends DefaultWebClientExchangeTagsProvider { public static final String VERSION_ATTRIBUTE = "custom.webclient.version"; public static final String INVESTOR_ATTRIBUTE = "custom.webclient.investor"; @Override public Iterable<Tag> tags(ClientRequest request, ClientResponse response, Throwable throwable) { Tag method = WebClientExchangeTags.method(request); Tag investor = getInvestorTag(request); Tag version = getVersionTag(request); return asList(method, investor, version, WebClientExchangeTags.status(response, throwable), WebClientExchangeTags.outcome(response)); } private Tag getInvestorTag(ClientRequest request) { return request.attribute(INVESTOR_ATTRIBUTE) .map(name -> Tag.of("investor", (String) name)) .orElse(WebClientExchangeTags.clientName(request)); } private Tag getVersionTag(ClientRequest request) { return request.attribute(VERSION_ATTRIBUTE) .map(uri -> Tag.of("version", (String) uri)) .orElse(WebClientExchangeTags.uri(request)); } } 您必须以这种方式检测您的自定义 Web 客户端: @Bean public WebClient webClient(MetricsWebClientCustomizer metricsCustomizer) { TcpClient timeoutClient = ... WebClient.Builder builder = WebClient.builder(); metricsCustomizer.customize(builder); return ...; } 最后,你需要像这样设置两个属性: return webClient.get() .uri(filePath) .attribute(INVESTOR_ATTRIBUTE, "A") .attribute(VERSION_ATTRIBUTE, "v1") .retrieve() .bodyToMono(String.class); 结果示例: http_client_requests_seconds_count{investor="A",method="GET",outcome="CLIENT_ERROR",status="401",version="v1",} 1.0 http_client_requests_seconds_sum{investor="A",method="GET",outcome="CLIENT_ERROR",status="401",version="v1",} 0.073818807 编辑 根据文档: S 属性(消费者>属性消费者) 提供对迄今为止声明的每个属性的访问 可以添加、替换或删除值。 所以是的,您可以使用它来添加多个属性。 上面的答案在 Spring Boot 3.2.x 中不再有效,因为 DefaultWebClientExchangeTagsProvider 已被删除。删除说明上写着“在 3.2.0 中删除,以支持 ClientRequestObservationConvention”,但我不知道应如何使用新接口才能获得相同的结果?

回答 2 投票 0

Spring Boot Actuators 仅暴露有限的端点

我正在尝试在 Spring Boot 2.3 服务中公开其他执行器端点。尝试添加端点(例如普罗米修斯)和监控指标。但由于某种原因,暴露了

回答 1 投票 0

Spring-boot 执行器不发布休眠指标

执行器和休眠指标存在问题。指标不是由 HibernateMetricsAutoConfiguration 生成的。我们有多个休眠连接,并且这些设置不在应用程序中。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.