指标监控-基本概念
# 610.指标监控-基本概念
在生产环境中,监控是非常重要的一环
# 简介
未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。如果每个微服务都监控CPU的话,如果每个都自己写监控的代码,则会有很多的重复
为此,SpringBoot抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
文档中也有专门的一部分讲监控:
# 如何使用
首先引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2
3
4
其依赖如下:
# 基本概念
引入依赖后,重启,访问 localhost:9999/actuator/ (opens new window),可以看到有几个链接:
其中http://localhost:9999/actuator/health就是项目的健康状态,目前是启动的(up):
info则相当于目前应用的信息,目前是空的:
# 指标、端点
在actuator路径后面的内容,也称之为Endpoints,监控端点,在文档中也列出了所有的值(不过目前只有health和info有效),例如beans则是列出所有的bean组件:
# 常用端点
ID | 描述 |
---|---|
auditevents | 暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件。 |
beans | 显示应用程序中所有Spring Bean的完整列表。 |
caches | 暴露可用的缓存。 |
conditions | 显示自动配置的所有条件信息,包括匹配或不匹配的原因。 |
configprops | 显示所有@ConfigurationProperties 。 |
env | 暴露Spring的属性ConfigurableEnvironment |
flyway | 显示已应用的所有Flyway数据库迁移。 需要一个或多个Flyway组件。 |
health | 显示应用程序运行状况信息。 |
httptrace | **显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。 |
需要一个HttpTraceRepository组件。** | |
info | 显示应用程序信息。 |
integrationgraph | 显示Spring integrationgraph。需要依赖spring-integration-core。 |
loggers | 显示和修改应用程序中日志的配置。 |
liquibase | 显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。 |
metrics | 显示当前应用程序的“指标”信息。 |
mappings | 显示所有@RequestMapping路径列表。 |
scheduledtasks | 显示应用程序中的计划任务。 |
sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话。 需要使用Spring Session的基于Servlet的Web应用程序。 |
shutdown | 使应用程序正常关闭。默认禁用。 |
startup | 显示由ApplicationStartup收集的启动步骤数据。 需要使用 SpringApplication 进行配置BufferingApplicationStartup 。 |
threaddump | 执行线程转储。 |
最常用的几个:Health、Metrics和Loggers
# JXM
由于端点可能含有敏感的信息,所以目前只有info和health能通过HTTP的方式访问,其他的都是JMX的方式暴露的。
什么是JXM:
JMX是Java Management Extensions 的简写,即Java管理扩展,这门技术是对Java应用程序和JVM进行监控和管理的,在企业实际开发过程中,所有的程序都是需要进行监控的,没有监控,程序就相当于是裸奔。
在一些小公司可能没有监控,只注重于功能,但是在大公司中,没有监控是绝对不可能的。JMX是Java官方提供的一套用于监控Java程序和JVM运行时状态的标准API。
很多开源软件都是用JMX来实现性能监控的,比如大名鼎鼎的Kafka
在文档中也有列出什么指标可以通过JMX访问:
我们可以打开jconsole(在cmd中运行该命令):
然后就可以查看beans的指标了:
一般来说,我们更倾向于使用HTTP的方式,这样方便前端人员定制化展示信息。
# 暴露端点
那如何暴露某个端点呢?看看文档:
To change which endpoints are exposed, use the following technology-specific include and exclude
Property Default management.endpoints.jmx.exposure.exclude management.endpoints.jmx.exposure.include * management.endpoints.web.exposure.exclude management.endpoints.web.exposure.include info, health
通过配置可知,有两种暴露方式,一种是暴露jmx
的,另一种是暴露web
的
例如我们在yaml中这样配置:
management:
endpoints:
enabled-by-default: true # 默认开启所有监控端点
web:
exposure:
include: "*" # 以web方式暴露所有监控端点
2
3
4
5
6
注意:endpoints是配置全部端点的,后续我们配置单个端点时用的是endpoint
重启,访问beans,可以看到所有的bean:
还有自动配置的信息:
还能看配置信息,例如Redis的:
# metrics
访问metrics,能看到运行时指标:
具体怎么看指标的值?在URL后面加上指标的名字:
# Actuator版本的区别
这里简单说下区别,了解即可:
# 源码
已将本文源码上传到Gitee (opens new window)或GitHub (opens new window) 的分支demo22,读者可以通过切换分支来查看本文的示例代码