- 监控目标
- kubesphere
- Spring Cloud Admin
- 客户端每隔30秒从Eureka服务上更新一次服务信息
- 需要将我的服务注册到eureka上
- 需要检索服务
- 心跳检测检测与续约时间
- 告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
- Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
- 每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
- Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
- 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
- 实例名称 最后呈现地址:ip:2002
- Eureka 中的 metadataMap 是专门用来存放一些自定义的数据,
- 当注册中心或者其他服务需要此服务的某些配置时可以在 metadataMap 里取。
- 实际上,每个 instance 都有各自的 metadataMap,map 中存放着需要用到的属性。
- 例如,上面配置中的 eureka.instance.metadata-map.username,当这个服务成功注册到 Eureka 上,
- Spring Boot Admin 就会取拿到这个 instance,进而拿到 metadataMap 里的属性,
- 然后放入请求头,向此服务发送请求,访问此服务的 Actuator 开放的端点。
- 说白了,这个为了连接到自己,把密码告诉eureka,spring boot admin server 拿着密码去连接客户端应用,监控信息
- 使用注册中心后,他admin也可以监控自身服务状况
- 利用info端点,加入版本等信息
- 还可以自定义信息
监控目标
监控指标
- 系统指标:CPU负载和CPU使用率、内存使用率
- 网络指标:网络IOPS情况
- 磁盘指标:磁盘空间使用率、磁盘IOPS使用情况
- 容器/应用指标:虚拟容器指标(比如Docker)、线程数量、JVM、链路追踪
- 硬件指标:温度、功率等
监控告警
- 应用日志异常告警
- 系统指标异常告警
- IOPS异常告警
其他
kubesphere
KubeSphere是一个分布式操作系统,以Kubernetes为内核管理本地云应用程序,它提供了即插即用的体系结构,可无缝集成第三方应用程序以增强其生态系统。
优点
- 功能十分强大,可集成得三方应用多
- 平台兼容性好
- DevOps支持:提供了基于流行的CI / CD工具(例如Jenkins)的可插拔DevOps组件
- 分布式跟踪:能够跟踪服务之间的交互方式
- 多租户管理:区分角色和操作权限
- 交通管理:支持应用多版本部署(金丝雀和蓝绿部署)、断路器
- 多维监控
- 定制的监控仪表板,例如Elasticsearch、MySQL、Redis
- 对于基础架构监视,系统提供全面的指标,例如CPU利用率,内存利用率,CPU负载平均值,磁盘使用率,inode利用率,磁盘吞吐量,IOPS,网络出站/入站速率。
- 警报,事件,审核和通知(支持邮件、wechat)
- 日志查询与收集
- 可视化应用部署
- 社区十分活跃,最新代码提交于1天内,版本迭代快今年2个版本
缺点
- 学习代价较大
- 生态圈比较庞大,服务较重,平台服务维护难度较高
- 基于Kubernetes,需要Kubernetes
- 依托阿里云的Kubernetes服务,无法本地化部署、无法在此基础搭建kubesphere
Spring Cloud Admin
Cloud-Admin是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。
优点
- 轻量,部署简单
- 支持邮件告警
- 监控颗粒度细
- JVM配置信息、堆栈信息、可下载heapdump
- 线程会话和线程管理(spring-session)
- 实时查看接口的运行状态和调用频率等
- 监控各个独立Service的运行状态
- 链路追踪
- 服务健康检查信息、CPU、内存、操作系统信息
缺点
- 无法监控Dokcer容器资源情况
- 代码侵入性,每个被监控的项目都需要代码配置,但配置对应用整体影响较小,不会影响到业务逻辑和通信路由;
- 该方案能否兼容非Spring Boot项目待调研,从文档手册看暂时认定无法兼容。所以该监控暂时排除Java非spring boot 项目以及.net项目;
- 看了下社区活跃度都不高,gitee活跃于2年前,github上都是个人库
- 版本兼容问题,依赖包和spring-boot版本不一致兼容性较差
搭建步骤
添加依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
在主类上添加注解@EnableAdminServer
application.yml文件中添加配置,然后启动
server:
port: 8080
spring:
application:
name: springcloud-admin-client
boot:
admin:
client:
#springboot admin client连接 spring boot admin server 端点地址springboot admin client连接 spring boot admin server 端点地址
url: http://localhost:8788
instance:
#默认使用的是主机名注册,改为使用ip注册
prefer-ip: true
management:
endpoints:
web:
exposure:
#开放所有页面节点 默认只开启了health、info两个节点
include: '*'
endpoint:
health:
#显示健康具体信息 默认不会显示详细信息
show-details: always
# 利用info端点,加入版本等信息
info:
versin: @project.version@
name: @project.artifactId@
group: @project.groupId@
description: @project.description@
#还可以自定义信息
author: Coding Farmer
blog: http://www.coding-farmer.cn
添加认证
4.1 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
4.2 在启动类上添加Eureka的注解@EnableEurekaClient
4.3 application.yml配置,然后启动 ```yaml server: port: 8788 spring: application: name: springboot-admin-server security: user: name: coding-farmer password: 123456 eureka: client: service-url: defaultZone: http://localhost:8700/eureka客户端每隔30秒从Eureka服务上更新一次服务信息
registry-fetch-interval-seconds: 30
需要将我的服务注册到eureka上
register-with-eureka: true
需要检索服务
fetch-registry: true
心跳检测检测与续约时间
instance:
告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
lease-expiration-duration-in-seconds: 10
每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
lease-renewal-interval-in-seconds: 2
启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
prefer-ip-address: true
实例名称 最后呈现地址:ip:2002
instance-id: ${spring.cloud.client.ip-address}:${server.port} health-check-url-path: /actuator/health
Eureka 中的 metadataMap 是专门用来存放一些自定义的数据,
当注册中心或者其他服务需要此服务的某些配置时可以在 metadataMap 里取。
实际上,每个 instance 都有各自的 metadataMap,map 中存放着需要用到的属性。
例如,上面配置中的 eureka.instance.metadata-map.username,当这个服务成功注册到 Eureka 上,
Spring Boot Admin 就会取拿到这个 instance,进而拿到 metadataMap 里的属性,
然后放入请求头,向此服务发送请求,访问此服务的 Actuator 开放的端点。
说白了,这个为了连接到自己,把密码告诉eureka,spring boot admin server 拿着密码去连接客户端应用,监控信息
metadata-map: user.name: ${spring.security.user.name} user.password: ${spring.security.user.password}
使用注册中心后,他admin也可以监控自身服务状况
management: endpoints: web: exposure:
#开放所有页面节点 默认只开启了health、info两个节点
include: '*'
endpoint: health:
#显示健康具体信息 默认不会显示详细信息
show-details: always
利用info端点,加入版本等信息
info: versin: @project.version@ name: @project.artifactId@ group: @project.groupId@ description: @project.description@
还可以自定义信息
author: Coding Farmer
blog: http://www.coding-farmer.cn
```
kubesphere 和 Spring Cloud Admin对比
Spring Cloud Admin针对得监控主要是应用服务和宿主机的状态监控;kubesphere支持各个组件状态监控。
kubesphere | Spring Cloud Admin | |
---|---|---|
集成难度 | 大 | 小 |
功能完善度 | 完善 | 不完善 |
契合度 | 契合 | 契合 |
入侵性 | 无 | 中等 |
社区活跃度 | 活跃 | 活跃? |
完善度 | 完善 | 只支持应用监控功能 |
资料 | 依赖官方文档(官方文档较为完善) | 资料较多 |
宿主机监控 | 支持 | 不支持 |
应用监控 | 支持 | 支持 |
集群监控 | 支持 | 不支持 |
部署难易程度 | 难 | 易 |
堆栈监控 | 不支持 | 支持 |
线程监控 | 不支持 | 支持 |
应用集群资源监控 | 支持 | 不支持 |
调整服务日志级别 | 不支持? | 支持 |
集群易扩展 | 支持 | 不支持 |
故障转移 | 支持 | 不支持 |
耗时人天 | 15 | 5 |
结论
考虑到人天和后期维护成本,采用spring cloud admin方案。