天天看点

监控与管理 Actuator应用配置类度量指标类操作控制类

Actuator简介

Actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等来管理和监控应用。包括应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。同时,提供了可以扩展 Actuator端点(Endpoint)自定义监控指标。这些指标都是以JSON接口数据的方式呈现。

Actuator快速上手

在Spring Boot项目中加入一下jar:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.4.5</version>
        </dependency>
           

然后配置一下相关信息:

#info配置

info.app.name=spring-boot-actuator

info.app.version= 1.0.0

info.app.test=test

#打开所有的监控点

management.endpoints.web.exposure.include=*

management.endpoint.health.show-details=always

#启用接口关闭

Spring Boot management.endpoint.shutdown.enabled=true

#json格式输出

spring.jackson.serialization.indent_output=true

然后启动项目,输入:http://localhost:8080/actuator/health 就能看到相关信息

spring-boot-starter-actuator模块中分为原生端点和自定义端点,这里就介绍一些原生端点。原生端点分为三大类。

  1. 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
  2. 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
  3. 操作控制类:提供了对应用的关闭等操作类功能。

应用配置类

autoconfig

该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选选项。同时还列出了每个候选项是否满足自动化配置的各个先决条件。所以该端点可以帮助我们方便的找到一些自动化配置为什么没有生效的具体原因。

positiveMatches:返回的时条件匹配成功的自动化配置

negativeMatches:返回的是条件匹配不成功的自动化配置

beans

该端点用来或取应用上下文中创建的所有Bean。

bean:Bean的名称

scope:Bean的作用域

resource:class文件的具体路径

type:Bean的Java类型

dependencies:依赖的Bean名称

configprops

该端点用来获取应用中配置的属性信息报告。可以通过该报告来看到各个属性的配置路径,当需要关闭该端点时,就可以通过使用endpoints.configprops.enabled=false来完成设置。

prefix:属性的配置前缀

properties:代表了各个属性的名称和值

env

该端点区别于configprops,它是用来获取应用所有可用的环境属性报告。包括环境变量,JVM属性,应用的配置属性,命令行中的参数。甚至还包括应用没有使用的配置,因此可以配合使用@ConfigurationProperties注解将它们引入到我们的应用程序中来进行使用。

mappings

该端点用来返回所有Spring MVC的控制器映射关系报告。

info

该端点用来返回一些应用自定义的信息。默认情况下为空,但是前面配置过信息,所以会显示配置的信息。

度量指标类

metrics

该端点用来返回当前应用的各类重要度量指标,比如内存信息,线程信息,垃圾回收信息等。

系统信息:处理器数量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接口中getNonHeapMemoryUsage方法获取的java.lang. management.MemoryUsage。

threadis.*:线程使用情况,包括线程数、守护线程数(daemon)、线程峰值(peak)等,这些数据均来自java.lang.management.ThreadMXBean。

classes.*:应用加载和卸载的类统计。这些数据均来自 java.lang.management. ClassLoadingMXBean。

gc.*:垃圾收集器的详细信息,包括垃圾回收次数gc.ps_scavenge.count、垃圾回收消耗时间 gc.ps_scavenge.time、标记-清除算法的次数 gc.ps_ marksweep.count、标记-清除算法的消耗时间gc.ps_marksweep.time。 这些数据均来自 java.lang.management.GarbageCollectorMXBean。

httpsessions.*:Tomcat 容器的会话使用情况。包括最大会话数httpsessions.max和活跃会话数httpsessions.active。该度量指标信息仅在引入嵌入式Tomcat作为应用容器的时候才会提供。

gauge.*:HTTP请求的性能指标之一,它主要用来反映一个绝对数值。比如gauge.response.hello:5,它表示上一次hello请求的延迟时间为5毫秒。

counter.*:HTTP 请求的性能指标之一,它主要作为计数器来使用,记录了 增加量和减少量。比如counter.status.200.hello:11,它代表了hello请求返回200状态的次数为11。

metrics 端点可以提供应用运行状态的完整度量指标报告,这项功能非常实用,但是对于监控系统中的各项监控功能,它们的监控内容、数据收集频率都有所不同,如果每次都通过全量获取报告的方式来收集,略显粗暴。所以,我们还可以通过/metrics/{name}接口来更细粒度地获取度量信息,比如可以通过访问/metrics/mem.free来获取当前可用内存数量。

health

该端点用来获取应用的各类健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些常用资源的健康指标检测器。这些检测器都通过HealthIndicator接口实现,并且会根据依赖关系的引入实现自动化装配,比如下面列出的这些。

CassandraHealthIndicator 检查Cassandra数据库是否已启动。

CouchbaseHealthIndicator 检查Couchbase群集是否已启动。

DiskSpaceHealthIndicator 检查磁盘空间不足。

DataSourceHealthIndicator 检查是否可以建立连接DataSource。

ElasticsearchHealthIndicator 检查Elasticsearch集群是否已启动。

InfluxDbHealthIndicator 检查InfluxDB服务器是否已启动。

JmsHealthIndicator 检查JMS代理是否启动。

MailHealthIndicator 检查邮件服务器是否已启动。

MongoHealthIndicator 检查Mongo数据库是否已启动。

Neo4jHealthIndicator 检查Neo4j服务器是否已启动。

RabbitHealthIndicator 检查Rabbit服务器是否已启动。

RedisHealthIndicator 检查Redis服务器是否启动。

SolrHealthIndicator 检查Solr服务器是否已启动。

可以通过设置 management.health.defaults.enabled属性来全部禁用。

dump

该端点用来暴露程序运行中的线程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法来返回所有含有同步信息的活动线程详情。

trace

该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用 org.springframework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式,始终保留最近的100条请求记录。

操作控制类

之前的介绍的所有端点都是用来反映应用自身属性或是运行中的状态,相对于操作控制类端点没有那么敏感,所有他忙都是默认启用的而操作控制类端点 拥有更强大的控制能力,如果要使用它们的话,需要通过属性来配置开启操作.

shutdown

该端点用来关闭应用的,默认关闭的,开启方法:

endpoints.shutdownenabled=true