今天在阅读 《SpringCloud微服务实战》一书时看到了SpringBoot actuator相关知识,并且自己也本地调试实践。觉得SpringBoot这一套监控还是挺有意思的,这里记录下学习过程。
注:本文基于 springBootVersion = '1.5.10.RELEASE'
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的所有原生端点,后面会对一些常用的节点做解释。
spring-bbot-starter-actuator模块中已经实现了一些原生端点,根据端点的作用,可以将原生端点分为三大类:
下面就来详细测试这几种原生端点,以及看下他们的有用信息和强大的功能。 2.1 应用配置类
由于Spring Boot为了改善传统Spring引用繁杂的配置内容,采用了包扫描和自动化配置的机制来加载原本集中于XML文件中的各项内容。虽然这样的做法让我们的代码变得非常简洁,但是整个应用的实例创建和依赖关系等信息都离散到了各个配置类的注解上,这使我们分析整个应用中资源的实例的各种关系变得非常困难。而这类端点可以帮助我们轻松获取一系列关于Spring 应用配置内容的详细报告,比如自动化配置的报告、Bean创建的报告、环境属性的报告等。
{
"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"
}
]
}
}
}
如上图所示,我们可以看到每个Bean中都包含了下面的这些信息: bean:Bean的名称 scope:Bean的作用域 type:Bean的Java类型 resource:class文件的具体路径 dependencies:以来的Bean名称
2.2 度量指标类 上面我们所介绍的应用配置端点类所提供的信息报告在应用启动的是否就已经基本确定了其返回内容,可以说是一个静态报告。而度量指标类端点提供的报告内容则是动态变化的,这些端点提供了应用程序在运行过程中一些快照信息,比如内存使用情况、HTTP请求统计、外部资源指标等。这些端点对于我们构建微服务架构中的监控系统非常有帮助,由于Spring Boot 应用自身实现了这些端点,所以我们可以很方便地利用它们来收集我们想要的信息,以定制出各种自动化策略。下面,我们就来看看这些强大的端点功能。
在原生端点中,只提供了一个用来关闭应用的端点:/shutdown ,可以通过如下配置开启它: endpoints.shutdown.enabled=true 在配置了上述属性之后,只需要访问该应用的/shutdown 端点就能实现关闭该应用的远程操作。由于开放关闭应用的操作本身是一件非常危险的事,所以真正在线上使用的时候,需要对其加入一定的保护机制。比如定制actuator的端点路径、整合Spring Security进行安全校验等。
刚好自己维护的项目在往spring cloud迁移,现在刚好可以利用业余时间来学习微服务相关的知识。 spring-boot-actuator确实可以带来很多我们想不到的收获,而且对于运维也是非常有好多。在这里感谢 《Spring Cloud 微服务实战》这本书,文章中很多内容是通过读书来学习到的,这里只是做个总结。如有纰漏还请大家多多指教。