Springboot2使用Actuator监控

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等

配置Actuator

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

启动应用程序后访问 http://localhost:8080/actuator/ 可以看到所有的访问链接。

以下是所有的访问链接

如果要设置启用所有的,或者可以启用部分[“health”,”info”]

management:
  endpoints:
    web:
      exposure:
        include: "*"
HTTP方法 路径 描述 是否敏感信息
GET /actuator/auditevents 显示当前审计信息 true
GET /actuator/configprops 查看配置属性,包括默认配置, 显示一个所有@ConfigurationProperties的整理列表 true
GET /actuator/beans bean及其关系列表, 显示一个应用中所有Spring Beans的完整列表 true
GET /actuator/heapdump 堆信息 true
GET /actuator/env 查看所有环境变量 true
GET /actuator/env/{name} 查看具体变量值 true
GET /actuator/health 查看应用健康指标, 当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情 false
GET /actuator/info 查看应用信息 false
GET /actuator/mappings 查看所有url映射, 即所有@RequestMapping路径的整理列表 true
GET /actuator/metrics 查看应用基本指标 true
GET actuator/metrics/{name} 查看具体指标 true
POST /actuator/shutdown 关闭应用,允许应用以优雅的方式关闭(默认情况下不启用) true
GET /actuator/httptrace 查看基本追踪信息,默认为最新的一些HTTP请求 true
GET /actuator/scheduledtasks 定时任务信息 true
GET /actuator/threaddump 执行一个线程dump

默认启用的连接,Spring Boot 2.X 中,Actuator 默认只开放 health 和 info 两个端点。

/actuator
/actuator/health
/actuator/health/{component}
/actuator/health/{component}/{instance}
/actuator/info

health健康监控

/actuator/health

{"status":"UP"}

只返回了status,是因为未启用其他数据支持。

1.通过配置management.endpoint.health.show-details属性

名称 描述
never 详细信息从不显示。
when-authorized 详细信息仅显示给授权用户,可以使用management.endpoint.health.roles配置授权角色。
always 详细信息显示给所有用户。

默认为never,因此可以配置为always

management:
  endpoint:
    health:
      show-details: always

然后再访问,就发现包含很多健康监测的信息了,需要注意的是,其中某个监测失败,就会导致整个状态失败

有以下监测指标

名称 描述
CassandraHealthIndicator 检查Cassandra数据库是否已启动。
CouchbaseHealthIndicator 检查Couchbase群集是否启动。
DiskSpaceHealthIndicator 检查磁盘空间是否不足。
DataSourceHealthIndicator 检查是否可以获取到DataSource的连接。
ElasticsearchHealthIndicator 检查Elasticsearch群集是否启动。
InfluxDbHealthIndicator 检查InfluxDB服务器是否启动。
JmsHealthIndicator 检查JMS代理是否启动。
MailHealthIndicator 检查邮件服务器是否启动。
MongoHealthIndicator 检查Mongo数据库是否已启动。
Neo4jHealthIndicator 检查Neo4j服务器是否启动。
RabbitHealthIndicator 检查Rabbit服务器是否启动。
RedisHealthIndicator 检查Redis服务器是否启动。
SolrHealthIndicator 检查Solr服务器是否启动。

2.启用禁用指标

management:
  endpoint:
    health:
      show-details: always
  health:
    defaults:
      enabled: false
    db:
      enabled: true

3.自定义healrh指标

自定义是通过实现HealthIndicator接口实现health方法,返回响应。

或者继承AbstractHealthIndicator的,实现doHealthCheck方法

实现类为XXXHealthIndicator,这样指标就是XXX

Info信息

/actuator/info

测试比如

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
 
@Component
public class MyHealthIndicator implements HealthIndicator {
 
    private static int num = 0;
 
    @Override
    public Health health() {
        // 进行一些特定的健康检查
        int errorCode = check();
        if (errorCode != 0) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }
 
    // 这里模拟检查,设置为一次正常一次异常
    private int check() {
        num++;
        return num % 2;
    }
}

返回

{
    "status": "DOWN",
    "components": {
        "my": {
            "status": "DOWN",
            "details": {
                "Error Code": 1
            }
        }
    }
}


{
    "status": "UP",
    "components": {
        "my": {
            "status": "UP"
        }
    }
}

关于启用禁用参考上面。

1.配置文件方式

info:
  appName: boot-admin
  version: 2.0.1
  mavenProjectName: @project.artifactId@  #使用@@可以获取maven的pom文件值
  mavenProjectVersion: @project.version@

2.编写InfoContributor

import java.util.Collections;

import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;

@Component
public class ExampleInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("example",
                Collections.singletonMap("key", "value"));
    }
}

以下俩种都可以输出info信息

启用 shutdown

shutdown 默认关闭 ,添加一下配置 开启shutdown,且只支持post请求

management:
  endpoint:
    shutdown:       
      enabled: true

ENV环境变量

/actuator/env

关注

metrics指标监控

/actuator/metrics

{
	"names": ["jvm.memory.max", "jvm.threads.states", "jvm.gc.memory.promoted", "jvm.memory.used", "jvm.gc.max.data.size", "jvm.gc.pause", "jvm.memory.committed", "system.cpu.count", "logback.events", "http.server.requests", "jvm.buffer.memory.used", "tomcat.sessions.created", "jvm.threads.daemon", "system.cpu.usage", "jvm.gc.memory.allocated", "tomcat.sessions.expired", "jvm.threads.live", "jvm.threads.peak", "process.uptime", "tomcat.sessions.rejected", "process.cpu.usage", "jvm.classes.loaded", "jvm.classes.unloaded", "tomcat.sessions.active.current", "tomcat.sessions.alive.max", "jvm.gc.live.data.size", "jvm.buffer.count", "jvm.buffer.total.capacity", "tomcat.sessions.active.max", "process.start.time"]
}

以下指标

  • JVM最大内存(jvm.memory.max),单位:KB
  • JVM已使用内存(jvm.memory.used),单位:KB
  • CPU使用率(system.cpu.usage)
  • 系统正常运行时间(process.uptime),单位:秒

原文:Springboot2使用Actuator监控 - 张清磊的博客 | Epoch Blog