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();
    }
}

效果

相关推荐
Shulex11 小时前
跨境电商 AI Agent 核心架构解析:从只读问答到自主执行的工程落地
人工智能·架构·智能客服·跨境电商
学长毕设11 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
钱工的门窗技术笔记11 小时前
室内极窄全景移门的支承路径与预留接口:轨道形式、型材壁厚口径与验收边界
物联网·架构·数据分析
码农小旋风12 小时前
Ray分布式计算引擎介绍
人工智能·架构
滴滴答答哒12 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
ZhengEnCi12 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
星融元asterfusion12 小时前
工业网络升级实战:100G 双轨 Leaf-Spine 架构破解高并发出货网络瓶颈
网络·架构·spine
天远数科13 小时前
零信任架构实战:基于天远企业法人四要素高级版构建自动化供应商资质穿透核验网关
人工智能·架构·自动化
深蓝AI14 小时前
苹果智能入华拆解:八样首批功能、支持的机型、千问在三个入口的位置
人工智能·架构
captain37614 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis