指标监控-基本概念
# 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,读者可以通过切换分支来查看本文的示例代码