您当前的位置: 首页 >  spring boot

Spring Boot Actuator

发布时间:2021-10-02 19:31:24 ,浏览量:0

1 概述 1.1 整合

添加依赖:

<dependency> <groupId>org.springframework.boot "_links": { "self": { "href": "http://localhost:19086/actuator", "templated": false }, "health": { "href": "http://localhost:19086/actuator/health", "templated": false }, "info": { "href": "http://localhost:19086/actuator/info", "templated": false } } } 

点击此处:

可见:

http://localhost:19086/actuator/health: { "status": "UP" } 
1.2 暴露端点

默认打开的只有 health 和 info 端点,其实还支持很多端点:

要展示其他端点,需配置:

SpringBoot支持很多端点,除了默认显示的几个,还可激活暴露所有端点:

management: endpoints: web: exposure: include: '*' 

观察日志:

若仅想暴露某端点也可:

具体维度的指标,还得细化,如查看JVM最大内存:

2 健康信息

健康信息可以检查应用的运行状态,它经常被监控软件用来提醒人们生产环境是否存在问题。health端点暴露的默认信息取决于端点是如何被访问的。

  • 对于一个非安全,未认证的连接只返回一个简单的’status’信息

  • 对一个安全或认证过的连接其他详细信息也会展示

2.1 顶层接口
package org.springframework.boot.actuate.health; /**
 * 这个接口可以通过某种策略来判断程序应用的健康状况
 *
 * @author Dave Syer
 * @see ApplicationHealthIndicator
 */ @FunctionalInterface public interface HealthIndicator { /**
	 * 返回健康状况的指示
	 * 这个指示可以告诉程序用户或管理员系统的健康程度,以供后续决策和操作。
	 */ Health health(); } 

Health的数据结构如下:

@JsonInclude(Include.NON_EMPTY) public final class Health { private final Status status; private final Map<String, Object> details; ... } 

Spring Boot 内置了很多自动配置的HealthIndicator,当然也能自定义:

2.2 自动配置的HealthIndicators

Spring Boot在合适时候,会自动配置如下HealthIndicator:

内置状态的默认状态映射:

  • UP:正常
  • DOWN:遇到了问题,不正常
  • OUT OF SERVICE:资源未在使用或不该使用
  • UNKNOWN:未知

配置下health节点,并重启:

management: endpoint: health: show-details: always

可看到对磁盘的监控信息:

http://localhost:19086/actuator/health { "status": "UP", "details": { "diskSpace": { "status": "UP", "details": { "total": 499963174912, "free": 22110871552, "threshold": 10485760 } }, "db": { "status": "UP", "details": { "database": "MySQL", "hello": 1 } } } } 
2.3 执行流程

以 DataSourceHealthIndicator 为例,在这打断点:

@Override protected void doHealthCheck(Health.Builder builder) throws Exception { if (this.dataSource == null) { builder.up().withDetail("database", "unknown"); } else { doDataSourceHealthCheck(builder); } } 

刷新 http://localhost:19086/actuator/health,进入断点:

private void doDataSourceHealthCheck(Health.Builder builder) throws Exception { // ① String product = getProduct(); // 就开始拼接要输出的信息了 builder.up().withDetail("database", product); // ② String validationQuery = getValidationQuery(product); if (StringUtils.hasText(validationQuery)) { // Avoid calling getObject as it breaks MySQL on Java 7 List<Object> results = this.jdbcTemplate.query(validationQuery, new SingleColumnRowMapper()); // ③ Object result = DataAccessUtils.requiredSingleResult(results); builder.withDetail("hello", result); } } 

①其实就是进入数据库驱动包,获取到具体的数据库名称:

String product = getProduct(); private String getProduct() { return this.jdbcTemplate.execute((ConnectionCallback<String>) this::getProduct); } private String getProduct(Connection connection) throws SQLException { return connection.getMetaData().getDatabaseProductName(); } 

②得到:

③得到hello 拼接的结果:

一旦doHealthCheck方法抛异常,就会被catch:

3 应用信息

点击此处,就能进入 info 端点:

应用信息会暴露所有InfoContributor beans收集的各种信息,Spring Boot内置很多自动配置的InfoContributors,也可自定义。

3.1 自动配置的InfoContributor

Spring Boot会在合适的时候自动配置如下InfoContributor:

注 使用management.info.defaults.enabled属性可禁用以上所有InfoContributor。

3.2 自定义应用info信息

通过设置Spring属性info.*,你可以定义info端点暴露的数据。所有在info关键字下的Environment属性都将被自动暴露,例如,你可以将以下配置添加到application.properties:

info: project-name: car-receiver author: JavaEdge app: encoding: UTF-8 java: source: 1.8 target: 1.8 

这种信息有啥实际用途呢?比如在接收到告警后的业务处理,我们就能根据服务发现组件上面的服务名称,找到对应的/actuator/info,进而找到对应的owner-email配置的值,发给对应微服务的负责人即可。

可在构建时扩展info属性,而非硬编码这些值。假设使用Maven,可按如下配置重写示例:

info.app.encoding=@project.build.sourceEncoding@
info.app.java.source=@java.version@
info.app.java.target=@java.version@
3.3 Git提交信息

info端点的另一有用特性,在项目构建完成后发布git源码仓库的状态信息。若GitProperties bean可用,Spring Boot将暴露git.branch,git.commit.id和git.commit.time属性。

若classpath根目录存在git.properties文件,Spring Boot将自动配置GitProperties bean。

使用management.info.git.mode可展示全部git信息(如git.properties的全部内容):

management.info.git.mode=full
3.4 构建信息

若BuildProperties bean存在,info端点也会发布你的构建信息。

若classpath下存在META-INF/build-info.properties文件,Spring Boot将自动构建BuildProperties bean。Maven和Gradle都能产生该文件

配置info:

启动观察输出信息:

4 Beans

Bean 端点提供有关应用程序 bean 的信息。

获取 Beans
  • /actuator/beans GET 请求 响应的结构: 结果中可见 SpringBoot 默认的数据源:
5 总结

的确很方便,可是 JSON 形式的,如何更加可视化呢?敬请期待后文内容。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0953s