SpringBoot actuator 应用监控。
前言 :
今天在阅读 《SpringCloud微服务实战》一书时看到了SpringBoot actuator相关知识,并且自己也本地调试实践。觉得SpringBoot这一套监控还是挺有意思的,这里记录下学习过程。
注:本文基于 springBootVersion = '1.5.10.RELEASE'
一:初识actuator
actuator是SpringBoot的一个组件,组件名称为:spring-boot-starter-actuator, 引入方式如下:
application配置文件:
#actuator
management.security.enabled= false
endpoints.health.sensitive= false
maven引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
或者gradle:
compile('org.springframework.boot:spring-boot-starter-actuator')
配置完成之后,启动项目,可以看到:
启动的时候会加载actuator的所有原生端点,后面会对一些常用的节点做解释。
二,体验Actuator
spring-bbot-starter-actuator模块中已经实现了一些原生端点,根据端点的作用,可以将原生端点分为三大类:
- 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
- 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如内存信息、线程池信息、HTTP请求统计等。
- 操作控制类:提供了对应用的关闭等操作类功能。
下面就来详细测试这几种原生端点,以及看下他们的有用信息和强大的功能。
2.1 应用配置类
由于Spring Boot为了改善传统Spring引用繁杂的配置内容,采用了包扫描和自动化配置的机制来加载原本集中于XML文件中的各项内容。虽然这样的做法让我们的代码变得非常简洁,但是整个应用的实例创建和依赖关系等信息都离散到了各个配置类的注解上,这使我们分析整个应用中资源的实例的各种关系变得非常困难。而这类端点可以帮助我们轻松获取一系列关于Spring 应用配置内容的详细报告,比如自动化配置的报告、Bean创建的报告、环境属性的报告等。
- /autoconfig:该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项。同时还列出每个候选项是否满足自动化配置的各个先决条件。所以,该端点可以帮助我们方便地找到一些自动化配置为什么没有生效的原因。该报告内容将自动化配置内容分为以下两部分:
positiveMatchers:返回的是条件匹配成功的自动化配置。
negativeMatches :返回的是条件匹配不成功的自动化配置。这里只是展示一部分内容,方便展示而省略了很多信息。
{
"positiveMatches": {
"PageHelperAutoConfiguration": [
{
"condition": "OnBeanCondition",
"message": "@ConditionalOnBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) found bean 'sqlSessionFactory'"
}
]
},
"negativeMatches": {
"EncryptionBootstrapConfiguration.RsaEncryptionConfiguration": {
"notMatched": [
{
"condition": "EncryptionBootstrapConfiguration.KeyCondition",
"message": "Keystore nor key found in Environment"
}
],
"matched": [
{
"condition": "OnClassCondition",
"message": "@ConditionalOnClass found required class 'org.springframework.security.rsa.crypto.RsaSecretEncryptor'; @ConditionalOnMissingClass did not find unwanted class"
}
]
}
}
}当我们发现有一些期望的配置没有生效时,我们可以通过该端点来查看没有生效的具体原因。
- /beans:该端点用来获取应用上下文中创建的所有Bean。
如上图所示,我们可以看到每个Bean中都包含了下面的这些信息:
bean:Bean的名称
scope:Bean的作用域
type:Bean的Java类型
resource:class文件的具体路径
dependencies:以来的Bean名称 - /configprops:该端点用来获取应用中配置的属性信息报告。prefix属性代表了属性的配置前缀,properties代表了各个属性的名称和值。
所以,我们可以通过该报告来看到各个属性的配置路径,比如我们要关闭该端点,就可以通过使用endpoints.configprops.enabled=false来完成配置。
- /env:该端点预/configprops不同,它用来获取应用所有可用的环境属性报告。包括环境变量、JVM属性、应用的配置属性、命令行中的参数。从下面该端点返回的示例片段中,可以看到它不仅返回了应用的配置属性,还返回了系统属性、环境变量等丰富的配置信息,其中还包括了应用还没有使用的配置,所以它可以帮助我们方便地看到当前应用可以加载的配置信息,并配合@ConfigurationProperties注解将它们引入到我们的应用程序中来进行使用。另外,为了配置属性的安全,对于一些类似密码等敏感信息,该端点都会进行隐私保护,但是我们需要让属性中包含password、secret、key 这些关键词,这样该端点再返回它们的时候都会使用*来替代实际的属性值。

- /mappings:该端点用来返回所有Spring MVC 的控制器映射关系报告。从下面的示例片段中,我们可以看到该报告的信息与我们在启用Spring MVC的Web应用时输出的日志信息类似,其中bean属性标识了该映射关系的请求处理器,method属性标识了该映射关系的具体处理类和处理函数。

2.2 度量指标类
上面我们所介绍的应用配置端点类所提供的信息报告在应用启动的是否就已经基本确定了其返回内容,可以说是一个静态报告。而度量指标类端点提供的报告内容则是动态变化的,这些端点提供了应用程序在运行过程中一些快照信息,比如内存使用情况、HTTP请求统计、外部资源指标等。这些端点对于我们构建微服务架构中的监控系统非常有帮助,由于Spring Boot 应用自身实现了这些端点,所以我们可以很方便地利用它们来收集我们想要的信息,以定制出各种自动化策略。下面,我们就来看看这些强大的端点功能。
- metrics:该端点用来返回当前应用的各类重要度量指标,比如内存信息、线程信息、垃圾回收信息等。
从上面的示例中,我们看到有如下这些重要的度量值:
系统信息:包括处理器数量processors、运行时间uptime和instance.uptime、系统平均负载systemload.average。
mem.*: 内存概要信息,包括分配给应用的总内存数量以及当前空闲的内存数量。这些信息来自java.lang.Runtime。
heap.*: 堆内存使用情况。这些信息来自java.lang.management.MemoryMXBean接口中getHeapMemoryUsage方法获取的java.lang.management.MemoryUsage。
nonheap.*: 非堆中内存使用情况。这些信息来自java.lang.management.MemoryMXBean接口中getNonHeamMemoryUsage方法获取的java.lang.management.MemoryUsage。
thrads.*: 线程使用情况,包括线程数、首付线程数(daemon)、线程峰值(peak)等,这些数据均来自java.lang.management.ThreadMXBean。
classes.*: 应用加载和卸载的类统计。这些数据均来自java.lang.management.ClassLoadingMXBean。
gc.*: 垃圾收集器的相信信息。包括垃圾回收次数:gc.ps_scavenge.count,垃圾回收消耗时间:gc.ps_scavenge.time,标记-清除算法的次数:gc.ps_marksweep.count,标记清除算法耗时gc.ps_markweep.time
httpsessions.*: Tomecat容器的会话使用情况。包括最大会话数:httpsession.max和获取会话数:httpsessions.active。该度量指标信息仅在引用嵌入式Tomcat作为容器时才提供。
gauge.*: HTTP请求的性能指标之一,它主要用来反映一个绝对数值。
counter.*: HTTP请求的性能指标之一,它主要用来计数器来使用,记录了增加量和减少量。/metrics端口可以提供应用运行状态的完整度量报告,这项功能非常实用,但是对于监控系统中各项监控功能,它们的监控内容、数据收集频率都有所不同,如果每次都通过全年获取报告的方式来收集,略显粗暴。所以我们可以通过?metrics/{name}接口来更细粒度地获取度量信息。比如我们可以通过/metrics/mem.free来获取当前可用内存数量。
- /health:该端点用来获取应用的各类健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些常用资源的健康指标检测器。这些检测器都通过HealthIndicator接口实现,并且会根据依赖关系的引入实现自动化配置,比如下面列出的这些:
检测器 功能 DiskSpaceHealthIndicatior 低磁盘空间检测 DataSOurceHealthIndicator 检测DataSource的连接是否可用 MongoHealthIndicator 检测Mongo数据库是否可用 RabbitHealthIndicator 检测Rabbit服务器是否可用 RedisHealthIndicator 检测Redis服务器是否可用 SolrHealthIndicator 检测Solr服务器是否可用
- /dump:该端点用来暴露程序运行过程中的线程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法来返回所有包含有同步信息的活动线程详情。

trace: 该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用org.springframework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式,始终保留最近的100条请求记录。

2.3 操作控制类
在原生端点中,只提供了一个用来关闭应用的端点:/shutdown ,可以通过如下配置开启它:
endpoints.shutdown.enabled=true
在配置了上述属性之后,只需要访问该应用的/shutdown 端点就能实现关闭该应用的远程操作。由于开放关闭应用的操作本身是一件非常危险的事,所以真正在线上使用的时候,需要对其加入一定的保护机制。比如定制actuator的端点路径、整合Spring Security进行安全校验等。
三:总结
刚好自己维护的项目在往spring cloud迁移,现在刚好可以利用业余时间来学习微服务相关的知识。
spring-boot-actuator确实可以带来很多我们想不到的收获,而且对于运维也是非常有好多。在这里感谢 《Spring Cloud 微服务实战》这本书,文章中很多内容是通过读书来学习到的,这里只是做个总结。如有纰漏还请大家多多指教。
SpringBoot actuator 应用监控。的更多相关文章
- springcloud(九) springboot Actuator + admin 监控
前一章讲的都是Feign项目(调用方)的监控.接下来讲的是服务提供方的监控 一.springboot actuator + springboot admin Spring Boot Admin 是一个 ...
- SpringBoot Actuator监控【转】
springboot actuator 监控 springboot1.5和springboot2.0 的actuator在启动日志上的差异就很大了. springboot1.5在启动时会打印很多/XX ...
- SpringBoot Actuator — 埋点和监控
项目中看到了有埋点监控.报表.日志分析,有点兴趣想慢慢捣鼓一下 1. 数据埋点 监控机器环境的性能和业务流程或逻辑等各项数据,并根据这些数据生成对应的指标,那么我们就称为数据埋点.比如我们想知道某个接 ...
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控
Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...
- SpringBoot Actuator & SpringBoot Admin
SpringBoot Actuator提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能. 当你的spring boot应用中引入依赖之后 ...
- springboot actuator 配置安全
springboot actuator监控是什么?类似php的phpinfor()函数,不过actuator更强大,可以查看的数据.状态更多.Actuator是Spring Boot提供的对应用系统的 ...
- springboot(二十):使用spring-boot-admin对spring-boot服务进行监控
上一篇文章<springboot(十九):使用Spring Boot Actuator监控应用>介绍了Spring Boot Actuator的使用,Spring Boot Actuato ...
- SpringBoot Actuator
SpringBoot Actuator 提供了检查项目内部信息的一整套API,通常在项目启动时可以看到. 1.引入依赖包 <dependency> <groupId>org.s ...
- springboot Actuator健康检查
通过情况下,如我们想在系统中添加一个健康检查的接口,我们怎么做呢? 我们会新建一个类,或在已存在类的基础上添加检测接口. package com.crhms.medicareopinion; impo ...
随机推荐
- Storm本地模式异常
来自:http://isuifengfei.iteye.com/blog/1998265 问题1 java.net.SocketException: Address family not supp ...
- C# ListView用法
ListView是个较为复杂的控件 1.定义 把它拽进来,系统会自动在Designer.cs里添加一个 this.listView1 = new System.Windows.For ...
- Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的几个问题
这次新安装了一个MySQL数据库,然后navicat连接数据库一点问题没有. 但是通过Java的jdbc连接却怎么都建立不了连接. 报如下错: 网上找了很久找到了原因: 数据库用的是Mysql8版本, ...
- selenium 定制启动 chrome 的选项
序 使用 selenium 时,我们可能需要对 chrome 做一些特殊的设置,以完成我们期望的浏览器行为,比如阻止图片加载,阻止JavaScript执行 等动作.这些需要 selenium的 Chr ...
- -webkit-line-clamp下多行文字溢出点点点...显示实例页面
overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box ...
- 【js+jquery】通用、简单的JS 提示框
1.该插件不需要依赖 jquery,仅仅使用了原生js 2.简单.通用.可自定义修改样式.支持等待N秒消失.支持消失后跳转其他url , 功能还是比较完善的. 3.不废话,上代码: (我存放的位置在 ...
- [转载]eclipse的远程调试功能配置
原文地址:eclipse的远程调试功能配置作者:我的 用途:web应用部署并运行于外部(区别于eclipse环境中启动的)应用服务器中,当出现问题时,可以使用eclipse工程的源代码进行跟踪调试. ...
- c++ 多个线程读一个线程写同步
这种情况一般多个线程读是不需要加锁的.就在写的时候需要加锁. 那么要做的就是让不写的时候,读不受同步限制.让多线程自由的读. 这个时候就要用读写锁 boost已经有读写锁,而c++ 14才有读写锁. ...
- Mysql5.6 make 错误以及解决办法
1.若make出现类似错误: CMake Error: CMake was unable to find a build program corresponding to "Unix Mak ...
- “医疗信息化行业之中的联发科”- 我们在医疗行业中的定位及目标 想做一个面对中小企业的专业上游软件供应商 台湾联发科技颠覆掉的是一个封闭的手机产业系统 解决方案,即AgileHIS.NET数字化医院基础方案
“医疗信息化行业之中的联发科”- 我们在医疗行业中的定位及目标 我们做中国医疗信息化行业之中的联发科 ---我们在医疗行业中的定位及目标 从我个人来讲,我从2001年到现在这10年之间基本上一直在 ...