![Spring Cloud实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/796/26846796/b_26846796.jpg)
1.3 通过Actuator监控Spring Boot运行情况
当我们把Spring Boot部署到服务器之后,一般需要监控微服务的运行情况:一方面,我们可以据此分析和排查问题;另一方面,我们能以此为依据优化代码。
Spring Boot里提供了spring-boot-starter-actuator模块,引入该模块后,我们能实时地监控微服务的部署和运行情况,从而能减少程序员编写监控系统模块所用的工作量。这里我们将着重讲一下常用的监控指标。
1.3.1 准备待监控的项目
新建一个基于Maven的名为SpringBootActuatorDemo的项目,启动后,再通过actuator来监控它所在站点的实时情况。
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-T24_32020.jpg?sign=1739621184-vkQ1L0vVYzmvWDxewaaLs4nrS58FGtCN-0-94ee1028aa542edf3d89747ff7eebb6d)
步骤01 在pom.xml加入Spring Boot和actuator的依赖包,关键代码如下:
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P24_32021.jpg?sign=1739621184-ksnavUBTHQ051wuZGbxwtSa5gzopP5of-0-bacc38dea781540ed1dd1d733007d420)
其中,第2~6行引入的是Spring Boot的依赖包,第7~11行引入的是actuator的依赖包,其他代码不变。
步骤02 在App.java的main函数里,同样编写启动Spring Boot的代码。
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P24_32022.jpg?sign=1739621184-PelJ8XqlGlsLZ5SygkZONffZKJ7aahRs-0-9335a94e5641f67386a2ea466e67baf7)
步骤03 在src目录下,编写包含配置信息的application.properties文件。在Spring Boot的项目里,我们一般把配置文件放在这个目录,如图1.11所示。
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P24_1690.jpg?sign=1739621184-9ZXOojdxbLNjEEHmgyPuRsXozIs8BJM3-0-c391808683accc68f062af6b8170b212)
图1.11 application.properties文件的一般位置
application.properties里的代码如下所示。
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P24_32864.jpg?sign=1739621184-xKaMwQPfVruqBVHR3RvS8nAzSf8e4wIh-0-ea5592dac16e1bd7bbb18974628be7bf)
其中,第1行的代码用来指定本站点(运行本项目的站点,也叫节点)无须验证,这样我们就能通过浏览器看到一些actuator给出的监控信息,第2~5行的代码用来指定本站点的信息。
编写完成后,通过App.java启动Spring Boot,随后,我们就能通过actuator查看监控信息。
1.3.2 通过/info查看本站点的自定义信息
在确保启动SpringBootActuatorDemo的情况下,在浏览器里输入“http://localhost:8080/info”,能看到如下输出信息:
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P25_32024.jpg?sign=1739621184-qp6gDsuOOVZWVC8TJ4TA46pl0aFJoHvy-0-942424b2a10a0a9b8825a183b40462d3)
其中,第2行的输出信息和我们在application.properties里配置的站点信息是一致的。
1.3.3 通过/health查看本站点的健康信息
输入“http://localhost:8080/health”,能看到如下关于本站点健康信息的输出:
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P25_32025.jpg?sign=1739621184-3uYvbWxCiaMriQABrEMFlltCLn8HKhBR-0-d90dccd896cd72c17ec43dc94cdbd8d4)
在第1行里,能看到本站点的状态是“UP”,也就是启动状态;在第2行里,能看到关于磁盘使用量的情况,总体来说,状态也是“UP”。
1.3.4 通过/metrics查看本站点的各项指标信息
输入“http://localhost:8080/metrics”,我们能看到关于本站点内存使用量、线程使用情况以及垃圾回收等信息,大致输出如下:
![](https://epubservercos.yuewen.com/C966B5/15289822005524206/epubprivate/OEBPS/Images/Figure-P25_32026.jpg?sign=1739621184-BwdVQOe2lZKb68SnKCtsf3KPCoQIopfN-0-4aa9e13a9302f7b29318135d0302dae1)
比如在上述第3行里,我们能看到空闲内存的值。这里的指标数很多,我们就不一一列出了,大家可以自己看一下。总结起来,/metrics将返回如下种类的信息:
· mem.*:描述内存使用量的信息。
· heap.*:描述虚拟机堆内存的信息。
· threads.*:描述线程使用情况的信息。
· classes.*:描述类加载和卸载的信息。
· gc.*:用来描述垃圾回收的信息。
此外,我们还能通过具体的指标名查看对应的值,比如输入“http://localhost:8080/metrics/gc.*”,就能看到垃圾回收相关指标的信息,输出如下:
1 {"gc.copy.count":60,"gc.copy.time":206,"gc.marksweepcompact.count": 2, "gc.marksweepcompact.time":97}
1.3.5 actuator在项目里的实际用法
除了刚才给出的用法外,我们还能通过/env查看当前站点的环境信息,能通过/mappings来查看当前站点的Spring MVC控制器的映射关系,能通过/beans来查看当前站点中的bean信息。
不过在项目里,我们一般不是通过浏览器来查看,而是会通过代码来定时检测,再进一步,一旦当检测到的数据低于预期就自动发警告邮件。在本书的后继部分,将给出这种做法的实际案例。