Spring Cloud应用监控与管理Actuator

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

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

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

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

 
  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-actuator</artifactId>

  4. </dependency>

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

 
  1. <parent>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-parent</artifactId>

  4. <version>2.0.2.RELEASE</version>

  5. <relativePath/> <!-- lookup parent from repository -->

  6. </parent>

  7.  
  8. <properties>

  9. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  10. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

  11. <java.version>1.8</java.version>

  12. </properties>

  13.  
  14. <dependencies>

  15. <dependency>

  16. <groupId>org.springframework.boot</groupId>

  17. <artifactId>spring-boot-starter-actuator</artifactId>

  18. </dependency>

  19. <dependency>

  20. <groupId>org.springframework.boot</groupId>

  21. <artifactId>spring-boot-starter-web</artifactId>

  22. </dependency>

  23.  
  24. <dependency>

  25. <groupId>org.springframework.boot</groupId>

  26. <artifactId>spring-boot-starter-tomcat</artifactId>

  27. <scope>provided</scope>

  28. </dependency>

  29. <dependency>

  30. <groupId>org.springframework.boot</groupId>

  31. <artifactId>spring-boot-starter-test</artifactId>

  32. <scope>test</scope>

  33. </dependency>

  34. </dependencies>

  35.  
  36. <build>

  37. <plugins>

  38. <plugin>

  39. <groupId>org.springframework.boot</groupId>

  40. <artifactId>spring-boot-maven-plugin</artifactId>

  41. </plugin>

  42. </plugins>

  43. </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

 
  1. management:

  2. endpoints:

  3. web:

  4. exposure:

  5. include: "*" #暴露所有端点 默认是info,health

 重新启动应用,控制台打印

发现有其余的端点了,下面是对部分端点的简要说明

 

 

auditevents公开当前应用程序的审计事件信息。
beans显示应用程序中所有Spring bean的完整列表。
configprops显示应用中配置的属性信息报告。
env显示应用中所有可用的环境属性报告,包括环境变量、JVM属性、应用的配置属性、命令行的参数。
health显示应用健康信息。
httptrace显示HTTP跟踪信息(默认情况下为最后100个HTTP请求 - 响应交换)。
info显示应用的自定义信息,默认是空。
metrics显示当前应用程序的“指标”信息,如内存信息、线程信息。
mappings显示所有url映射。
scheduledtasks显示应用程序中的计划任务。
shutdown让应用程序正常关机。
threaddump程序运行中的线程信息。

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

开启和关闭端点

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

management.endpoint.health.enabled=false

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

 

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

修改路径

现在所有端点的前缀默认是/actuator,如果想修改的话用management.endpoints.web.base-path属性

如果想修改端点的路径,可以用 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属性默认不展示细节,我们可以修改一下

 
  1. management:

  2. endpoints:

  3. web:

  4. exposure:

  5. include: "*" #暴露所有端点 默认是info和health

  6. endpoint:

  7. health:

  8. show-details: always #默认是never

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

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

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

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

 
  1. /**

  2. * 1.实现HealthIndicator接口

  3. * 2.类名要求 xxxHealthIndicator xxx将会是你自定义得健康指标名称

  4. * 3.@Component注入到容器内

  5. * 4.重写health()方法

  6. * @author Administrator

  7. *

  8. */

  9. @Component

  10. public class MyAppHealthIndicator implements HealthIndicator{

  11.  
  12. @Override

  13. public Health health() {

  14. if(check()!=0){

  15. return Health.up().build();

  16. }

  17. return Health.down().withDetail("error", "出错了").build();

  18. }

  19.  
  20. private int check(){

  21. // 检测是否健康的自定义逻辑

  22. return 0;

  23. }

  24. }

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

关于info端点

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

 
  1. info:

  2. app:

  3. version: 1.1

  4. 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端点用途并不大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题

Bobo 有一个 n 个点&#xff0c;m 条边的有向无环图&#xff08;即对于任意点 v&#xff0c;不存在从点 v 开始、点 v 结束的路径&#xff09;。为了方便&#xff0c;点用 1,2,…,n 编号。 设 count(x,y) 表示点 x 到点 y 不同的路径数量&#xff08;规定 count(x,x)0&#xff…

GC 调优(实战篇) - GC参考手册

说明: Allocation Rate, 翻译为分配速率, 而不是分配率; 因为不是百分比,而是单位时间内分配的量; 同理, Promotion Rate 翻译为 提升速率; 您应该已经阅读了前面的章节: 垃圾收集简介 - GC参考手册Java中的垃圾收集 - GC参考手册GC 算法(基础篇) - GC参考手册GC 算法(实现篇)…

01 HTML

1.什么是HTML&#xff1f;(Hyper Text Markup Language:超文本标记语言)超文本&#xff1a;功能比普通文本更加强大标记语言&#xff1a;使用一组标签对内容进行描述的一门语言(它不是编程语言)2.语法和规范&#xff1f;HTML文件都是以.html或者.htm结尾的&#xff0c;建议使用…

图的四种最短路径算法

本文总结了图的几种最短路径算法的实现&#xff1a;深度或广度优先搜索算法&#xff0c;弗洛伊德算法&#xff0c;迪杰斯特拉算法&#xff0c;Bellman-Ford算法 1&#xff09;&#xff0c;深度或广度优先搜索算法&#xff08;解决单源最短路径&#xff09; 从起始结点开始访问所…

ZooKeeper集群与Leader选举

说说你对ZooKeeper集群与Leader选举的理解&#xff1f; ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。 高可用 为了保证ZooKeeper的可用性&#xff0c;在生产环境中我们使用ZooKeeper…

JVM初探:内存分配、GC原理与垃圾收集器

JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤: I. 怎样分配- JVM内存分配策略 对象内存主要分配在新生代Eden区, 如果启用了本地线程分配缓冲, 则优先在…

02 CSS

使用 table 进行布局存在缺陷&#xff0c;而一般的布局都会采用 DIVCSS 来进行布局。 Div 它是一个html 标签&#xff0c;一个块级元素(单独显示一行)。它单独使用没有任何意义&#xff0c;必须结合 CSS 来使用。它主要用于页面的布局。 Span 它是一个 html 标签&#xff0c;…

一致性哈希算法 应用

互联网创业中大部分人都是草根创业&#xff0c;这个时候没有强劲的服务器&#xff0c;也没有钱去买很昂贵的海量数据库。在这样严峻的条件下&#xff0c;一批又一批的创业者从创业中获得成 功&#xff0c;这个和当前的开源技术、海量数据架构有着必不可分的关系。比如我们使用m…

单个节点的缓存容量达到上限 Hash算法一致性

场景 单个节点的缓存容量达到上限&#xff0c;无法继续单点增加内存&#xff0c;如何解决&#xff1f; 单个节点支撑的QPS达到上限&#xff0c;如何解决&#xff1f; 初步方案 增加N个缓存节点&#xff0c;为了保证缓存数据的均匀&#xff0c;一般情况会采用对key值hash&…

java学习笔记11 (构造方法 this深探)

在开发中&#xff0c;经常需要在创建对象的同事明确对象对的属性值&#xff0c;比如一个person对象创建的时候就应该有name和age 等属性&#xff0c;那么如何做到在创建对象的同时给对象的属性值初始化值呢&#xff1f; 这里介绍构造方法 1 构造方法没有返回值类型&#xff0c;…

编程算法 - 将排序数组按绝对值大小排序 代码(java)

一个含有多个元素的数组&#xff0c;有多种排序方式。它可以升序排列&#xff0c;可以降序排列&#xff0c;也可以像我们以前章节说过的&#xff0c;以波浪形方式排序&#xff0c;现在我们要看到的一种是绝对值排序。对于数组A,绝对值排序满足以下条件&#xff1a;|A[i]| < …

数据结构09图

第七章 图 Graph 7.1 图的定义和术语 顶点 Vertex V 是顶点的有穷非空集合&#xff0c;顶点数 |V| n VR 两个顶点之间关系的集合&#xff0c;边数 |VR| e 有向图 Digraph <v, w> Arc v Tail / Inital node w Head / Terminal node 无向图 Undigraph <v, w> 必…

aspnetcore源码学习(一)

---恢复内容开始--- 笔者从事netcore相关项目开发已经大半年了&#xff0c;从netcore 1.0到现在3.0大概经过了3年左右的时间&#xff0c;记得netcore刚出来的时候国内相关的学习资料缺乏&#xff0c;限制于外语不大熟练的限制国外的相关书籍看起来相当吃力&#xff0c;于是在当…

评估一个垃圾收集(GC)

在实践中我们发现对于大多数的应用领域&#xff0c;评估一个垃圾收集(GC)算法如何根据如下两个标准&#xff1a; 吞吐量越高算法越好暂停时间越短算法越好 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times)。 JVM在专门的线程(GC threads…

CAP和BASE理论

几个名词解释&#xff1a; 网络分区&#xff1a;俗称“脑裂”。当网络发生异常情况&#xff0c;导致分布式系统中部分节点之间的网络延时不断变大&#xff0c;最终导致组成分布式系统的所有节点中&#xff0c;只有部分节点之间能够进行正常通信&#xff0c;而另一些节点则不能…

Mysql案例5:取得平均薪资最高的部门的部门名称

一、要求&#xff1a;查询平均薪水最高部门的部门编号 二、背景&#xff1a;当前数据库有employee表和department表&#xff0c;数据分别如下&#xff1a; employee表&#xff1a; department表&#xff1a; 三、难点&#xff1a; 1、需要考虑最高平均薪资可能在多个部门同时出…

Spring 处理过程分析

一、处理过程分析 1、首先&#xff0c;Tomcat每次启动时都会加载并解析/WEB-INF/web.xml文件&#xff0c;所以可以先从web.xml找突破口&#xff0c;主要代码如下&#xff1a;<servlet ><servlet-name >spring-mvc</servlet-name><!-- servlet类 --><…