[Day - 29] - 深透 Spring Actuator 创造系统服务监视神之眼

Abstract

大家好,我是游戏王怪兽之决斗小编威斯~~丁,想必大家都知道游戏王的贝卡斯的千年眼可以看到每个人的心灵....心灵透视~~~
image 差不多是这样子垃....别问我这监测服务有名字吗,他叫哇~没错 就只有哇(WAR,Weisting ActuatoR)
一样的道理,无论您开发何种服务系统,必定都会遇到障碍排除(Trouble SHOOOOOOOTING)问题,来跟我念一次,你也只剩看到我再发文文章一天了,TROOOOOUBLE SHOOOOOOTING,好拉,此时您除了透过Log跟程序码进行解析臭虫(Bug)外,势必需要监视这套系统,看到所有问题,才可以顺利解决,今天小编就带给大家一套Spring Actuator服务监测套件,这套件不仅可以取代我们早期的JConsole监测套件,而且还可以透过应用程序接口(API)进行与其他系统介接,透过此项套件,在新的时代来临,小编的思想是这样,没有旧技术这句话,只要你觉得好用,并且马上学以致用,这就是新技术,所以小编在今日选用前端框架Vue及图形设计框架Vuetify,并整合入此套监测套件,这套是近期蛮盛行的,颇多神级人物都用来监测Spring Cloud Eureka,但这居多透过JMX拉,我很难解释,只能看後年,为什麽是後年,因爲明年不确定因素太多,哎~不过,真的有点潮,等一下让小编带你潮一下,不潮不用钱,我是小编,我是贝卡斯,下面让小编来介绍Actuator运作原理与支援内容吧。

Principle Introduction

Spring Actuator中所有端口都是透过@Endpoint进行标注个类别为一个监测终端点的Bean,并透过@ReadOperation进行注记监测方法位置,所有的终端点(@EndPoint)都是透过配置类别(EndpointWebMvcManagementContextConfiguration)中定义的EndpointHandlerMapping进行映射处理达成的,故此BeansEndpoint皆透过EndpointAutoConfiguration进行注入IOC容器,在这边可以看出,终端点(@EndPoint)功能相当於Spring中的控制器(@RestController),透过AbstractWebMvcEndpointHandlerMapping.initHandlerMethods中把所有终端点(@EndPoint)配制成符合规范的结构,并注入至HandlerMapping集合中,便可完成所有监测项目端点API结构的生成与配置。

目前Spring Actuator支援两种协定,第一、JMX(Java Management Extensions,Java管理扩充)协定,有如小编最初运用的监控套件JConsole,将各种需要监测的物件包装成代管Bean(MBean,Managed Bean),透过JMX及RMI(Remote Method Invocation)进行监测与管理,第二种为透过TCP/IP Web API进行监测,为上叙透过@EndPoint进行配置各项监测API服务。

以下为预测的所有监测API,提供给各位开发者参考

No Web API
1 /actuator/beans
2 /actuator/caches
3 /actuator/health
4 /actuator/info
5 /actuator/conditions
6 /actuator/shutdown
7 /actuator/configprops
8 /actuator/env
9 /actuator/loggers
10 /actuator/heapdump
11 /actuator/threaddump
12 /actuator/metrics
13 /actuator/scheduledtasks
14 /actuator/mappings

并透过增加de.codecentric:spring-boot-admin-starter-server 存储库套件,可看到Spring 内建的图形化介面,但官方套件目前尚有部分问题,没办法看得很仔细。
image

故我们运用此范例来开发一个微服务监测图形化网页功能,提供给各位做参考,以下为我们运用@EndPoint客制化一个终端点监测服务,如程序码所叙,终端点位置不可与其他预设的终点重复,并将其终端点名称配置於@EndPoint Bean 中的id,并配置回传的监测值方法编译在@ReadOperation标注的方法中,

@Component
@Endpoint(id = "memory")
public class ActuatorMontorController {

    Runtime runtime = Runtime.getRuntime();

    @ReadOperation
    public Map<String, Object> getData() {
        Map<String, Object> map = new HashMap<>();
        map.put("available-processors", runtime.availableProcessors());
        map.put("free-memory", runtime.freeMemory());
        map.put("max-memory", runtime.maxMemory());
        map.put("total-memory", runtime.totalMemory());
        return map;
    }
}

透过以上的原理叙述,各位开发者可以透过各类API取得监测资讯,或自行定义客制化的终端点监测内容。

Structure

所有的终端点(@Endpoint)皆是透过WebMvcEndpointManagementContextConfiguration中的webEndpointServletHandlerMapping进行过滤与获取相关的Bean,透过WebEndpointSupplier分析器中createEndpointBean方法中进行取得BeanFactoryUtils元件,并触发其beanNamesFOrAnnotationincludingAncestors方法取得专案中所有标注Endpoind注解的类别,最後透过WebMvcEndpointHandlerMapping中的EndpointLinksResolver进行配制成规范的API接口格式。
image

Customize Design

以下Spring Actuator为小编透过进行整合开发的GUI,提供各位读者参考。

  1. /actuator/info,透过组态设定档(application-.properties)中进行配置actuator资讯,Prefix为info.app.
    image
  1. 整合客制化终端口 /actuator/memory GUI页面,监测系统的记忆体使用情况
    image
  1. 整合客制化中端口 /actuator/beans GUI页面,监测系统启动所有Singleton或Prototype的Bean元件资讯。有没有看到,这种卡片形式Data table,在小编看十几套以来,这套最潮,我一定要说一下,不错!真的好用!看看我佛心来的免费推荐加叩叮。这个最适合用来阐述一个後端类别,是不是很合适啊!
    image
  1. 整合客制化中端口 /actuator/health GUI页面,监测服务状态(Service Status)、记忆体状态(Memory Status)及连通状态(Ping status)此三项运作状态。
    image
  1. 整合客制化中端口 /actuator/metrics GUI页面,监测系统服务各项指标。如:HTTP、JVM、LOGBACK、PROCESS、SYSTEM及TOMCAT等各项指标。由於JSON结构复杂,小编就采用TAB架构叙述所有群组资讯,主要都用来呈现JVM内部健康程度。
    image

由於范例整合页面过多,程序码在范例中,各位开发者可透过Follow up进行测试引用。

Follow Up

★ Back-End Setting

Run dev/stag/prod environment application without JAR file

 1. gradle bootRun -D profile=dev
 2. gradle bootRun -D profile=stag
 3. gradle bootRun -D profile=prod

Original spring actuator monitor website,

http://localhost:8080/sea/applications

See as raw data shown as below.

http://localhost:8080/sea/actuator

★ Front-End Setting

Step-1 : CD to spring-actuator-monitor folder

cd spring-actuator-monitor

Step-2 : Install node modules

yarn install

Step-3 : Run DEV with 8081

yarn run dev

Step-4 : Open your browser with page

http://localhost:8081/

Good luck all, kick back and relax it. weisting .

Sample Source

day-29-spring-framework-Actuator

Refernece Url

spring boot actuator工作原理之http服务暴露源码分析

SpringBoot Actuator端点的实现原理【概括整理】


<<:  [第29天]理财达人Mx. Ada-布林通道(Bollinger Band)

>>:  Vue.js 从零开始:Vue Router

热门AI平台分享 | Dataiku 让跨专业的数据协作成为可能

大数据落地的三部曲是:意愿、能力、工具 当今很多企业其实并不缺乏用数据辅助决策的意愿 缺的反而是「营...

Day 19:非 GUI 类工具之 juce::String

前几篇重点放在 JUCE GUI 相关工具,接下来换个口味,介绍几个 JUCE 提供的好用组件。首先...

Spring Framework X Kotlin Day 25 Behavior Driven Development

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

架构介绍

在进入使用Vue.js时做之前,先让我们来了解一下Vue.js的架构吧! Although not ...

人脸辨识-day23 资料的型态

在每种资料在影藏些资讯,但会因单位或数值的不同,导致代表的意义也有所不同,有以下的类别,Nomina...