Spring Cloud系列(二) 应用监控与管理Actuator

前言:要想使用Spring Cloud ,Spring Boot 提供的spring-boot-starter-actuator模块是必须了解的,这篇文章就先介绍一下actuator的使用。

由于我们把一个复杂高耦合的单体系统拆分成了多个小型服务,所以部署应用的数量在不断增长,造成维护复杂度大大提升。所以我们需要一套自动化的监控运维机制,这套运维机制可以不间断的获取每个服务应用的各种指标,并根据这些指标信息来制定监控预警规则。

Spring Boot提供了一个依赖模块:spring-boot-starter-actuator,这个模块可以自动为Spring Boot创建的应用构建一系列的用于监控的端点,而且Spring Cloud还在这个基础上进行了扩展,当然在不满足我们业务需求时也需要对这个模块进行扩展。

接下来创建一个Spring Boot项目命名actuator,勾选Actuator依赖

或者在你现有的Spring Boot项目里添加依赖

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

项目创建完毕后的pom文件:

         <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.0.2.RELEASE</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>

     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
     </properties>

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

         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-tomcat</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>

     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>

说一下我的版本:jdk1.8、Spring Boot 2.0.2。

接下来就可以启动应用了,发现控制台打印如下信息:

/actuator/health和/actuator/info以及/actuator这三个就是actuator提供的端点,注意以前的版本是没有/actuator前缀的,2.0以后的版本都加了/actuator前缀,而且看官方文档actuator提供了如下端点:

我们只有health和info端点是因为actuator默认只暴露了health和info端点,我们可以选择全部暴露或者指定暴露部分端点,修改application.yml

 management:
   endpoints:
     web:
       exposure:
         include: "*" #暴露所有端点 默认是info,health

重新启动应用,控制台打印发生了变化,其余的端点也被暴露出来了:

下面是对部分常用端点的简要说明

详细说明请查看actuator-api文档actuator-api,注意这是Spring Boot2.0.2的文档,其余版本请去官网自行查找。

开启和关闭端点

使用management.endpoint.<id>.enabled来修改端点的开启关闭状态,如以关闭health端点为例

management.endpoint.health.enabled=false

如果希望端点启用选择加入而不是选择退出,请将management.endpoints.enabled-by-default属性设置为false并设置想选择加入端点的enabled=true重新加入。以下示例启用info端点并禁用所有其他端点:

 management.endpoints.enabled-by-default = false
 management.endpoint.info.enabled = true

修改路径

1、修改前缀:现在所有端点的前缀默认是/actuator,如果想修改的话用management.endpoints.web.base-path属性。
2、修改路径:如果想修改端点的路径,可以用management.endpoints.web.path-mapping属性。
比如我们想把/autuator/health修改为/healthcheck。

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck

重启项目后所有端点都去掉了/actuator前缀,并且health端点的路径变成了healthcheck

当然,如果你想修改端点的端口,也是可以的,可以通过以下属性修改

management.server.port = 8081

如果您不想通过HTTP公开端点,则可以将管理端口设置为-1

management.server.port = -1

关于shutdown端点

shutdown端点可以用来远程关闭应用,此端点默认是关闭的,如果使用的话,需要开启,使用以下属性

management.endpoint.shutdown.enabled = true

你就可以在应用启动后远程通过调用/actuator/shutdown来关闭应用,注意只能POST请求调用。

关于health端点

我们尝试访问/actuator/health端点,返回

{"status":"UP"}

只有status一个属性,查看官方文档health端点的management.endpoint.health.show-details属性默认不展示细节,我们可以修改一下

management:
  endpoints:
    web:
      exposure:
        include: "*" #暴露所有端点 默认是info和health
  endpoint:
    health:
      show-details: always #默认是never

重新启动再次请求,会发现多了一个磁盘空间的状态信息,返回

{"status":"UP","details":{"diskSpace":{"status":"UP","details":{"total":169917878272,"free":138603999232,"threshold":10485760}}}}

health端点默认自带了一些常用资源的健康指标检测器,只要你引入了以下依赖就会自动添加到health里

我们也可以自己扩展一个健康指标检测器

 /**
  * 1.实现HealthIndicator接口
  * 2.类名要求 xxxHealthIndicator xxx将会是你自定义得健康指标名称
  * 3.@Component注入到容器内
  * 4.重写health()方法
  * @author Administrator
  *
  */
 @Component
 public class MyAppHealthIndicator implements HealthIndicator{

     @Override
     public Health health() {
         if(check()!=0){
             return Health.up().build();
         }
         return Health.down().withDetail("error", "出错了").build();
     }

     private int check(){
         // 检测是否健康的自定义逻辑
         return 0;
     }
 }

然后重启应用发现多了自定义的健康指标

关于info端点

info端点默认是空的,我们可以在application配置文件中配置info前缀的属性来完善

 info:
     app:
       version: 1.1
       name: aut   #/actuator/info 自定义的info端点 否则是空的

访问/actuator/info

我们也可以用info端点描述Git版本信息,在application.yml或者application.properties同级目录创建git.properties,添加属性git.branch=master,再次重启访问/actuator/info。

git.属性名是来自于GitProperties类,eclipse中使用ctrl+shift+t输入GitProperties就可以查看了,前提是你下载了源码,当然你也可以引入git的插件,具体我就不介绍了,想了解的可以看下这篇文章http://blog.didispace.com/spring-boot-actuator-info-git/,总的来说info端点用途并不大。

---------------------
原文:https://blog.csdn.net/WYA1993/article/details/80540981
版权声明:本文为博主原创文章,转载请附上博文链接!

Spring Cloud系列(三) 应用监控与管理Actuator的更多相关文章

  1. spring cloud 系列第5篇 —— hystrix+turbine 服务的熔断与监控 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.hystrix 简介 1.1 熔断器 在分布式系统中,由于服务之间相互 ...

  2. Spring Cloud系列(二) 介绍

    Spring Cloud系列(一) 介绍 Spring Cloud是基于Spring Boot实现的微服务架构开发工具.它为微服务架构中涉及的配置管理.服务治理.断路器.智能路由.微代理.控制总线.全 ...

  3. Spring Cloud 系列之 Spring Cloud Stream

    Spring Cloud Stream 是消息中间件组件,它集成了 kafka 和 rabbitmq .本篇文章以 Rabbit MQ 为消息中间件系统为基础,介绍 Spring Cloud Stre ...

  4. Spring Cloud(三):服务提供与调用 Eureka【Finchley 版】

    Spring Cloud(三):服务提供与调用 Eureka[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  上一篇文章我们介绍了 Eureka 服务 ...

  5. Spring Cloud系列文,Feign整合Ribbon和Hysrix

    在本博客之前的Spring Cloud系列里,我们讲述了Feign的基本用法,这里我们将讲述下Feign整合Ribbon实现负载均衡以及整合Hystrix实现断路保护效果的方式. 1 准备Eureka ...

  6. Spring cloud系列十四 分布式链路监控Spring Cloud Sleuth

    1. 概述 Spring Cloud Sleuth实现对Spring cloud 分布式链路监控 本文介绍了和Sleuth相关的内容,主要内容如下: Spring Cloud Sleuth中的重要术语 ...

  7. Spring Cloud 系列之 Eureka 实现服务注册与发现

    如果你对 Spring Cloud 体系还不是很了解,可以先读一下 Spring Cloud 都有哪些模块 Eureka 是 Netflix 开源的服务注册发现组件,服务发现可以说是微服务架构的核心功 ...

  8. Spring Cloud系列之Feign的常见问题总结

    一.FeignClient接口,不能使用@GettingMapping 之类的组合注解 代码示例: @FeignClient("microservice-provider-user" ...

  9. 【Spring Boot &amp;&amp; Spring Cloud系列】Spring Boot的启动器Starter

    Spring Boot的内置Servlet Container: Name Servlet Version Java Version Tomcat8 3.1 Java 7+ Tomcat7 3.0 J ...

随机推荐

  1. swiper 增加同页面增加2个滚动

    js代码 <script type="text/javascript"> var mySwiper = new Swiper('.slide_a',{ noSwipin ...

  2. bzoj2424 [HAOI2010]订货

    模拟一下仓库里面存储物品的价格情况即可,如果当前物品大于仓库里面物品那么就替换一下仓库里的物品,然后订货直接从仓库里先取,仓库里不够则直接购买,每次做完后记得买当前物品填补一下仓库直至仓库填满,当然这 ...

  3. commonJS — 数字操作(for Number)

    for Number github: https://github.com/laixiangran/commonJS/blob/master/src/forNumber.js 代码 /** * Cre ...

  4. ffmpeg之移植到ARM

    移植方法分为两种:第一种手工移植,第二种buildroot移植. 第一种手工移植: 优点:灵活性高 缺点:重复工作多 一.配置 ./configure --enable-memalign-hack - ...

  5. Unty3D动态加载图片

    试验动态加载图片,代码如下: using UnityEngine; using System.Collections; public class DynamicLoad : MonoBehaviour ...

  6. centos7配置阿里云yum源

    1)下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2)备份并替换系统的repo文件 cp Centos-7.repo /etc/ ...

  7. SpringBoot系列: 单元测试

    SpringBoot 项目单元测试也很方便, Web项目中单元测试应该覆盖:1. Service 层2. Controller 层 本文前半部分讲解是一些测试基础配置. 对于Service和Contr ...

  8. NOI 2011 阿狸的打字机(AC自动机+主席树)

    题意 https://loj.ac/problem/2444 思路 ​多串匹配,考虑 \(\text{AC}\) 自动机.模拟打字的过程,先建出一棵 \(\text{Trie}\) 树,把它变成自动机 ...

  9. [UE4]使用name slot制作带背景的容器

    name slot相当于asp.net模板中的content模板. 可以往“Name Slot”里面拖放控件,如果没有“Name Slot”就不能给“BgPanel”拖放任何控件

  10. 浅拷贝和深拷贝(java)

    拷贝:多用于prototype原型模式的复制. 数据库连接池,将properties中的jdbc信息(user/password/url/port)等获取后赋值给jdbcData对象,然后将对象复制n ...