`

actuator服务监控与管理

 
阅读更多

引自:https://www.cnblogs.com/baidawei/p/9183531.html

 

actuator是spring boot项目中非常强大的一个功能,有助于对应用程序进行监控和管理,通过restful api请求来监管、审计、收集应用的运行情况,针对微服务而言它是必不可少的一个环节。

 

Endpoints

  actuator的核心部分,它用来监视应用程序及交互,spring-boot-actuator中已经内置了非常多的Endpoints(health、info、beans、httptrace、shutdown)等等,同时也允许我们自己扩展自己的端点

  spring boot 2.0中的端点和之前版本有较大不同,使用时需要注意。另外端点的监控机制也有很大不同,启用了不代表可以直接访问,还需要将其暴露出来,传统的management.security管理已被标记为不推荐。

 

内置Endpoints

id desc Sensitive
auditevents 显示当前应用程序的审计事件信息 Yes
beans 显示应用Spring Beans的完整列表 Yes
caches 显示可用缓存信息 Yes
conditions 显示自动装配类的状态及及应用信息 Yes
configprops 显示所有 @ConfigurationProperties 列表 Yes
env 显示 ConfigurableEnvironment 中的属性 Yes
flyway 显示 Flyway 数据库迁移信息 Yes
health 显示应用的健康信息(未认证只显示status,认证显示全部信息详情) No
info 显示任意的应用信息(在资源文件写info.xxx即可) No
liquibase 展示Liquibase 数据库迁移 Yes
metrics 展示当前应用的 metrics 信息 Yes
mappings 显示所有 @RequestMapping 路径集列表 Yes
scheduledtasks 显示应用程序中的计划任务 Yes
sessions 允许从Spring会话支持的会话存储中检索和删除用户会话。 Yes
shutdown 允许应用以优雅的方式关闭(默认情况下不启用) Yes
threaddump 执行一个线程dump Yes
httptrace 显示HTTP跟踪信息(默认显示最后100个HTTP请求 - 响应交换) Yes

 

导入依赖

  在pom.xml中添加spring-boot-starter-actuator的依赖

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

如果需要访问info接口来获取maven中的属性内容请记得添加如下内容

复制代码
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
复制代码

 

属性配置

在application.yml文件中配置actuator的相关配置,其中info开头的属性,就是访问info端点中显示的相关内容,值得注意的十spring boot2.x中,默认只开放了info、health两个端点,其余的需要自己通过配置management.endpoints.web.exposure.include属性来加载(有include自然就有exclude)。如果想单独操作某个端点可以使用management.endpoint.端点.enabled属性进行启用或者禁用。

复制代码
info:
  head: head
  body: body
management:
  endpoints:
    web:
      exposure:
        #加载所有的端点,默认只加载了info、health
        include: '*'
  endpoint:
    health:
      show-details: always
    #可以关闭指定的端点
    shutdown:
      enabled: false
复制代码

 

测试

启动项目,浏览器输入:http://localhost:8088/actuator/info

{"head":"head","body":"body"}

 

自定义

  上面很多都是配置相关的,以及自带的一些端点,在实际应用中又时候默认并不能满足我们的需求。

默认装配HealthIndicators

  下列是依赖spring-boot-xxx-starter后相关HealthIndicator的实现(通过management.health.defaults.enabled属性可以禁用他们),但想要获取一些额外的信息时,自定义的作用就体现出来了。

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

 

健康端点(第一种方式)

  实现HealthIndicator接口,根据自己的需要判断返回的状态是UP还是DOWN,功能简单。

复制代码
package com.spring.boot.health;

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

@Component("my1")
public class MyHealthIndicator implements HealthIndicator {
    private  static final String VERSION = "v1.0.0";
    @Override
    public Health health() {
        int code = 0;
        if(code != 0){
            Health.down().withDetail("code",code).withDetail("version",VERSION).build();
        }
        return Health.up().withDetail("code",code).withDetail("version",VERSION).up().build();
    }
}
复制代码

输入测试地址:http://localhost:8088/actuator/health

复制代码
{
    "status": "DOWN",
    "details": {
        "my1": {
            "status": "UP",
            "details": {
                "code": 0,
                "version": "v1.0.0"
            }
        },
        "rabbit": {
            "status": "DOWN",
            "details": {
                "error": "org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)"
            }
        },
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 250790436864,
                "free": 67546259456,
                "threshold": 10485760
            }
        },
        "db": {
            "status": "UP",
            "details": {
                "database": "MySQL",
                "hello": 1
            }
        },
        "redis": {
            "status": "DOWN",
            "details": {
                "error": "org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 10.211.55.5:6379"
            }
        }
    }
}
复制代码

可以看到当前项目的健康程度,由于没有开启linux虚拟机中的redis及rabbitMQ 所以发生异常了,平时启动项目时不去执行是不会报错的

 

健康端点(第二种方式)

  继承AbstractHealthIndicator抽象类,重写doHealthCheck方法,功能比第一种要强大一点点,默认的DataSourceHealthIndicator、RedisHealthIndicator都是这种写法,内容回调中还做了异常的处理。

复制代码
package com.spring.boot.health;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

/**
 * 功能更强大,AbstractHealthIndicator实现了HealthIndicator接口
 */
@Component("my2")
public class MyAbstractHealthIndicator extends AbstractHealthIndicator {
    private static final String VERSION = "v1.0.1";
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        int code = 0;
        if(code != 0){
            builder.down().withDetail("code",code).withDetail("version",VERSION).build();
        }
        builder.withDetail("code",code).withDetail("version",VERSION).up().build();
    }
}
复制代码

测试 localhost:8088/actuator/health

复制代码
{
    "status": "DOWN",
    "details": {
        "my2": {
            "status": "UP",
            "details": {
                "code": 0,
                "version": "v1.0.1"
            }
        },
        "my1": {
            "status": "UP",
            "details": {
                "code": 0,
                "version": "v1.0.0"
            }
        },
        "rabbit": {
            "status": "DOWN",
            "details": {
                "error": "org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)"
            }
        },
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 250790436864,
                "free": 67543334912,
                "threshold": 10485760
            }
        },
        "db": {
            "status": "UP",
            "details": {
                "database": "MySQL",
                "hello": 1
            }
        },
        "redis": {
            "status": "DOWN",
            "details": {
                "error": "org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 10.211.55.5:6379"
            }
        }
    }
}
复制代码

 

定义自己的端点

  info、health都是spring-boot-actuator内置的,真正要实现自己的端点还得通过@Endpoint、@ReadOperator、@WriteOperation、@DeleteOperation。

不同请求的操作,调用时缺少必须参数,或者使用无法转换为所需类型的参数,则不会调用操作方法,响应状态为400(错误请求)

  @Endpoint 构建rest api的唯一路径

  @ReadOperation GET请求,响应状态为200 如果没有返回值响应404(资源未找到)

  @WriteOperation POST请求,响应状态为200如果没有返回值响应204(无响应内容)

  @DeleteOperation DELETE请求,响应状态为200如果没有返回值响应204(无响应内容)

复制代码
package com.spring.boot.endpoint;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;

import java.util.HashMap;
import java.util.Map;

@Endpoint(id = "david")
public class MyEndPoint {

    @ReadOperation
    public Map<String,String> test(){
        Map<String,String> result = new HashMap<>();
        result.put("name","david");
        result.put("age","18");
        return result;
    }

}
复制代码

然后在启动类中注入bean

复制代码
package com.spring.boot;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.spring.boot.endpoint.MyEndPoint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;

@EnableCaching
@SpringBootApplication
public class BootApplication{

    public static void main(String[] args) {
        SpringApplication.run(BootApplication.class,args);
    }

    @Configuration
    static class MyEndpointConfiguration{
        @Bean
        @ConditionalOnMissingBean
        @ConditionalOnEnabledEndpoint
        public MyEndPoint myEndPoint(){
            return new MyEndPoint();
        }
    }
}
复制代码

测试

启动项目 输入测试地址:http://localhost:8088/actuator/david

{"name":"david","age":"18"}

 

分享到:
评论

相关推荐

    springboot项目整合.zip

    第十四篇:强大的 actuator 服务监控与管理] 第十五篇:actuator与spring-boot-admin 第十六篇:定时任务详解] 第十七篇:轻松搞定文件上传] 第十八篇:轻松搞定全局异常] 第十九篇:轻松搞定数据验证

    SpringBoot2.0-Actuator监控参数说明

    SpringBoot2.0-Actuator是Spring Boot框架中的一个强大组件,主要负责提供应用程序的监控和管理能力。在Spring Boot应用中,Actuator通过暴露一系列的端点(endpoints),使得开发者可以方便地查看和操作应用程序的...

    11springboot+actuator监控1

    在描述中提到了一个博客文章——"springboot(十九):使用Spring Boot Actuator监控应用",这可能是一个详细的实践指南,指导读者如何在Spring Boot项目中启用和使用Actuator。 Actuator提供的主要功能包括: 1. **...

    SpringBoot2.0-Actuator监控参数说明 - 最全文档.docx

    -- 监控和管理应用程序 --&gt; &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-actuator ``` ##### 2.2 端点信息 端点(Endpoint)是Spring Boot Actuator的核心概念之一,它提供了对...

    使用SpringBoot Actuator监控应用示例

    SpringBoot Actuator是Spring Boot框架中的一个核心组件,专门用于应用程序的监控和管理。它提供了一组丰富的端点(endpoints),允许开发者深入了解应用程序的运行状态、性能指标、配置信息等,从而帮助优化和维护...

    使用 Spring Boot Actuator 监控应用.docx

    Spring Boot Actuator 作为一款强大的监控工具,提供了丰富的功能来帮助开发者和运维人员更好地管理和监控他们的微服务应用。 #### Actuator 的作用与原理 Spring Boot Actuator 是 Spring Boot 提供的一个用于...

    Java Springboot学习资料.rar

    SpringBoot配置详解 ...actuator 服务监控与管理 actuator与spring-boot-admin 定时任务详解 文件上传 重复提交(分布式锁) 重复提交(本地锁) WebSocket 安全框架(Shiro) 分布式限流 集成hadoop、hive、oozie

    SpringBoot 监控管理模块actuator没有权限的问题解决方法

    SpringBoot 监控管理模块actuator 没有权限的问题解决方法 SpringBoot 监控管理模块actuator 是一个功能强大且灵活的监控管理模块,它提供了一系列的监控和管理功能,例如自动配置报告、 Beans 列表、配置属性、...

    Spring Cloud 学习案例,服务发现、服务治理、链路追踪、服务监控等

    例如,可能有 Eureka 的服务注册与发现示例、Ribbon 客户端负载均衡示例、Zuul API Gateway 路由与过滤器示例、Hystrix 断路器示例、Sleuth 链路追踪示例以及与 Prometheus 和 Grafana 集成的监控示例。 学习这些...

    第 5-2 课:使⽤ Spring Boot Actuator 监控应⽤1

    Spring Boot Actuator 是一个强大的工具,它为Spring Boot应用程序提供了丰富的监控和管理功能。这个组件允许开发者深入了解应用程序的运行状态,包括内部配置、性能指标、健康检查等关键信息。通过集成Actuator,...

    配套linux监控+springboot服务监控json文件

    对于Springboot应用,可以使用Actuator模块暴露监控端点,让Prometheus能够抓取服务的运行状态信息。 Grafana则是一个流行的可视化平台,它允许用户从各种数据源(包括Prometheus)中拉取数据并创建自定义的仪表盘...

    springboot+thymeleaf+actuator的demo

    在本文中,我们将深入探讨如何将Spring Boot与Thymeleaf和Actuator集成,以便创建一个功能丰富的Web应用程序并实现有效的监控。首先,让我们逐一理解这三个核心组件。 **Spring Boot** Spring Boot是Spring框架的一...

    spring boot starter actuator(健康监控)配置和使用教程

    Spring Boot Starter Actuator 是 Spring Boot 框架中的一個组件,用于监控和管理应用程序。它提供了多种监控和管理端点,包括自动配置、审计事件、Bean 信息、配置属性、线程状态信息、环境信息、应用健康状况、...

    dubbo服务监控工具dubbo-admin

    4. 监控与管理:在界面上,可以查看服务详情、监控各项指标、进行调用测试和运维操作。 三、优化与扩展 1. 自定义监控:可以通过插件机制扩展监控项,比如添加自定义的日志监控或异常监控。 2. 整合其他工具:...

    springboot-learning-experience:spring boot 实践学习案例

    一起来学SpringBoot | 第十四篇:强大的 actuator 服务监控与管理 一起来学SpringBoot | 第十五篇:actuator与spring-boot-admin 可以说的秘密 一起来学SpringBoot | 第十六篇:定时任务详解 一起来学SpringBoot | ...

    Springboot Actuator整合Spring boot admin源码整理

    Spring Boot Actuator 和 Spring Boot Admin 是两个非常重要的组件,它们为Spring Boot应用提供了监控和管理的能力。本篇文章将深入探讨这两个组件的整合过程,并通过源码分析来理解其内部工作原理。 Spring Boot ...

    详解关于springboot-actuator监控的401无权限访问

    Spring Boot Actuator监控的401无权限访问详解 在本篇文章中,我们将详解关于Spring Boot Actuator监控的401无权限访问问题,该问题是Spring Boot开发中常见的错误之一。我们将通过实践演示如何解决该问题,并提供...

    基于java的数据监控与管理平台技术实现.zip

    在IT行业中,数据监控与管理平台是至关重要的组成部分,它帮助企业实时掌握系统运行状况,确保服务稳定,并优化业务性能。本篇文章将详细探讨基于Java的数据监控与管理平台的技术实现,帮助开发者了解如何构建这样一...

    StringBoot+Mybatis+Actuator项目示例源码

    这是一个基于Spring Boot、Mybatis和Actuator的项目示例,非常适合初学者和开发者用来深入了解这三大框架的集成与应用。让我们逐一分析这些组件的核心概念和关键功能。 **Spring Boot** Spring Boot是由Pivotal团队...

    Spring Boot Actuator监控端点小结

    Spring Boot Actuator监控端点小结...Spring Boot Actuator监控端点小结提供了一些非常有用的功能,可以帮助我们更好地监控和管理应用程序。同时,我们也可以根据需要对其进行扩展和配置,以满足我们个性化的监控需求。

Global site tag (gtag.js) - Google Analytics