SpringBoot2.X性能监控Actuator

title: SpringBoot2.X性能监控Actuator
date: 2020-03-20
author: maxzhao
tags:
  - SpringBoot
  - Actuator
categories:
  - SpringBoot

一、前言

SpringBoot Actuator 服务监控与管理**

其中包含了很多的服务,比如我们常用的amqpJVMcache等等,下面是actuator包下的目录

amqp,audit,beans,cache,cassandra,context,couchbase,elasticsearch,endpoint,env,flyway,health,influx,info,integration,jdbc,jms,ldap,liquibase,logging,mail,management,metrics,mongo,neo4j,redis,scheduling,security,session,solr,system,http,web

是不是感觉挺全面的。

二、服务监控与管理

Maven 依赖


    org.springframework.boot
    spring-boot-starter-actuator

主要配置

Spring Boot2.x中,默认只开放了info、health两个端点,开放其他端点需要配置

# 开启所有端点
management:
  endpoints:  # 这里是 endpoints
    web:
      # 默认路径
      base-path: /actuator
      exposure:
        #  Endpoint IDs that should be included or '*' for all.
        include: '*'
    # 显示详细的 health 信息
    jmx:
      # Whether unique runtime object names should be ensured.
      domain: org.springframework.boot
      exposure:
        # Endpoint IDs that should be included or '*' for all.
        include: '*'
  # 显示详细的 health 信息
  endpoint: # 这里是 endpoint
    health:
      show-details: always
    # 打开 shutdown 端点,通过 POST 访问该端点可以关闭应用
    shutdown:
      enabled: true

监控状态

启动之后访问 http://localhost:8062/boot/actuator/health 就可以看到对应的项目监控状态。

访问 http://localhost:8062/boot/actuator 可以查看有那些监控。

健康指标 HealthIndicators 由 Spring Boot 自动配置,因此这里显示监控信息是由项目所使用的技术栈而决定的:

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

常用端点

查看常用接口

http://localhost:8062/boot/actuator/

env 端点,应用获取环境信息,包括:环境变量、JVM属性、应用的配置配置、命令行中的参数等等。
localhost:8080/actuator/env

mapping 端点,url 与 控制器映射关系信息
localhost:8080/actuator/info

metrics 端点,引用度量指标端点,提供引用再运行时的信息,如内存使用情况、HTTP请求统计、外部资源指标等
查看所有度量指标 localhost:8080/actuator/metrics
查看度量指标详细信息 localhost:8080/actuator/metrics/jvm.gc.pause

loggers 端点,查看可配置 loggers 的列表及相关的等级信息
localhost:8080/actuator/loggers
查看特定的 logger 详细信息localhost:8080/actuator/loggers/{name}

健康检查

health 端点用于暴露程序运行的健康状态,暴露的信息的详细程度由 management.endpoint.health.show-details 来控制,它具有以下三个可选值:

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

org.springframework.boot.actuate.health.ShowDetails中有详细说明。

端点列表

  • info
    显示应用的基本信息
  • health
    显示应用的健康状态
  • metrics
    显示应用多样的度量信息
  • loggers
    显示和修改配置的loggers
  • logfile
    返回log file中的内容(如果logging.file或者logging.path被设置)
  • httptrace
    显示HTTP足迹,最近100个HTTP request/repsponse
  • env
    显示当前的环境特性
  • flyway
    显示数据库迁移路径的详细信息
  • liquidbase
    显示Liquibase 数据库迁移的纤细信息
  • shutdown
    让你逐步关闭应用
  • mappings
    显示所有的@RequestMapping路径
  • scheduledtasks
    显示应用中的调度任务
  • threaddump
    执行一个线程dump
  • heapdump
    返回一个GZip压缩的JVM堆dump

三、自定义健康检查

在启动类中加入

@Bean
HealthIndicator customHealthIndicator() {
    return () -> Health.status("DOWN")
                .withDetail("error code", "某健康专项检查失败").build();
}
@Bean
HealthIndicator customUpHealthIndicator() {
    return () -> Health.up().withDetail("success code", "自定义检查一切正常 UP").build();
}
@Bean
HealthIndicator customDownHealthIndicator() {
    return () -> Health.up().withDetail("success code", "自定义检查一切正常 DOWN ").build();
}

访问 http://localhost:8062/boot/actuator/health 的结果为:

这里我开启了redis,数据库为mysql

{
    "status": "DOWN",
    "details": {
        "custom": {
            "status": "FATAL",
            "details": {
                "error code": "某健康专项检查失败"
            }
        },
        "customUp": {
            "status": "UP",
            "details": {
                "success code": "自定义检查一切正常 UP"
            }
        },
        "customDown": {
            "status": "DOWN",
            "details": {
                "success code": "自定义检查一切正常 DOWN "
            }
        },
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": "471182741504",
                "free": "375580655616",
                "threshold": "10485760"
            }
        },
        "db": {
            "status": "UP",
            "details": {
                "database": "MySQL",
                "hello": "1"
            }
        },
        "redis": {
            "status": "UP",
            "details": {
                "version": "5.0.8"
            }
        }
    }
}

当前details中有一个检查statusDOWN时,Health检查的status就为DOWN,否则为UP

如果把第一个FATAL改为DOWNHealth检查结果同样为DOWN

下表显示了内置状态的默认映射:

Status Mapping
DOWN SERVICE_UNAVAILABLE (503)
OUT_OF_SERVICE SERVICE_UNAVAILABLE (503)
UP No mapping by default, so http status is 200
UNKNOWN No mapping by default, so http status is 200

四、自定义端点

Spring Boot 支持使用 @Endpoint 来自定义端点暴露信息。

@Endpoint(id = "customEndPoint")
@Component
public class CustomEndPoint {

    @ReadOperation
    public Map getInfo() {
        Map dataMap = new LinkedHashMap<>();
        dataMap.put("自定义信息", "custom endpoint ");
        return dataMap;
    }
}

请求 http://localhost:8062/boot/actuator/customEndPoint 的结果为

{
    "自定义信息": "custom endpoint "
}

可用的方法注解由 HTTP 操作所决定:

operation HTTP 方法
@ReadOperation GET
@WriteOperation POST
@DeleteOperation DELETE

你可能感兴趣的:(SpringBoot2.X性能监控Actuator)