【问题标题】:Should spring boot/cloud actuator be disabled in production?是否应该在生产中禁用弹簧启动/云执行器?
【发布时间】:2020-10-21 11:42:26
【问题描述】:

Spring Boot/Cloud Actuator 提供了良好的健康检查指标。但在生产中,我不希望最终用户看到这些指标并获得对应用程序的任何见解。

那么在生产中应该如何处理呢?我应该在生产中删除/禁用执行器还是有更好的方法来处理这个问题。

【问题讨论】:

  • 您可以保护执行器或使用管理端口而不将其暴露给用户
  • “你可以保护执行器” - 你的意思是可以使用 spring security 来不允许用户访问任何执行器端点??
  • “使用管理端口而不向用户公开” - 你能详细说明如何做到这一点吗?

标签: java spring spring-boot spring-cloud spring-boot-actuator


【解决方案1】:

这基本上取决于您的要求。 首先,执行器不仅仅是健康检查

即使我们只讨论运行状况检查,在“编排”环境(如 kubernetes)中,您仍可能公开运行状况检查以实施 liveness 探测(即 kubernetes 将保持您的 pod 正常运行,只要健康检查返回 200 OK http 代码)。

你说

我不是最终用户看到这些指标并获得对应用程序的任何见解。

最终用户确实从不使用执行器,但它并不打算由最终用户使用,而是由开发人员和您环境中的各种集成使用。

这是可用于生产的执行器功能的另一个示例,即指标。如果您在部署中有 prometheus,则可以将其配置为抓取所有暴露 /prometheus 端点的 pod,这也是执行器的一个功能。

话虽如此,您可能只想公开部分端点,并可能使用某种身份验证技术保护它们,但这是另一回事。

执行器支持的端点的完整列表是可用的Here。此外,您始终可以创建自定义端点并决定是否要在生产中公开它们。

【讨论】:

    【解决方案2】:

    您可以启用/禁用执行器端点作为扇入/扇出样式。在很多情况下您需要某个端点但不是全部。例如,k8s 可以使用health 端点来进行 rediness/liveness 探测。指标需要很多次等等。

    您可以包含端点,然后将显示确切的列表:

    management.endpoints.web.exposure.include: env,health,info,metrics,loggers,prometheus
    

    你也可以默认全部禁用:

    management.endpoints.enabled-by-default: false
    

    单独控制:

    management.endpoint.shutdown.enabled: false
    

    禁用列出的:

    management.endpoints.web.exposure.exclude: health
    

    你可以结合之前的 props(参见文档中的优先级),当然你可以保护执行器端点,所以不是每个人都可以访问它们。

    Actuator documentation上有详细文档

    【讨论】:

      【解决方案3】:

      您可以进行如下配置:

      management:
        health:
          defaults:
            enabled: false
        endpoint:
          health:
            enabled: false
      

      更多信息在这里:

      https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-health-indicators

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-26
        • 2020-04-09
        • 2022-08-03
        • 1970-01-01
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        相关资源
        最近更新 更多