actuator是从spring-boot中带的一套用来进行系统健康检查的一个模块,具有即插即用的能力。它提供了一套基于restful的api接口,可以帮助我们方便的通过相应的接口了解到系统资源占用、beans、dump、mappings等相关的信息。同时其还具有能力,可以基于HealthIndicators实现自定义的安全与健康检查。
actuator目前自带的接口如下:
ID
|
描述
|
Sensitive Default
|
---|---|---|
|
Provides a hypermedia-based “discovery page” for the other endpoints. Requires Spring HATEOAS to be on the classpath. |
true |
|
Exposes audit events information for the current application. |
true |
|
Displays an auto-configuration report showing all auto-configuration candidates and the reason why they ‘were’ or ‘were not’ applied. 告诉你为什么会有这个Bean,或者为什么没有这个Bean。提供了报告,列出了计算过的所有条件,根据条件是否通过进行分组 http://10.4.187.57:8412/autoconfig |
true |
|
显示应用所有的Bean装配报告.
◆bean: Spring应用程序上下文中的Bean名称或ID。
◆resource: .class文件的物理位置,通常是一个URL,指向构建出的JAR文件。
◆dependencies:当前Bean注入的Bean ID列表。
◆scope: Bean的作用域(通常是单例,这也是默认作用域)。
◆type: Bean的Java类型。
http://10.4.187.57:8412/beans |
true |
|
显示应用所有的 |
true |
|
显示当前应用的所有线程dump情况。当出现内存占用过高等情况下,可以帮助分析线程的使用情况,帮助定位问题。返回数据的结构如下: http://10.4.187.57:8412/dump |
true |
|
显示Spring的 http://10.4.187.57:8412/env |
true |
|
显示任意的Flyway数据库迁移被应用情况(一般情况下该功能使用的场景很小)。.默认情况下,该功能是关闭的,访问会出现404错误。
|
true |
|
显示系统的健康信息 (when the application is secure, a simple ‘status’ when accessed over an unauthenticated connection or full message details when authenticated).
|
false |
|
显示任意的应用程序信息.默认是空,如果需要显示自己应用的相关信息,可以在配置文件中添加相应的节点即可。并通过接口输出,例如如下的配置: info.app.name=ecs info.app.version=1.0.0 info.build.artifactId=@project.artifactId@ info.build.version=@project.version@
执行
|
false |
|
Shows and modifies the configuration of loggers in the application. |
true |
|
Shows any Liquibase database migrations that have been applied. |
true |
|
显示当前应用的 ‘metrics’信息.即可以全量查询也可以单个指标查询,路径格式为:/metrics/{name:.*}
http://10.4.187.57:8412/metrics |
true |
|
显示系统所有的 http://10.4.187.57:8412/mappings |
true |
|
Allows the application to be gracefully shutdown (not enabled by default). |
true |
|
显示trace信息 (默认显示最后100个HTTP请求). http://10.4.187.57:8412/trace |
tru |
endpoints.beans.id=beansome
默认情况下,所有端点(除了/shutdown)都是启用的。
禁用端点所有的端点:endpoints.enabled=false
禁用某个特定的端点:endpoints.endpoint-id.enabled=false
注意奥!
禁用后,再次访问URL时,会出现404错误。
springBoot自动配置Actuator创建CounterService的实例,并将其注册为Spring的应用程序上下文中的Bean。
代码如下:
package org.springframework.boot.actuate.metrics;
public interface CounterService {
void increment(String metricName);
void decrement(String metricName);
void reset(String metricName);
}
代码如下:
package org.springframework.boot.actuate.metrics;
public interface GaugeService {
void submit(String metricName, double value);
}
自己写的一个实例:
@Controller
public class HelloController {
@Autowired
private CounterService counterService;
@Autowired
private GaugeService gaugeService;
@RequestMapping(value = "/login", method=RequestMethod.GET)
public String login() {
counterService.increment("logintimes:");
gaugeService.submit("loginLastTime:",System.currentTimeMillis());
return "login";
}
}
在运行/ metrics时,出现自定义的度量信息。
代码如下:
@Componentpublic
class CustomMetrics implements PublicMetrics {
private ApplicationContext applicationContext;
@Autowide
public CustomMetrics(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Override
public Collection> metrics() {
List> metrics = new ArrayList>();
metrics.add(new Metric("spring.startup-date",applicationContext.getStartupDate()));
metrics.add(new Metric("spring.bean.definitions",applicationContext.getBeanDefinitionCount()));
metrics.add(new Metric("spring.beans",applicationContext.getBeanNamesForType(Object.class).length));
metrics.add(new Metric("spring.controllers",applicationContext.getBeanNamesForAnnotation(Controller.class).length));
return metrics;
}
}
运行结果中可以找到以上自定义的度量信息
"spring.startup-date":1477211367363,
"spring.bean.definitions":317,
"spring.beans":331,
"spring.controllers":3,
示例(关于一个异常的健康指示器)如下:
@Componentpublic
class CustomHealth implements HealthIndicator{
@Override
public Health health() {
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("http://localhost:8080/index",String.class);
return Health.up().build();
}catch (Exception e){
return Health.down().withDetail("down的原因:",e.getMessage()).build();
}
}
}
运行“http://localhost:8080/health”
之后就会出现一些列健康指示。有时候有的浏览器仅仅出现{"status":"DOWN"},为什么会是这样呢?官网给了我们答案
Shows application health information (when the application is secure, a simple ‘status’ when accessed over an unauthenticated connection or full message details when authenticated)
而且要求Sensitive Default 为flase
5. 更改健康检查端口
默认情况下健康检查端口和app端口是使用同一个,如我们之前使用的http://127.0.0.1:8080/health
,但是为了安全起见、不影响业务我们最好使用另外的端口进行健康检查,如使用9090
端口,在application.properties
文件中设置management.port=9090
。
默认情况下是不支持对actuator端点的跨域访问,假如我们在一个统一的监控平台下希望支持跨域调用这些端点来指向相应的操作,则需要作如下的配置。
Cross-origin resource sharing (CORS) is a W3C specification that allows you to specify in a flexible way what kind of cross domain requests are authorized. Actuator’s MVC endpoints can be configured to support such scenarios.
CORS support is disabled by default and is only enabled once the endpoints.cors.allowed-origins
property has been set. The configuration below permitsGET
and POST
calls from the example.com
domain:
endpoints.cors.allowed-origins=http://example.com endpoints.cors.allowed-methods=GET,POST
|
Check EndpointCorsProperties for a complete list of options. |
The following HealthIndicators
are auto-configured by Spring Boot when appropriate:
Name
|
Description
|
---|---|
|
Checks that a Cassandra database is up. |
|
Checks for low disk space. |
|
Checks that a connection to |
|
Checks that an Elasticsearch cluster is up. |
|
Checks that a JMS broker is up. |
|
Checks that a mail server is up. |
|
Checks that a Mongo database is up. |
|
Checks that a Rabbit server is up. |
|
Checks that a Redis server is up. |
|
Checks that a Solr server is up. |
|
It is possible to disable them all using the |
Spring Boot supports an integrated Java shell called ‘CRaSH’. You can use CRaSH to ssh
or telnet
into your running application. To enable remote shell support, add the following dependency to your project:
org.springframework.boot spring-boot-starter-remote-shell
|
The remote shell is deprecated and will be removed in Spring Boot 2.0. |
|
If you want to also enable telnet access you will additionally need a dependency on |
|
CRaSH requires to run with a JDK as it compiles commands on the fly. If a basic |
目前只有hotel.pms.admin该服务应用到了该框架,只是针对不同的环境做了启用和不启用的相关配置,并没有做太多针对项目实际情况的应用。例如:
1.所有的启动检测接口可以使用健康检查是否有效的判断,访问http://host:port/health的地址,并在所有项目内铺开。
2.针对所有应用的监控,都可以添加autuator的相关配置,方便在线上出现和资源消耗相关的问题时,可以对问题进行初步的排查,并了解系统资源相关的第一手信息。
3.通过bean相关的分析,可以对无效的相关包引用进行排除。毕竟多加载一个包也是对资源的一个浪费。
4.通过info信息来显示服务端应用的最新信息以了解发布的最新版本。
建议在Q2开始推动在所有的后端服务内推广嵌入actuator相关的配置,以保障服务基础配置的标准化。