应用监控这个事情,随着微服务化的普适,已不再是早期单服务器、单应用监控那么简单了!微服务化以后,我们需要一整套的监控运维体系,比如说
- 指标监控:即metrics监控,所谓metrics指的是可以数值化的指标,比如cpu、内存、磁盘、qps、tps、线程数等
- 日志监控:线上服务发生业务异常、系统异常,很多时候是在事后排查,如果没有日志,自然玩不转了!
- 链路监控:分布式系统之间调用:A--->B--->C,如果没有一个完整的链路,想要定位分析问题,一样玩不转啊!
很显然,不管是指标,日志,还是链路监控,在微服务化以后,都是非常重要的应用支撑服务。而想要搭建这么一套完整的监控运维体系,对研发团队、运维团队小伙伴的要求都会比较高。
这也是为什么业界大家经常听到说,不要轻易上微服务的一个原因!担心玩不转是一方面,增加的成本那可是实实在在的!
那么如果我们是一个小团队,在开发维护一些基于springboot框架的应用,有没有适合的监控运维组件呢?
答案就是本篇文章,想要推荐给大家的springboot admin组件。springboot admin是开源社区孵化的项目,用于管理监控springboot应用,非常简单易用
- 能够满足基础的监控告警需求
- 简单整合,即可让admin server,监控springboot应用
- 支持通过服务注册发现组件,实现admin server监控所有注册中心的服务
项目开源地址:github.com/codecentric...
1.直接整合客户端实现监控
首先,搭建一个admin server,一个客户端springboot应用,体验基础的监控
1.1.搭建admin server
搭建admin server非常简单,创建一个springboot应用,导入admin server依赖即可
引入依赖
xml
<!--admin server 依赖-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.3</version>
</dependency>
编写配置
yaml
server:
port: 8899
spring:
application:
name: follow-me-springboot-admin-server
编写启动类
启动类上,加上@EnableAdminServer注解
java
/**
* 启动类
*
* @author ThinkPad
* @version 1.0
*/
@SpringBootApplication
@EnableAdminServer
public class FollowMeSpringBootAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(FollowMeSpringBootAdminServerApplication.class, args);
}
}
启动应用,访问端点:http://127.0.0.1:8899/applications
到此,就搭建好了admin server,只等着其它需要被监控的服务整合进来了!
1.2.搭建客户端springboot应用
客户端应用搭建需要引入
- spring-boot-starter-actuator
- spring-boot-admin-starter-client
两个依赖
xml
<!--actuator依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--admin client 依赖-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.3</version>
</dependency>
编写配置
yaml
server:
port: 8888
spring:
application:
name: follow-me-springboot-admin-client
boot:
admin:
client:
# admin server 地址配置
url: http://127.0.0.1:8899
#actuator端点配置
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: '*'
编写启动类
java
/**
* 启动类
*
* @author ThinkPad
* @version 1.0
*/
@SpringBootApplication
public class FollowMeSpringBootAdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(FollowMeSpringBootAdminClientApplication.class, args);
}
}
启动客户端应用,观察admin server已经注册进来一个客户端应用了。
1.3.admin server监控说明
搭建admin server,以及admin client应用以后,我们观察到admin server控制面板上已经注册进来客户端应用,即已经将admin client监控起来。
1.3.1.面板介绍
应用墙
应用墙展示admin client应用,是进入监控细节的入口
应用
应用展示被admin server监控的客户端列表信息
日志报表
日志报表展示客户端应用事件列表信息
1.3.2.监控介绍
了解了admin server的应用强、应用、日志报表面板后,我们进入重点,即看看admin server都能实现哪些应用监控
整体面板
进入客户单应用详情,看到admin server能实现的监控有
- 指标监控:进程、线程、垃圾回收、内存
- 展示:系统环境、类、配置属性、计划任务
- 日志配置:这个很有用,支持在线调整日志级别
- JVM:支持下载线程转储、内存转储
- 映射:即当前客户端应用暴露的端点、包括业务服务端点
- 缓存
日志配置
支持线上调整日志级别,非常有用的一个能力,比如说线上环境调试问题,可以临时将日志级别调整为DEBUG,调试完成后再将日志级别跳转为INFO,整个过程不需要重启客户端应用
JVM
支持下载线程转储、内存转储,方便分析线上应用,比如说是内存使用情况、线程情况、GC情况等
映射
当前客户端暴露的端点,包括业务端点
通过以上,我们看到springboot admin组件能够满足应用常规的监控需求,同时还支持在"性能"标签中定义相关的性能指标,以及配套的告警能力。可以说是个非常适合中小团队的监控运维组件
2.通过服务注册发现组件实现监控
springboot admin不仅提供了admin-client方式实现客户端应用监控,事实上我们还可以借助服务注册组件,通过服务发现的方式实现监控。
2.1.启动nacos server
这里将nacos作为服务注册发现组件。稍后将admin server注册上来
2.2.改造admin server
引入nacos服务发现依赖
xml
<!--nacos discovery依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
编写配置
yaml
server:
port: 8899
spring:
application:
name: follow-me-springboot-admin-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#配置名称空间 dev
namespace: 1a500714-6fdc-410c-8743-ae30d0edf92e
#服务提供者8080实例,部署在广州机房
cluster-name: GZ
重新启动admin server
图一:admin server已经注册到nacos
图二:admin server从注册中心,服务发现了自己
2.3.启动客户端应用
将之前准备的应用,启动起来,观察admin server变化
- follow-me-spring cloud-nacos-consumer
- follow-me-spring cloud-nacos-provider
我们看到,只需要将其它应用注册到nacos,那么admin server通过服务发现即可将其它应用监控起来了!非常方便!