actuator(端点)可以帮助我们在程序运行时,帮我们查看提供程序运行过程中的一些数据。从《Spring 实战》中了解到这个,《Spring Cloud微服务实战》中对它有更深入详细的介绍,我觉得这个还是很有记录的意义的。
Spring boot actuator:提供健康检查,审计,指标收集
启用actuator方式:
pom依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
默认暴露的只有health和info如果需要暴露其他的端点需要做外部化配置/或者启动参数:
properties文件:
management.endpoint.web.exposure.include=*
或者
启动参数使用-Dmanagement.endpoint.web.exposure.include=beans,evn,conditions
对应路径类似:/actuator/beans
启动参数示例:
配置management.endpoint.web.exposure.include=*后可在idea看见可用的actuator属性
根据端点的作用, 可以将原生端点分为以下三大类。
• 应用配置类:获取应用程序中加载的应用配置、 环境变量、 自动化配置报告等与 Spring Boot应用密切相关的配置类信息。(/autoconfig 未找到该配置,或者因为版本更新不再提供?)
• 度最指标类:获取应用程序运行过程中用于监控的度量指标, 比如内存信息、 线程池信息、 HTTP请求统计等。
• 操作控制类:提供了对应用的关闭等操作类功能。
一、应用配置类:
- /bean
请求结果举例:
"tomcatWebServerFactoryCustomizer": {
"aliases": [],
"scope": "singleton",
"type": "org.springframework.boot.autoconfigure.web.embedded.TomcatWebServerFactoryCustomizer",
"resource": "class path resource [org/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration.class]",
"dependencies": [
"environment",
"server-org.springframework.boot.autoconfigure.web.ServerProperties"
]
},
必包含的信息:
bean: Bean 的名称。
scope:Bean 的作用域。
type:Bean 的 Java 类型。
• resource: class 文件的具体路径。
• dependencies: 依赖的 Bean 名称。
-
/configprops该端点用来获取应用中配置的属性信息报告
-
/env: 该端点与/configprops不同它用来获取应用所有可用的环境属性报告包括 环境变量、NM属性、应用的配置属性、命令行中的参数。所以它可以帮助我们方 便地看到当前应用可以加载的配置信息, 并配合@ConfigurationProperties加载
-
/info: 该端点用来返回一些应用自定义的信息。 默认清况下, 该瑞点只会返回一个 空的JSON内容。我们可以在app巨ca巨on.properties配置文件中通过info 前缀来设置一 些属性, 比如下面这样:
info.app.name=spring-boot-hello
info.app.version=vl.0.0
二、度量指标类
上面所介绍的应用配置类端点所提供的信息报告在应用启动的时候就已经基本确定了其返回内容, 可以说是一 个静态报告。 而度量指标类端点提供的报告内容则是动态变 化的,这些端点提供了应用程序在运行过程中的一些快照信息,比如内存使用情况、 HTTP 请求统计、外部资源指标等。这些端点对于我们构建微服务架构中的监控系统非常有帮助
- /metrics:
该端点用来返回当前应用的各类重要度量指标,比如内存信息、线程信息、 垃圾回收信息等。该端点需要结合/metrics/{requiredMetricName}来使用,
/metrics返回的结果如下
{
"names": [
"http.server.requests",
"jvm.buffer.count",
"jvm.buffer.memory.used",
"jvm.buffer.total.capacity",
"jvm.classes.loaded",
"jvm.classes.unloaded",
"jvm.gc.live.data.size",
"jvm.gc.max.data.size",
"jvm.gc.memory.allocated",
"jvm.gc.memory.promoted",
"jvm.gc.pause",
"jvm.memory.committed",
"jvm.memory.max",
"jvm.memory.used",
"jvm.threads.daemon",
"jvm.threads.live",
"jvm.threads.peak",
"jvm.threads.states",
"logback.events",
"process.cpu.usage",
"process.files.max",
"process.files.open",
"process.start.time",
"process.uptime",
"system.cpu.count",
"system.cpu.usage",
"system.load.average.1m",
"tomcat.sessions.active.current",
"tomcat.sessions.active.max",
"tomcat.sessions.alive.max",
"tomcat.sessions.created",
"tomcat.sessions.expired",
"tomcat.sessions.rejected"
]
}
结合/metrics/{requiredMetricName}使用将尚明的name当作{requiredMetricName}使用:
例如:http://127.0.0.1:8081/actuator/metrics/system.cpu.count,结果:
. 系统信息:包括处理器数量processors、运行时间uptime和instance.uptime、 系统平均负载 systemload.average。
• mem.: 内存概要信息,包括分配给应用的总内存数量以及当前空闲的内存数量。
这些信息来自java.lang.Runtime。
• heap. : 堆内 存 使用情况。 这 些 信 息 来 自 java.lang.management.
MemoryMXBean 接口中 getHeapMemoryUsage 方法获取的 java.lang.
management.MemoryUsage。
• nonheap.: 非堆内存使用情况。 这些信息来自 java. lang.management.
MemoryMXBean接口中ge七NonHeapMemoryUsage方法获取的java.lang.
managemen七.MemoryUsage。
暹 七hreads.: 线程使用情况,包括线程数、守护线程数(daemon汃线程峰值(peak)
等, 这些数据均来自java. lang.management.ThreadMXBean。
• classes.: 应用加载和卸载的类统计。这些数据均来自java.lang.managemen七.
ClassLoadingMXBean。
• gc. : 垃圾收集器的详细信息, 包括垃圾回收次数gc.ps—scavenge.count 垃圾回收消耗时间 gc.ps_scavenge.time、 标记-清除算法的次数 gc.ps marksweep.count、 标记-清除算法的消耗时间gc.ps_marksweep.time。 这些数据均来自java.lang.management.GarbageCollec七orMXBean。
• httpsessions. : Tomcat容 器 的会话 使用情况。 包 括最大会话 数 httpsessions.max和活跃会话数httpsessions.active。 该度量指标信
息仅在引入嵌入式Tomcat作为应用容器的时候才会提供。
gauge.: HTTP请求的性能指标之 一,它主要用来反映 一 个绝对数值。 比如上 面示例中的gauge.response.hello: 5, 它表示上 一 次hello请求的延迟
时间为5毫秒。
counter.*: HTTP 请求的性能指标之 一,它主要作为计 数器来使用,记录了 增加量和减少量。 上述示例中的counter.s七红us.200.hello: 11, 它代表
了 hello请求返回200状态的次数为11。
对于gauge.*和counter.*的统计, 这里有 一 个特殊的内容请求 star-star, 它代表了对静态资源的访问。 这两类度量指标非常有用,我们不仅可以使用它默认 的 统 计指 标,还可以在程序中轻松地增加自定 义 统 计 值 。 只需要 通过注入
org.springframework.boot.actuate.metrics.CounterService和org. springframework.boot.actuate.metrics.GaugeService 来实现自定 义的统计指标信息。比如我们可以像下面这样自定义实现对hello接口的访问 次数
统计。
2. /dump: 该端点用来暴露程序运行中的线程信息。它使用 java.lang.rnanagernent. ThreadMXBean 的 durnpAllThreads 方法来返回所有含有同步信息的活动线程详 情。
• /trace: 该端点用来返回基本的 HTTP 跟踪信息。 默认情况下, 跟踪信息的存储采用 org.springfrarnework.boot.actuate.trace.InMernoryTraceRepository
实现的内存方式, 始终保留最近的100条请求记录。
操作控制类
操作控制类端点拥有更强大的控制能力,如果要使用它们的话,需要通过属性来配置开启操作。
在原生端点中, 只提供了一 个用来关闭应用的端点: /shutdown (在后续我们引入了 Eureak 之后, 会引入更多控制端点)。 可以通过如下配置开启它:
endpoints.shutdown.enabled=true
在配置了上述属性之后,只需要访问该应用的/shutdown端点就能实现关闭该应用的 远程操作。
后续阅读到相关的操作控制类会继续更新