Spring Boot Actuator端点配置似乎没有按预期工作

时间:2016-11-15 18:50:07

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

我有一个非常简单的弹簧启动应用程序。它只是一个zuul反向代理。除了基本设置之外,没有安全性或任何其他设置可以通过eureka和每个服务的路径映射来发现我们的服务。我试图阻止我们的执行器端点被公开暴露但仍然希望健康检查端点用于我们的ELB但是希望它不要报告它所知道的所有服务的健康状况(我希望它灵敏)。在尝试找出我需要设置哪些属性以获得预期行为时,我遇到了非常意外的行为。

例如,当我设置属性endpoints.sensitive=true时,这不会将运行状况检查端点的默认值更改为敏感。这似乎违背了文档所说的内容。

http://docs.spring.io/spring-boot/docs/1.4.2.RELEASE/reference/htmlsingle/#production-ready-customizing-endpoints

  

同样,您也可以选择全局设置“敏感”标志   所有端点。默认情况下,敏感标志取决于类型   终点(见上表)。例如,将所有端点标记为   敏感信息除外:

     

endpoints.sensitive =真

     

endpoints.info.sensitive =假

事实上,在调试中运行时,我从未看到org.springframework.boot.actuate.endpoint.EndpointProperties#isSensitive被调用。

要使健康端点敏感,我需要显式设置属性endpoints.health.sensitive=true。奇怪的是,当提供此设置时,现在会调用org.springframework.boot.actuate.endpoint.EndpointProperties#isSensitive

所以这很好,我的健康检查端点现在只是报告UP或DOWN而不是其他任何内容。但现在我希望运行状况检查端点是唯一启用的端点。所以我设置了endpoints.enabled=falseendpoints.health.enabled=true,这应该禁用除健康之外的所有端点。但是,情况似乎并非如此。在我的实例中,我可以点击/routes/resume/pause/hystrix.stream和其他人。当我用endpoints.enabled=false禁用所有端点然后使用endpoints.actuator.enabled=true启用执行器端点时,我才能确定这一点,并且允许我点击执行器端点,然后报告这些端点已启用。

{
  "links": [
    {
      "rel": "self",
      "href": "http://localhost:9200/actuator"
    },
    {
      "rel": "resume",
      "href": "http://localhost:9200/resume"
    },
    {
      "rel": "pause",
      "href": "http://localhost:9200/pause"
    },
    {
      "rel": "hystrix.stream",
      "href": "http://localhost:9200/hystrix.stream"
    },
    {
      "rel": "env",
      "href": "http://localhost:9200/env"
    },
    {
      "rel": "routes",
      "href": "http://localhost:9200/routes"
    },
    {
      "rel": "health",
      "href": "http://localhost:9200/health"
    },
    {
      "rel": "refresh",
      "href": "http://localhost:9200/refresh"
    },
    {
      "rel": "restart",
      "href": "http://localhost:9200/restart"
    }
  ]
}

我本来希望只能看到我明确启用的两个端点。

{
  "links": [
    {
      "rel": "self",
      "href": "http://localhost:9200/actuator"
    },
    {
      "rel": "health",
      "href": "http://localhost:9200/health"
    }
  ]
}

单独禁用每个端点似乎并未将它们从执行器端点移除,但现在当尝试访问时,我得到“此端点已禁用”消息,这是一种改进。然而,我似乎无法禁用routes或`hystrix.stream *端点,因为似乎没有公开此功能的配置。

所有这些都说,我想知道这是预期的行为还是这个错误?

1 个答案:

答案 0 :(得分:1)

我遇到了你在这里描述的同样的问题。 请先检查您的春季启动版本!有一个错误,即全局' endpoints.sensitive'设置 NOT 在某些指定的春季启动版本中生效。 (完全不确定版本号。在春季启动时似乎是一个重构回归。)

以下是一些参考资料。

将我的春季启动更新到版本1.3.0 RELEASE后,设置' endpoints.sensitive = true'对我有用。希望它也适合你。祝你好运,伙计。