目录
1.意义
- 监控服务状态是否宕机
- 监控服务运行指标(内存、虚拟机、线程、请求)
- 监控日志
- 管理服务
2.监控方式
- 一个服务器展示被监控的程序的运行信息
- 在运行程序中设置主动上报服务器可监控、可监控的信息
3.springboot admin 可视化监控平台
开源社区项目,用于管理和监控springboot应用程序。客户端注册到服务端后,通过http请求方式,服务端定期从客户端获取对应的信息,并通过ui界面展示对应信息。
监控服务器开发
1.导入坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.7.3</version> </dependency
版本要和你的springboot 版本一致
2.配置服务端口(防止端口冲突)
application.yml
server: port: 8080
3.添加注解
在引导类添加@EnableAdminServer注解来表明是admin server
@SpringBootApplication
@EnableAdminServer
public class Demo3SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(Demo3SpringbootMybatisApplication.class, args);
}
}
4.启动
访问localhost:8080
被监控配置
1.导入坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.7.3</version> </dependency>
同样版本应与spring boot对应
2.可监控配置
application.yml举例
spring: boot: admin: client: #监控服务器地址(一定要加http协议) url: http://localhost:8080 server: # 配置端口防止冲突 port: 8081#配置可监控信息 management: #对外开放某个监控点 endpoint: #health必须开 health: show-details: always enabled: true #其他 beans: enabled: true endpoints: #对web开启的监控点 web: exposure: include: "*" #对外开放所有监控点 enabled-by-default: true
3.启动
即可在监控页面看到监控信息
4.监控原理
因为http方式简单所有只介绍HTTP方式
- Actuator提供了springboot生产就绪功能,通过端点的配置与访问,获取端点信息
- 端点描述了一组监控信息,springboot提供了多个内置端点,也可以根据需要自定义端点信息
- 访问当前所有端点信息:/actuator
- 访问端点详细信息:/actuator/端点名称
1.常用内置端点
SpringBoot 中默认提供的常用内置端点如下:
SpringBoot 中提供了非常多的默认端点监控,但是出于安全考虑,默认情况下有些端点并不是开启状态,如 shutdown 端点就是默认关闭的。
2.重要端点
1.info 端点
这是应用的说明信息等,需要自己在配置,信息自定义
application.yml方式
#配置可监控信息 management: #对外开放某个监控点 endpoint: info: enabled: trueinfo: auth: zzx date: 09.17
springboot版本太高是不显示的
配置类方式
@Component
public class InfoConfig implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
//key,value方式
builder.withDetail("name","zzx");
builder.withDetail("地址","上海");
//map方式
Map info=new HashMap<>();
info.put("date","09.17");
builder.withDetails(info);
}
}
使用配置类可以动态添信息,可以显示出来
2.health 端点
health 断点默认只是展示当前应用健康信息,不能自定义,但是我们可以通过另一个配置打开详细信息,这样不仅仅会监控当前应用,还会监控与当前应用相关的其他第三方应用,如 Redis。
application.yml方式
#配置可监控信息 management: #对外开放某个监控点 endpoint: #health必须开 health: show-details: always enabled: true
配置类方式
可以进行健康检查,健康输出.....,不健康输出.....
@Component
public class HealthConfig extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
boolean condition = true;
if(condition) {
//key,value方式
builder.withDetail("name", "zzx");
builder.withDetail("地址", "上海");
//map方式
Map info = new HashMap<>();
info.put("date", "09.17");
builder.withDetails(info);
//状态设置
builder.status(Status.UP);
}else {
builder.status(Status.DOWN);
}
}
}
3.loggers 端点
查看当前应用的日志级别等信息,可以临时修改 log 级别。
4.metrics 端点
metrics 是一个非常重要的监控端点,其监控内容覆盖了 JVM 内存、堆、类加载、处理器和 tomcat 容器等一些重要指标 。
metrics端点 自定义指标
5.自定义监控端点
常用注解:
-
@Endpoint:定义一个监控端点,同时支持 HTTP 和 JMX 两种方式。
-
@WebEndpoint:定义一个监控端点,只支持 HTTP 方式。
-
@JmxEndpoint:定义一个监控端点,只支持 JMX 方式。
以上三个注解作用在类上,表示当前类是一个监控端点,另外还有一些注解会用在方法和参数上:
-
@ReadOperation:作用在方法上,可用来返回端点展示的信息(通过 Get 方法请求)。
-
@WriteOperation:作用在方法上,可用来修改端点展示的信息(通过 Post 方法请求)。
-
@DeleteOperation:作用在方法上,可用来删除对应端点信息(通过 Delete 方法请求)。
-
@Selector:作用在参数上,用来定位一个端点的具体指标路由。
@Component
@Endpoint(id = "pay", enableByDefault = true)
public class MyEndpoint {
@ReadOperation
public Object getPay(){
//调用业务操作,获取信息,最终return
Map<Object, Object> payMap = new HashMap<>();
payMap.put("1",103);
payMap.put("2",315);
payMap.put("3",666);
return payMap;
}
}
①@Component 注解表示将该类交给 Spring 进行管理,或者也可以再定义一个 Configuration 类来加载该 Bean 也可以。
当然,如果我们需要提供给第三方使用,如果无法保证当前包名被扫描,则需要使用 SpringBoot 的自动装配机制将该类进行管理。
②@ReadOperation 方法可以返回 String 或者 JSONObject 或者 Map 集合等。
③参数上加了 @Selector 注解则表示访问断端点的时候可以直接访问子节点。