SpringBoot实现项目健康检查与监控
spring boot 最主要的特性就是autoconfig(自动配置),而对于我们这些使用者来说也就是各种starter,
spring boot-actuator 也提供了starter,为我们自动配置,在使用上我们只需要添加starter到我们的依赖中,然后启动项目即可。
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency>
常用endpoint
spring boot-actuator,提供了许多有用的endpoint,对spring boot应用提供各种监控,下面说一下我常用的endpoint:
/health 应用的健康状态
/configprops 获取应用的配置信息,因为spring boot 可能发布时是单独的jar包,配置文件可能包含其中, 当我们需要检查配置文件时可以使用 configpropsendpoint 进行查看一些配置是否正确。
/trace 最近几次的http请求信息
healthendpoint
当我们访问 时,可以看到 healthendpoint 给我们提供默认的监控结果,包含 磁盘检测和数据库检测。
{ "status": "up", "diskspace": { "status": "up", "total": 398458875904, "free": 315106918400, "threshold": 10485760 }, "db": { "status": "up", "database": "mysql", "hello": 1 } }
其实看 spring boot-actuator 源码,你会发现 healthendpoint 提供的信息不仅限于此,org.springframework.boot.actuate.health 包下 你会发现 elasticsearchhealthindicator、redishealthindicator、rabbithealthindicator 等
也就是 healthendpoint 也提供 es, redis 等组件的健康信息。
自定义indicator 扩展 healthendpoint
看源码 其实 磁盘和数据库健康信息就是 diskspacehealthindicator、datasourcehealthindicator 来实现的,当我们对一些我们自定义的组件进行监控时, 我们也可以实现个indicator :
@component public class user implements healthindicator { /** * user监控 访问: http://localhost:8088/health * * @return 自定义health监控 */ @override public health health() { return new health.builder().withdetail("usercount", 10) //自定义监控内容 .withdetail("userstatus", "up").up().build(); } }
这时我们再次访问: 这时返回的结果如下,包含了我们自定义的 user 健康信息。
{ "status": "up", "user": { "status": "up", "usercount": 10, "userstatus": "up" }, "diskspace": { "status": "up", "total": 398458875904, "free": 315097989120, "threshold": 10485760 }, "db": { "status": "up", "database": "mysql", "hello": 1 } }
自定义endpoint
其实除了扩展 healthendpoint 来添加一些健康检查, 我们也可以自定定义一些endpoint 来提供程序运行时一些信息的展示:
@configuration public class endpointautoconfig { @bean public endpoint<map<string, object>> customendpoint() { return new systemendpoint(); } } @configurationproperties(prefix="endpoints.customsystem") public class systemendpoint extends abstractendpoint<map<string, object>> { public systemendpoint(){ super("customsystem"); } @override public map<string, object> invoke() { map<string,object> result= new hashmap<>(); map<string, string> map = system.getenv(); result.put("username",map.get("username")); result.put("computername",map.get("computername")); result.put("userdomain",map.get("userdomain")); return result; } }
访问 来查看我们自定义的endpoint ,返回结果如下:
{ "username": "xxx", "userdomain": "desktop-6ean1h4", "computername": "desktop-6ean1h4" }
我们在为spring boot应用添加actuator后,期望的health接口返回结果应该是类似下面的结果:
{ status: "up", diskspace: { status: "up", total: 250182889472, free: 31169568768, threshold: 10485760 }, db: { status: "up", database: "h2", hello: 1 } }
如果只是返回了status
{ status: "up" }
则需要为应用新增配置,以yml配置文件为例,需要添加如下配置:
management: security: enabled: false endpoints: health: sensitive: false
management.endpoint.health.show-details=always
总结
以上所述是小编给大家介绍的springboot实现项目健康检查与监控,希望对大家有所帮助