springboot框架四个基础核心三(actuator)

1.引言

springboot框架同样有四个基础核心,分别是:

  • 依赖管理
  • 自动装配
  • 监控Actuator
  • CLI工具

自动装配,与依赖管理只要用过springboot框架,我们都能体会到它的好处;CLI在实际项目中应用较少,不需要很关心;剩下actuator健康检查,我们是不应该忽略它的!

那么actuator到底是个何方神圣呢?这么说吧,在微服务盛行的今天,可观测性是很重要的一个事情,我们需要知道每一个服务的运行状态。

于是,springboot框架给我们提供了actuator模块,通过actuator组件可以非常方便的监控springboot应用状态,提供了全方位的健康检查能力(比如后面我们可以通过actuator实现服务优雅下线)

2.案例

2.1.搭建actuator环境

要搭建actuator监控环境,只需要遵循搭建springboot应用的三板斧

  • 加依赖
  • 加注解
  • 写配置

这么方便,都得益于前面依赖管理,自动装配两个特性,你看这是一套组合拳。而且这个地方只需要两步即可:加依赖、写配置。

  • 加依赖
xml 复制代码
<!--监控健康检查依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 写配置
yaml 复制代码
management:
  endpoints:
    web:
      exposure:
        include: '*'
        exclude: beans,env,metrics
  endpoint:
    health:
      show-details: always

配置说明

  • management.endpoints.web.exposure.include:配置要暴露的端点,*表示暴露所有端点
  • management.endpoints.web.exposure.exclude:配置不要暴露的端点,多个通过逗号隔开
  • management.endpoint.health.show-details:配置是否显示health端点详情

2.2.体验actuator监控

启动应用体验actuator,访问http://ip:port/actuator,查看暴露的端点信息

json 复制代码
// 20210801222532
// http://127.0.0.1:8080/actuator

{
  "_links": {
    "self": {
      "href": "http://127.0.0.1:8080/actuator",
      "templated": false
    },
    "caches-cache": {
      "href": "http://127.0.0.1:8080/actuator/caches/{cache}",
      "templated": true
    },
    "caches": {
      "href": "http://127.0.0.1:8080/actuator/caches",
      "templated": false
    },
    "health": {
      "href": "http://127.0.0.1:8080/actuator/health",
      "templated": false
    },
    "health-path": {
      "href": "http://127.0.0.1:8080/actuator/health/{*path}",
      "templated": true
    },
    "info": {
      "href": "http://127.0.0.1:8080/actuator/info",
      "templated": false
    },
    "conditions": {
      "href": "http://127.0.0.1:8080/actuator/conditions",
      "templated": false
    },
    "configprops": {
      "href": "http://127.0.0.1:8080/actuator/configprops",
      "templated": false
    },
    "loggers": {
      "href": "http://127.0.0.1:8080/actuator/loggers",
      "templated": false
    },
    "loggers-name": {
      "href": "http://127.0.0.1:8080/actuator/loggers/{name}",
      "templated": true
    },
    "heapdump": {
      "href": "http://127.0.0.1:8080/actuator/heapdump",
      "templated": false
    },
    "threaddump": {
      "href": "http://127.0.0.1:8080/actuator/threaddump",
      "templated": false
    },
    "scheduledtasks": {
      "href": "http://127.0.0.1:8080/actuator/scheduledtasks",
      "templated": false
    },
    "mappings": {
      "href": "http://127.0.0.1:8080/actuator/mappings",
      "templated": false
    }
  }
}

访问health端点:http://ip:port/actuator/health

json 复制代码
// 20210801222650
// http://127.0.0.1:8080/actuator/health

{
  "status": "UP",
  "components": {
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 1000203087872,
        "free": 493320859648,
        "threshold": 10485760,
        "exists": true
      }
    },
    "edu": {
      "status": "UP",
      "details": {
        "status": 666
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}

2.3.actuator高级特性

除了基本玩法,actuator还有一些高级的玩法。比如说:

  • 修改暴露端点端口
  • 定义info端点信息
  • 自定义业务监控指标

2.3.1.修改暴露端点端口

yaml 复制代码
management:
  server:
    port: 8888

配置management.server.port后,访问健康检查端点端口需要换成8888,等于是与业务应用独立开了

2.3.2.定义info端点信息

yaml 复制代码
info:
  app: follow-me-springboot-actuator
  author: yanghouhua
  date: 20210731

通过info.xxx的形式,可以给http://ip:port/actuator/info端点增加描述信息,效果

json 复制代码
// 20210801223330
// http://127.0.0.1:8080/actuator/info

{
  "app": "follow-me-springboot-actuator",
  "author": "yanghouhua",
  "date": 20210731
}

2.3.3.自定义业务监控指标

除了springboot内置健康检查的相关端点,我们可以通过扩展HealthIndicator接口,增加业务指标监控,比如说

java 复制代码
/**
 * 自定义健康检查
 *
 * @author ThinkPad
 * @version 1.0
 * @date 2021/7/26 20:43
 */
@Component
public class EduHealthIndicator implements HealthIndicator{

    public Health health() {
       // return  Health.unknown().withDetail("status",666).build();
       // return  Health.unknown().withDetail("status",666).build();
        return  Health.up().withDetail("status",666).build();
    }
}

效果

相关推荐
白-胖-子18 分钟前
深入剖析大模型在文本生成式 AI 产品架构中的核心地位
人工智能·架构
武子康26 分钟前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
舒一笑1 小时前
我的开源项目-PandaCoder迎来史诗级大更新啦
后端·程序员·intellij idea
@昵称不存在2 小时前
Flask input 和datalist结合
后端·python·flask
zhuyasen2 小时前
Go 分布式任务和定时任务太难?sasynq 让异步任务从未如此简单
后端·go
东林牧之3 小时前
Django+celery异步:拿来即用,可移植性高
后端·python·django
超浪的晨4 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
Pomelo_刘金4 小时前
用 DDD 把「闹钟」需求一点点捏出来
架构·rust·领域驱动设计
AntBlack4 小时前
从小不学好 ,影刀 + ddddocr 实现图片验证码认证自动化
后端·python·计算机视觉
Pomelo_刘金4 小时前
Clean Architecture 整洁架构:借一只闹钟讲明白「整洁架构」的来龙去脉
后端·架构·rust