spring-boot-actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等拉管理和监控应用。审计(Auditing)、
健康(health)、数据采集(metrics gathering)会自动加入到应用里面。
Endpoints
列举一些主要的endpoints
可以检查的其他一些情况的健康信息。下面的HealthIndicators会被Spring Boot自动配置(在合适的时候):
自定义Indicator 扩展 HealthEndPoint
看源码 其实 磁盘和数据库健康信息就是 DiskSpaceHealthIndicator、DataSourceHealthIndicator 来实现的,当我们对一些我们自定义的组件进行监控时, 我们也可以实现个Indicator :
@Component public class HealthIndicatorImpl implements HealthIndicator { @Override public Health health() { return new Health.Builder().withDetail("usercount", 10) //自定义监控内容 .withDetail("userstatus", "up").up().build(); } }
自定义EndPoint
其实除了扩展 HealthEndPoint 来添加一些健康检查, 我们也可以自定定义一些EndPoint 来提供程序运行时一些信息的展示:
/** * 自定义EndPoint配置 */ @Configuration public class EndPointConfig { /** * 可以配置多个EndPoint,方法上添加bean注解 * @return */ @Bean public Endpoint<Map<String, Object>> customEndPoint() { return new CustomEndPoint(); } }
/** * http://localhost:8080/manage/customsystem */ @ConfigurationProperties(prefix="endpoints.customsystem") public class CustomEndPoint extends AbstractEndpoint<Map<String, Object>> { public CustomEndPoint() { super("customsystem"); } @Override public Map<String, Object> invoke() { Map<String, Object> result = new HashMap<>(); Date date = new Date(); result.put("server_time", date.toString()); result.put("ms_format", date.getTime()); return result; } }
配置文件属性介绍
地址和端口的配置
- management.port:指定访问这些监控方法的端口,与逻辑接口端口分离。如果不想将这些暴露在http中,可以设置 management.port = -1
- management.address:指定地址,比如只能通过本机监控,可以设置 management.address = 127.0.0.1
- management.context-path :指定访问监控的根目录
敏感信息访问限制
根据上面表格,鉴权为false的,表示不敏感,可以随意访问,否则就是做了一些保护,不能随意访问。
endpoints.mappings.sensitive=false
这样需要对每一个都设置,比较麻烦。敏感方法默认是需要用户拥有ACTUATOR角色,因此,也可以设置关闭安全限制:
management.security.enabled=false
或者配合Spring Security做细粒度控制。
配置需要账号密码安全验证:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
application.yml配置
management:
security:
enabled: true
roles: ADMIN
context-path: /manage
port: 10001
security:
user:
password: 123456
name: admin