Actuator 端点

这一章主要是Actuator的使用,都是一些纯粹的工具和配置方法,以记录要点的形式快速通过。

修改默认路径:management.endpoints.web.base-path=/ac

默认只有/health和/info端点,可以自行添加和减少内容:

management.endpoints.web.exposure.include=beans  //指定某个端点开放
management.endpoints.web.exposure.include=* //全部开发
management.endpoints.web.exposure.exclude=info //指定某个端点不开放

/info

可以在配置文件内以info.xxx.xxx的方式进行配置,这里边的信息都会被/info端点展示出来。

/health

这个/health表示的是这个应用依赖的外部应用的状态,而不是自己的状态。UP表示正常,其他的DOWN,UNKNOWN,OUT_OF_SERVICE,只要有一个依赖的外部服务异常,就会显示出对应的代码。

management.endpoint.health.show-details=always设置了之后,就可以显示详细的外部服务依赖信息。所有的依赖都至少有一个diskspace,表示文件系统。

Spring还对很多常用的外部依赖可以具体显示情况,详情看原书402页。

/beans

显示当前Web应用的Spring容器里所有的Bean,可以详细知道每一个Bean的源文件,以及注入的依赖。

/conditions

表示Spring容器里所有根据某些条件决定组装或者不组装的Bean,以及无条件组装的Bean的清单

/env

所有配置变量,可以通过变量的具体名称来获取详情,比如http://localhost:8080/actuator/env/server.port

还可以向/env端点进行POSTJSON对象来配置属性。注意,如此POST的属性都是临时的,在服务重启之后会消失。

/mappings

所有对外提供的端点及映射,非常详细,包含可访问的方法及对应的处理类和方法。

/loggers

应用里所有类的日志级别,可以通过POST设置。

/httptrace

列出100个最近的HTTP请求的详细信息,包括请求头,响应头,uri,方法等。

/headdump

是一个堆文件的内存dump,比较高级,这里不展开了。

/threaddump

当前线程情况的快照

/metrics

列出所有可以监控的metric,可以使用具体的名称加在后边,比如常用的http://localhost:8080/actuator/metrics/http.server.requests,可以显示出HTTP的处理时间等信息。

后边的自定义内容了解即可,一般还需要使用Spring Security来保护Actuator的端点,最好不要将其对外开放,一般可以指定给管理员角色即可。

图形化监控Actuator

Spring Admin 服务器

和之前的Eureka和配置分发服务器还有熔断监控服务器类似,我们的每个微服务都启动了Actuator之后,可以使用一个客户端来集中监控所有的Actuator信息。

这个客户端就是Spring Admin,是一个自动去消费Actuator提供的REST API的监控服务器。

套路也是一样的,先添加依赖:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

之后在启动类上添加@EnableAdminServer注解。最好把端口设置为9090,之后启动这个应用,就变成一个Spring Admin服务器了。

Spring Admin 客户端

客户端要连接到这个监控服务器,需要添加依赖:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

学习云道现在,对这种模式已经不陌生了。剩下肯定还需要修改配置:

boot.admin.client.url:localhost:9090

注意,现在我们云配置了,这个也需要去写在各个程序的云配置里。

注意spring.application.name也要写,这个是不能写在云的配置里的。重新应用之后,就可以发现应用已经注册在Admin里。

还可以将Admin注册为一个Eureka服务,如果注册了Eureka服务,则完全不需要为每个服务配置成为Admin Client,Admin会通过Eureka找到所有服务然后使用它们的端点。

如果不想Admin注册为一个服务,可以在其配置里写上 eureka.client.register-with-eureka=false

剩下的部分主要是怎么看这些内容了。还有一个特殊的地方就是如果Actuator设置了身份验证,需要配置一下用户名和密码:

spring.boot.admin.client.url=localhost:9090
spring.boot.admin.client.instance.metadata.user.name=***
spring.boot.admin.client.instance.metadata.user.password=***

JMX 监听

Java历史很悠久,这么多库都是业界共同努力创建标准,刚知道对于监控程序的内部情况,也有一个标准叫做JMX。

想让Spring Boot应用被JMX监听,JDK在bin目录下有一个自带的jconsole.exe,启动之后就可以对actuator的端点进行监听。

启动jconsole之后,会自动列出所有当前的java虚拟机进程应用名称,其中选择和项目名称的启动类同名的进程,就可以进行监听了。

进入监听之后,选择最后一项MBean,然后选择org.springframework.boot中的Endpoint,可以监听具体的内容。

比如选择了info,然后选执行命令,就可以看到结果中就是自己设定的键值对。

这里简单了解一下即可,自定义Mbean之类以后有需要再来看吧。