我的 Spring Boot 应用程序的 /health 端点正在发出有关在同一台机器上运行的 Consul 服务器的所有信息。如何禁用此功能?

Posted

技术标签:

【中文标题】我的 Spring Boot 应用程序的 /health 端点正在发出有关在同一台机器上运行的 Consul 服务器的所有信息。如何禁用此功能?【英文标题】:The /health endpoint of my Spring Boot app is emitting all info about the Consul server running on the same machine. How to disable this? 【发布时间】:2017-05-27 13:45:33 【问题描述】:

我已启用 /health 端点,但我只是不希望它列出 Consul 在同一台机器上监控的所有服务。

这是我的 application.properties:

# Enable just the health endpoint.
endpoints.health.enabled=true

# Disable all default endpoints and Spring Cloud endpoints.
endpoints.enabled=false
endpoints.consul.enabled=false
endpoints.pause.enabled=false
endpoints.resume.enabled=false
endpoints.refresh.enabled=false
endpoints.restart.enabled=false
endpoints.shutdown.enabled=false
endpoints.env.enabled=false

management.health.db.enabled=false
management.health.diskspace.enabled=false
management.health.defaults.enabled=false

...这是 /health 当前发出的内容:

$ curl -o- http://localhost:8080/health | python -m json.tool

    "consul": 
        "advertiseAddress": "10.10.10.10", 
        "bindAddress": "10.10.10.10", 
        "clientAddress": "127.0.0.1", 
        "datacenter": "DC", 
        "domain": "consul.", 
        "nodeName": "mynode", 
        "services": 
            "myservice1": [
                "tag1"
            ], 
            "myservice2": [
                "tag1", 
                "tag2"
            ]
        , 
        "status": "UP"
    , 
    "description": "Spring Cloud Consul Discovery Client", 
    "discoveryComposite": 
        "description": "Spring Cloud Consul Discovery Client", 
        "discoveryClient": 
            "description": "Spring Cloud Consul Discovery Client", 
            "services": [
                "myservice1",
                "myservice2"
            ], 
            "status": "UP"
        , 
        "status": "UP"
    , 
    "status": "UP"

我不介意"description": "Spring Cloud Consul Discovery Client",但"consul""discoveryComposite" 下的其余内容我不想为/health 公开。

什么可以将这些信息添加到此端点?

【问题讨论】:

【参考方案1】:

在 SpringBoot 2.3.x 中禁用复合输出

只需使用以下密钥:
spring:
  cloud:
    discovery:
      client:
        composite-indicator:
          enabled: false
之后,发现的输出没有打印在运行状况检查的状态中

【讨论】:

【参考方案2】:

来自 Spring Cloud Commons。

要禁用discoveryComposite 设置属性spring.cloud.discovery.client.composite-indicator.enabled=false

为另一个设置management.health.consul.enabled=false

【讨论】:

感谢@spencergibb,spring.cloud.discovery.client.composite-indicator.enabled=false 已关闭 discoveryComposite,但令人惊讶的是 management.health.consul.enabled=false 并未关闭 /health 中的 "consul": 部分。 可能在spring cloud consul的后期版本中。你用的是什么版本? 对此的更新:management.security.enabled=false 在我没有注意到的应用程序启动期间被设置在一个 Spring 配置文件中。根据此处的文档:docs.spring.io/spring-boot/docs/current/reference/html/… 我需要设置endpoints.health.sensitive=true 以仅报告状态。添加此令牌解决了问题。 > 但令人惊讶的是 management.health.consul.enabled=false 并没有关闭 /health 中的 "consul": 部分。它实际上是通过将配置参数添加到 bootstrap.xml 来禁用的【参考方案3】:

为可能遇到相同问题的其他人回答我自己的问题:management.security.enabled=false 在我没有注意到的应用程序启动期间被设置在 Spring 配置文件之一中。根据此处的文档:http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html#production-ready-health-access-restrictions 我需要设置endpoints.health.sensitive=true 以仅报告状态。添加这个令牌解决了这个问题。

【讨论】:

以上是关于我的 Spring Boot 应用程序的 /health 端点正在发出有关在同一台机器上运行的 Consul 服务器的所有信息。如何禁用此功能?的主要内容,如果未能解决你的问题,请参考以下文章

我的spring-boot-study之mongodb的应用

为啥我的 Spring Boot 应用程序出现异常?

我的spring-boot-study之mybatis的应用

我的spring-boot-study之mybatis的应用

在我的 Spring MVC 应用程序中实现 Spring Actuator 而不添加 Spring Boot

在我的 spring-boot 应用程序启动之前,我如何等待数据库容器启动