00:00
好,接下来呢,我们来说一下第八章指标监控功能,这个功能呢,可能跟我们平时的业务逻辑开发没有多大关系,但是在我们线上的生产环境里边扮演着至关重要的作用。那我们现在想象这么一个场景,我现在要开发一个大型的外B应用,那这个应用呢,我们经常要拆分成我们很多的微服务来进行开发,好我们spring BOO呢,编写出了非常多的微服务,我们一旦开发完成以后,要将这些所有的微服务都要部署到我们线上的生产环境,那此时呢,我们整个线上的生产环境就要全天候的监控到我们每一个微服务当前的一些健康状况信息,包括它的一些指标信息,比如我们的内存、CPU的占用率等等等等,那我们这个功能的开发,如果我们每一个微服务都自己开发自己的,那我们可能需要编写大量的代码,那A为服务呢,监控CPU指标,内存指标都是那一堆代码,B呢也一样,所以呢会有大量的勇于重复,那我们该怎么办?那所呢,为了。
01:00
简化这个操作,那spring呢,就会有一个模块叫spring boot I tra,所以我们说什么是spring BOO I tra呢?就是说BOO为了简化我们在线上的一些指标监控功能,专门给我们抽取的这个模块,所以呢,我们只需要在每一个微服务里边引入这个场景的starter s boot starter e trar,我们就可以立即获得我们生产级别的应用监控审计,包括我们的追踪控制等等各种这些监控统计功能,那这些功能呢,我们一点版本与二点版本的I tra其实还是有些不同,那回到我们这个之前我们来说,如果我们是使用spring boot1引入的I tra自然是1.x版本,BOOT2引入的是I tra2版本,这两个版本的区别在哪呢?如果我们是BOOT1,它的I trar呢,只支持我们使用spring m VC开发的这些外部应用,支持它的这些指标监控,而我们这个二版本的IQ trar,你的这个应用可以是使使用spring m VC。
02:00
开发jacks RS或者web flux开发都行,我们都可以直接对接出我们的整个监控功能,那包括第二个,如果我们在一版本要进行一些指标监控的这些扩展,我们是基于继承方式进行扩展的,也就是说你在一版本需要记住大量的API,大记住大量的一些类,通过继承这些类才能对我们相关的功能进行扩展,这样开发呢,也比较麻烦,所以呢,在二版本里边引入了非常多的注解,那我们只需要通过简单的几个注解,我们就能很轻松的扩展我们相关的监控功能,包括我们说的层级matrix,那我们在一版本呢,我们的j matrix就是我们说的指标,比如我们CPU的占用率,我们当前整个的线程大小,我们的内存使用率等等等,这些指标信息呢,我们是基于层级的这些配置返回,而我们在2.x可以返回我们层级维度的这些指标信息,也可以返回空间维度的,我们可以配置基于名称空间的这些配置。包括我们如果想要收。
03:00
记matrix信息在一版本,那除了我们想要人家自动配置的这些收集代码外,如果我们想要自己定制,要这些matrix收集,我们需要写大量的这个代码,挺麻烦的。当然在我们这个a tra2版本里边,它引入了一个框架叫micro meter,这个框架呢,能使我们使用简单的几个方法就能快速而强大的收集一些你的指标信息,包括呢,我们一版本的iqtra它呢默认配置了较少的安全策略,而二版本的安全策略呢,有一个整个数量级的提升,这就是我们一版本与二版本的不同。那说了这么多,我们整个spring boot应用呢,我们现在讲的版本是2.4版本,所以呢,我们现在肯定用的是二版本的IQ trar,那么这个IQ trar想要怎么使用,我们可以来快速测试一下,那对于我们这个spring boot应用来说,你想要对接我们线上的这些应用监控指标,监控功能非常简单,首先来到你的po文件里边,因为我们的整个监控功能引入咱们这个监。
04:00
共功能,那我们整个的监控功能呢,已经被spring boot抽成了一个叫IQ模块,所们引入它就行了,那整个这一块的springt官方文档大家可以来参照,Springb呢,专门有一个大章节叫spring BOO,就是来告诉我们的一些监控指标,审计等等这些功能的来点进来。来参照它,那我们该如何使用好,那想要使用呢,第一步,那我们先引入依赖,我们的这个IQ trar复制过来这个依赖一警以后呢,我们可以在me这一块我们来刷新一下他们依依赖里边引了什么,那在这个echr里边,我们看引了spring boot e trar的自动配置,相当于呢,你只要引了这个场景默认的一些指标监控呢,全部自动配置好,而且呢,还引了一个底层框架,就是这个micro密ter,那这个micro密ter呢,能使我们后来要自定义一些指标监控功能就会非常方便,所以呢,我们这一块的引入啊,我们也看到了它的整个这个模块引入了这个micro密ter,这是我们说的I2X,它的底层是使用micro密ter来进行整个的数据收集,然后呢,再来加上那们现在只要第一个场景一引入进来,我们可以直接启动我们这个应用,我们可以来测试一下我们当前有没有拥有我们的线上指标监控功能,然后呢,大家记住,只要我们引入了这个场景以后呢,我们去访问这。
05:20
这些boot e tra下边的所有都是我们线上的一些应用监控指标统计的这些功能,那我们可以来测试一下。那么现在这个应用呢,我们启动起来,大家注意我们这个应用呢,现在是URL的这个intercept没有配置好,那这是由于我们之前,我们之前呢引入了red,但red用完了以后,老师把这个的实例删了,所以我们整个red呢,其实已经连不上了,那连不上以后呢,我们以前对red的一些引用,比如我们专门写了一个intercept,诶这个intercept呢,我之前测试把它给注掉了,我们以前是这么写的,我们的这个intercept。他呢要拦截每一个请求,要统计请求的次数,那现在red都连不上了,所以这些呢就连不上了,那我们现在呢,要做所有之前,那我们就可以把这个全部住掉,但是我不住的情况下啊,重新启动,先让我们整个应用启动起来啊,虽然red连不上,但是呢,我们整个应用可以启动起来,那启动起来有什么问题呢?就是我们每一个请就想要统计次数,统计不到,而且呢在这会报错,大家等等啊。
06:24
好,我们应用呢,现在启动起来,因为启动起来以后呢,如果我现在来访问我的当前应用local host回车。的8080,因为我们每一个请求呢,我们现在都要进行指标监控功能,所以呢,我们可能访问一些请求,我们就访问不到,因为我们整个呃,这个不是指标监控,我们之前red里边来进行我们的访问数统计,所以大家会看到这么有一个错误,错误的原因是我们整个red没法工作,所以呢,为了整个我们这个测试期间,我们可以把red的这些东西注掉,另外呢,我们现在看到,我们现在只要对接了IQ trar这个模块,那接下来我们就拥有线上的应用监控功能,怎么测试所有的这些监控指标全部都在这个路径下,叫EQ trar下边把这个路径呢来复制过来,单词别写错,用到这个a tra a trar下边呢,我们可以来监控很多的指标,比如我们来访问它的根路径,它这一块呢,就能提示你目前可以用的指标,第一个叫A,第二个呢叫health,相当于当前应用的健康状况好,这是一个来在其他里边来访问一下。
07:33
那当前应用呢,是不是健康,我们来看当前应用呢,是宕机状态,当机状态的原因是我们这个red有问题,所以当前应用用宕机了,包括呢,我们只要现在访问当当前应用的任何请求,我们基本上呢都是访问不到的,因为每一个请求呢,我们都要用red进行统计,所以呢就会给我们出现404,所以我们确定诶这个应用呢,没法给我们正常服务,当前应用确实宕机了,所以我们在这一块监控指标里边,就能统计到它的这个健康状态信息是宕机,然后呢,包括我们这个指标里边呢,还有一个比如呢,我们在还可以发路径,你的这个健康里边,包括我们在后来会说,你可以在这个health后边再来写我们哪个模块是不是健康的啊,我们后来再说吧,然后呢,你也可以来查看info info呢相相当于当前应用的信息回车,所以呢,我们这个默认一进来,我们spring boot IQ try的模块就会给我们开放两个监控指标,一个是health,一个是in。
08:33
好,Health呢,用来监控我们的健康状况,而英O呢,是当前应用的这个详细信息,你定义的是什么?详细信息就是什么信详细信息我们把这一块大家注意,接下来呢,有一个概念,我们把e tra后边的这个东西我们称为end point,相当于我们的监控端点end point,而endpoint呢,我们说从boot官方有非常多的endpoint,我们可以来参照boot官方文档,比如说这些endpoint都是我们可监控的端点,比如我们的一些审计事件,哎,我们当前容器里边有哪些B应包括呢?我们的缓存信息,以及我们当前云容器里边啊,哪些自动配置开启了,哪些自动配置关闭了,还有我们的整个配置,呃,Con props,那就是整个我们所有的属性配置信息,以及当前的环境信息,还有我们的数据库迁移信息,以及我们当前的,诶,这是我们的健康指标信息,还有我们的HT tra,然后它会收集我们前啊最最新的100个。
09:33
请求响应信息,还有我们的info,那我们看到呢,Health和info这两个endpoint端点相当于我们是可以访问的,但其他的呢,我们来看一下,我如果想要访问当前应用里边到底有多少个B应现在容器中到底有多少个组件发现呢,不能访问这块呢,就会给我们在这一直转,我们这个不能访问,不能访问的原因呢,我们还有一一句,就是说首先什么boot在我们底层会有非常多的监控端点,但是呢,这些监控端点不是默认全都开启的,除了刹特灯这个端点外,刹特灯这个端点呢,默认是禁用的外,剩下的端点呢,是默认开启的,但是呢,剩下的这些监控端点它默认只开启什么监控模式,我们说一下,在spring boot底层有两种监控模式,一种呢是GMX,一种呢是HTTPGMX呢,就是大家可能以前用过呢,我们这么一个东西,我们来windowsr,我们如果装了Java环。
10:33
对,Java里边呢,给我们带来一个工具叫解抗素,相当我们这个Java的控制台,这个控制台呢,我们连上我们当前的这个应用boot web啊,这是我们的当前应用BOOT5WEB的命,在这个应用里边呢,我们目前的这个监控仅限于我们这个MB里边,我们可以看一下。在这个org spring framework andpoint,这就是我们说的监控端点,如果我们现在想要在web页面,我来查看这个监控端点,比如说我想要来看我们当前容器中到底有哪些组件,我们看不到,但是呢,在这儿能看到,我们在这呢,监控端点默认给暴露在我们的这个呃,解抗素相当于是以GMX方式暴露的,我们可以调用它的这个操作B此它呢就能直接给我们返回,但容器中到底有哪些组件,比如呢,这个组件是一个单实力的,这个组件的类型是什么?在这都有,它有多少组件呢?一大一直往前拉,往后拉,这一块呢,挺长的,它这个只不过是一个单行显示,我能看到它这个进度条,这挺长的,所以呢,这是我们这监控端点,那其实在后来我们呢,还是习惯于使用HTTP的方式来查看这些监控指标,因为这样的做的好处就是,如果我们现在公司有一个职业前端,前端呢,还可以给我们开发一个整个。
11:53
它的监控大面板,这个面板呢,就直接给我们当前服务发请求,比如我们要当前服务里边它容器中到底有多少这个组件,我们可以在监控面板里边做一个计术,比如当前容器中有250个组件,对吧,每个组件都是什么样子,所以我们可以对接前端,前端给我们来发请求,所以我们现在呢,还是希望把我们每一个这个监控端点暴露成HTTP的方式,而现在呢,来参照官方文档,能看到这还有这么一个效果,如果我们想要暴露端点,那默认呢,我们的这些端点大家注意,这有一个对比表都默认呢,都是以GMX方式暴露的,也就是说我们可以在解康素这个控制台里边,通过m be里边看到它的这些操作,而我们web方式呢,这些默认都没暴露,Web方式呢,只暴露了health和info,所以呢,我们为了方便起见,为了完全对接我们的这个应用监控功能,我们可以在这儿做一个这样的配置,配置一个什么呢?来参照我们这一块的官方文档。
12:53
啊,如果我们自己想要暴露使用management andpoints,然后呢,接下来GMX就代表,哎,我们如果使用GMX方式,我们要暴露哪些web,就是使用web方式暴露哪些,但大家在这儿注意,我们所有跟监控有关的这个配置,比如说IQ模块的所有配置全部都是以management开始,所以我们在这呢来配一下management是所有咱们这个E的这个初始配置,是所有A的配置,所以呢,我们使用management,好,我来配一个,配一个什么呢?我们首先有一个management里边呢,有一个叫end points,大家注意啊,End points叫所有的监控端点,我们BOO里边呢,有非常多的监控端点,有一个enable by default就是默认开启的监控端点,我们可以以一个处,那这个呢,就是默认开启所有监控端点,默认开启所有监控。
13:53
端点好,默认开启所有监控端点以后呢,那接下来我们还想把这些监控端点以web的方式暴露出来,当然你这一块呢,不配置,其实也是默认开启所有的监控端点,你比如把它点进来看一下啊,它的这一块呢,其实它是触的,它是这是一个接S不好看,好那再接下来,那如果我们想要以web的方式暴露出来,来写一个它专门有一个叫n point web explorer,也就是说我们现在呢,以web方式暴露的监控端点包含哪些?大家注意这块呢,有health info在默认呢,只以web方式暴露我们的health和info这两个监控端点,而我们现在呢,可以写一个,这个叫星星呢,就代表我现在默认以外表方式暴露所有端点,一外表方式暴露所有端点,好,我们现在来做一个简单测试,走。
14:54
只要我们一引入IQ传模块,接下来呢,我们暴露所有的监控端点,那接下来我们就可以访问了,那我们来参照官方文档,我们能访问的端点内容有很多,这些呢都是我们的监控端点,比如我们来看一下当前容器中有哪些组件来BS来回车,诶这一块呢,就给我返回当前容器中有这么多的组件,但是这个呢,因为它返回的是杰森,不好看,所以呢,我可以使用我的火狐浏览器装了杰森插件,然后我们能看到。com当前上下文,上下文那当前应用,当前应用里边有哪些组件,打开BS,那有这么多的组件,包括每一个组件,比如这个default s handler mapping,这就是s spring m VC里边的handler mapping组件,组件的别名叫什么?这个组件的实例,它single单实例的,包括呢,这个组件的类型,它是一个handle map,然后呢,包括这个组件关联的一些资源,这个组件呢在哪?呃,在这一块是给我们配置的等等等等,所以呢,组件的详细信息呢,在这全都有。
15:54
哎,我们这儿呢,啊,我们也不知道这儿到底有多少个组件,反正是挺多的,那么这就是我们说的整个呢,我们如果使用我们的这个EQ try,我们只需要暴露所有我们就能看到来,其他的东西我们也来看一下,比如还有这个conditions conditions里边呢,相当于给我们集合了我们当前这个应用里边哪些条件是自动开启的,哪些没有开启,比如有一个positive和negative positive呢,就是我们开启的像生效的自动配置,比如我们direct数据源的自动配置,它就生效了,它怎么生效了呢?它这一块的信息也有完整的有,哎在这一块呢,都有提示,这相当于是一个自动自动配置报告,这是呢,我们所有开启的自动配置这一块呢,是没有开启的自动配置,诶,比如我们con啊这些,还有我们的这个log filter,这个not match,它没有匹配,没有匹配的原因是什么,在这儿呢,也都说了,所以呢,我们能看到通过conditions就能拿到我们当前系统里边的。
16:54
的所有自动配置报告,如果自己呢,写一个外B面板,你呢还可以通过外B面板实时的来分析你容器中哪些功能开启了,哎,你当然应用哪些功能开启了,哪些失败了等等等等,在这呢也非常方便,包括呢我们来再来测试一下其他的监控端点,比如con pros,相当来看一下我们当前应用到底配了哪些属性,哪些属性是生效的,我们来看一下啊,当前应用BS我们的这些组件,我们组件里边呢会配置很多属性,来把这些呢都缩一下,这些呢相当于我们当前系统里边应用了的所有配置,比如我们来举一个例子,就有一个transition,相当于我们跟事物有关的配置,Spring transceition开头的我们虽然没配,哎,我们说这一块没配,但是呢,它有一些默认值在这,那么来看一个我们配了的management,我们这个management呢,我们来配了,包括我们的red这个相关的这个属性我们也配了,比如它的呃,Pre,我们前缀是spring ready,那我们配了哪些?
17:54
属性,我们spring red里边,我们看到我们配的是port端口号6379,包括我们的呃,这个客户端类型简edit,它的密码是多少,呃,这个呃,Database是多少,我们在这呢都有,还有它的这个访问的其他信息,比如我们简edit的一些配置,所以呢,我们这一块呢,相当于就能集合了我们当前应用里边所有我们配置文件里边已经生效了的配置值,然后呢,包括我们还有比如en nv,那就是我们来监控我当前应用的环境变量信息,所有的环境变量,包括我们这个服务的端口号等等,以及我们Java的这个,呃,运行时环境的一些环境变量在这都能看到,包括我们也可以来看一下它的这个health信息,对吧?另外呢,我们最激动人心的,我们经常也经常爱使用的就是这个matrix,什么叫matrix呢?这就叫指标走来看一下这些指标,比如我们看到这一个叫htp server request,相当于呢,它能监控到这些指标。
18:54
我们当前呢,到底发了多少请求,还有我们g vm buffer的这个数量,还有我们g vm buffer的内存用了多少,但我们会发现它这一块呢,只有这些名字,但是这些指标的值是多少,没有,那怎么能得到这些值呢?我们只需要这么来做,把它呢复制过来,这是我们的matrix指标监控,我们监控的具体某一项,我们再来一访问,好,这一项的值就来了,好,我们现在呢,看到这项的具体值叫g vm buff法的这个使用量,它呢是以字节为单位,先使用了15549这么多,所以这就是我们说的整个指标监控功能,如果我们此时web前端给我们写了一个可视化界面,那他呢就会发请求,拿到这些杰森,每个杰森的实际值再拿出来,在这一块呢,就给我们整个能展示出我们的监控大板。
19:41
好,这就是我们体验了spring BOO的整个IQ trar该怎么使用,非常简单,只需要两步,第一步来引入我们的这个IQ tra模块,第二步我们把它呢暴露出来,默认呢,我们开启所有的断点信息,然后呢以web方式暴露出来就行,然后我们接下来就可以测试我们能监控各种各样的指标,而且呢,它的整个访问路径就是这样子的,注意它的整个路径是IQ try下边的,哎,下边呢,我们一般加上端点名字,我们称为end point,我们的监控端点and point name,那加上我们的监控端点名就行了,包括我们的监这监控端点名下边,比如我们的这个matrix下面可能有详细信息,我们还可以有详细的这个pass路径啊,Detail pass,我们要详细监控的这个路径,所以呢,我们发送请求的语法格式就是这么来做的,而且呢,我们后来结束的时候呢,也可以给大家整一整,合一个可视化平台,这样呢,直接能把我们的所有东。
20:42
器全部呢,可视化的紧存起来,这是我们说的boot e。
我来说两句