【问题标题】:Why my Spring Boot application don't start actuator even after config为什么我的 Spring Boot 应用程序即使在配置之后也不启动执行器
【发布时间】:2021-08-02 03:14:45
【问题描述】:

我的 Spring Boot 应用程序使用执行器进行健康检查。我使用这个配置:

management.server.port = 9093
management.endpoints.web.exposure.include = health

k8s 集群尝试 http get to host:9093/acutator/health 进行健康检查。在本地机器上运行时效果很好,我尝试使用相同的 Dockerfile 为我自己的本地机器构建一个 docker 容器也可以。但是当我将它推送到 prod env 中的 k8s 集群时,健康检查保持失败,因为连接到 9093/actuator/health 失败。

我观察了 prod env 的日志,发现 Netty 服务器不监听 9093 端口。我只能看到

o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080

但是在我的本地机器上,我可以看到 Netty 在 9093 端口启动的日志。

o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 9093

问题是,在什么情况下,Spring Boot 不会启动执行器?好像和k8s env有关。

【问题讨论】:

    标签: spring spring-boot docker spring-boot-actuator


    【解决方案1】:

    确实可能与你的 k8s 设置有关。

    Spring Application 不做任何假设,无论它是在 k8s 环境中运行还是完全没有任何容器化。

    您可以尝试通过 WGET 从 pod 内部执行对执行器的调用(假设 WGET/CURL 在那里可用)并确保端点可访问。

    如果确实可以访问,请查看Actuator Documentation,其中详细说明了如何设置 k8s 探针。

    还要检查拼写错误,在问题中你使用了两次acutator,而它可能应该是actuator ;)

    【讨论】:

    • 感谢您的回复,但我对这个东西感到困惑,Netty Server 不会在 9093 上启动。我使用 python SimpleHTTPServer 先占用 9093 端口,然后 Spring Boot 仍然成功地在 9093 上启动。什么环境设置可以使 Spring Boot 放弃启动 Actuator 但没有任何错误消息?
    • Spring boot wise,server.port 是一个变量,指向启动服务器的端口(默认 8080),management.server.port 用于执行器(管理)。可以使用环境变量、运行程序的参数等来覆盖这些值。Spring boot 有多种方式来提供配置。见docs.spring.io/spring-boot/docs/2.1.8.RELEASE/reference/html/…。
    • 问题解决了,它从外部读取配置,也从application.yml读取,但我在application.yml中写了xxx=xxx,因为application.yml中的所有设置都没有加载,但奇怪的是Spring即使在日志(信息级别)中也不会报告任何错误。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2022-01-05
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多