SpringBoot(34) - Actuator(2) - 通过HTTP监控和管理

参考:https://docs.spring.io/spring-boot/docs/1.5.18.RELEASE/reference/htmlsingle/#production-ready-monitoring


如果正在开发Spring MVC应用程序,Spring Boot Actuator自动配置所有已启用的端点,并且通过HTTP公开。 默认约定是使用端点的id作为URL路径。 例如,health 暴露为 /health。

 

1. 访问敏感端点
默认情况下,所有敏感HTTP端点都是安全的,这样只有具有ACTUATOR角色的用户才能访问它们。 使用标准HttpServletRequest.isUserInRole方法强制执行安全验证。
注:如果想要与ACTUATOR不同的东西,请使用management.security.roles属性。

如果要在防火墙后面部署应用程序,可能希望无需身份验证即可访问所有actuator端点。 可以通过更改management.security.enabled属性来执行此操作:

application.properties

management.security.enabled=false

注:默认情况下,actuator端点暴露在提供常规HTTP流量的同一端口上。 如果更改management.security.enabled属性,请注意不要意外暴露敏感信息。

如果要公开部署的应用程序,则可能需要添加“Spring Security”来处理用户身份验证。 添加“Spring Security”时,默认情况下,“basic”身份验证将与用户名 user 和生成的密码一起使用(在应用程序启动时打印在控制台上)。

注:应用程序启动时会记录生成的密码。 搜索“Using default security password”。

可以使用Spring属性更改用户名和密码,以及更改访问端点所需的安全角色。 例如,可以在application.properties中设置以下内容:

security.user.name=admin
security.user.password=secret
management.security.roles=SUPERUSER

如果应用程序具有自定义安全配置,并且希望无需身份验证即可访问所有执行器端点,则需要在安全配置中明确配置该端点。除此之外,还需要将management.security.enabled属性更改为false。

如果自定义安全配置保护actuator端点,则还需要确保经过身份验证的用户具有在management.security.roles下指定的角色。
注:如果没有用于向未经身份验证的用户公开基本health信息的用例,并且已使用自定义安全保护了actuator端点,则可以将management.security.enabled设置为false。这将通知Spring Boot跳过额外的角色检查。

 

2. 自定义管理端点路径
有时,将所有管理端点分组到单个路径中非常有用。例如,应用程序可能已将 /info 用于其他目的。可以使用management.context-path属性为管理端点设置前缀:

management.context-path=/manage

上面的application.properties示例会将端点从 /{id} 更改为 /manage/{id}(例如 /manage/info )。
注:除非管理端口已配置为使用不同的HTTP端口公开端点,否则management.context-path与server.context-path相关。

还可以更改端点的“id”(使用 endpoints.{name}.id ),然后就会同时更改MVC端点的默认资源路径。合法端点ID仅由字母数字字符组成(因为它们可以在许多地方公开,包括禁止使用特殊字符的JMX对象名称)。可以通过配置 endpoints.{name}.path 来单独更改MVC路径,并且不对这些值进行验证(因此可以使用URL路径中合法的任何内容)。例如,要将 /health 端点的位置更改为 /ping/me,可以设置 endpoints.health.path=/ping/me。

注:

  • 即使端点路径是单独配置的,它仍然相对于management.context-path。
  • 如果提供自定义MvcEndpoint,请记住包含可设置的path属性,如果希望代码的行为与标准MVC端点相同,则将其默认为 /{id}。 (参考HealthMvcEndpoint,了解如何实现。)如果自定义端点是Endpoint(不是MvcEndpoint),那么Spring Boot将处理路径。

 

3. 自定义管理服务器端口
对于基于云的部署,使用默认HTTP端口暴露管理端点是明智选择。 但是,如果应用程序在自己的数据中心内运行,可能更喜欢使用不同的HTTP端口暴露端点。

management.port属性可用于更改HTTP端口:

management.port=8081

由于管理端口通常受防火墙保护,并且未向公众公开,因此即使主应用程序是安全的,也可能不需要管理端点上的安全性。 在这种情况下,将在类路径上安装Spring Security,并且可以禁用以下管理安全性:

management.security.enabled=false

 

4. 配置特定于管理的SSL
配置为使用自定义端口时,还可以使用各种 management.ssl.* 属性为管理服务器配置自己的SSL。 例如,这允许管理服务器在主应用程序使用HTTPS时通过HTTP可用:

server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:store.jks
server.ssl.key-password=secret
management.port=8080
management.ssl.enabled=false

或者,主服务器和管理服务器都可以使用SSL但具有不同的密钥库:

server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:main.jks
server.ssl.key-password=secret
management.port=8080
management.ssl.enabled=true
management.ssl.key-store=classpath:management.jks
management.ssl.key-password=secret

 

5. 自定义管理服务器地址
可以通过设置management.address属性来自定义管理端点可用的地址。 如果只想在内部或面向操作的网络上监听,或仅监听来自localhost的连接,这将非常有用。
注:如果端口与主服务器端口不同,则只能监听不同的地址。

以下是不允许远程管理连接的示例application.properties:

management.port=8081
management.address=127.0.0.1

 

6. 禁用HTTP端点
如果不想通过HTTP公开端点,可以将管理端口设置为-1:

management.port=-1

 

7.  HTTP health端点格式和访问限制
health端点暴露的信息取决于是否匿名访问,以及封闭应用程序是否安全。 默认情况下,在安全应用程序中匿名访问时,将隐藏有关服务器运行状况的任何详细信息,并且端点将仅指示服务器是启动还是关闭。 此外,响应缓存一段可配置的时间,以防止端点用于拒绝服务攻击。 endpoints.health.time-to-live属性用于配置缓存周期(以毫秒为单位)。 它默认为1000,即1秒。

示例汇总HTTP响应(匿名请求的默认值):

$ curl -i localhost:8080/health
HTTP/1.1 200
X-Application-Context: application
Content-Type: application/vnd.spring-boot.actuator.v1+json;charset=UTF-8
Content-Length: 15

{"status":"UP"}

示例汇总状态为“DOWN”的HTTP响应(请注意503状态代码):

$ curl -i localhost:8080/health
HTTP/1.1 503
X-Application-Context: application
Content-Type: application/vnd.spring-boot.actuator.v1+json;charset=UTF-8
Content-Length: 17

{"status":"DOWN"}

示例详细的HTTP响应:

$ curl -i localhost:8080/health
HTTP/1.1 200 OK
X-Application-Context: application
Content-Type: application/vnd.spring-boot.actuator.v1+json;charset=UTF-8
Content-Length: 221

{
  "status" : "UP",
  "diskSpace" : {
    "status" : "UP",
    "total" : 63251804160,
    "free" : 31316164608,
    "threshold" : 10485760
  },
  "db" : {
    "status" : "UP",
    "database" : "H2",
    "hello" : 1
  }
}

可以增强上述限制,从而仅允许经过身份验证的用户在安全应用程序中完全访问health端点。 为此,将endpoints.health.sensitive设置为true。 以下是行为摘要(默认敏感标志值“false”以粗体表示):

management.security.enabledendpoints.health.sensitive未经过身份认证经过身份认证(带有正确的角色)

false

*

全部内容全部内容

true

false

仅返回status

全部内容

true

true

全部内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值