美文网首页LinuxJavaSpringBoot
SpringBoot2.X性能监控Actuator

SpringBoot2.X性能监控Actuator

作者: maxzhao_ | 来源:发表于2020-03-20 17:44 被阅读0次

    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 依赖

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

    主要配置

    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<String, Object> getInfo() {
            Map<String, Object> 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

        本文链接:https://www.haomeiwen.com/subject/blfsyhtx.html