基于Spring Cloud Eureka的Spring Boo
1.服务端
·springboot配置
server.port=8081
\#服务名
spring.application.name=admin
\#注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.metadata-map.management.context-path=/actuator
eureka.client.healthcheck.enabled=true
eureka.instance.health-check-url-path=/actuator/health
eureka.instance.status-page-url-path=/actuator/info
eureka.instance.home-page-url-path=/
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.client.registry-fetch-interval-seconds=5
\#暴露actuator的所有端点
management.endpoints.web.exposure.include=*
management.endpoint.logfile.external-file=${LOG_PATH}/@log.project@/system.log
\#health endpoint是否必须显示全部细节。默认情况下, /actuator/health 是公开的,并且不显示细节
management.endpoint.health.show-details=always
\#配置登录名,密码和安全策略
spring.profiles.active=secure
spring.security.user.name=admin
spring.security.user.password=password
spring.jmx.default-domain=admin
/#企业微信通知
qyweixin.access-token.url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s
qyweixin.send-message.url=https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s
qyweixin.agent-id=1000002
qyweixin.corp-id=wwea31e8b044
qyweixin.corp-secret=XzikoaSgmAS2nBNYciczWElBbHKyO-Qdg
simplecache.volume=10
simplecache.defaultExpireMillis=60000
·核心依赖
由于是基于eureka的监控,所以主要有两个依赖,一是eureka client,一是admin server。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
·看看依赖的包里面都有什么
主要看admin server这个依赖:
image·依赖的作用
基于eureka的方式在spring-boot-admin-server-cloud这个包里。看看它的核心类:
image image是一个listenter,用来监听spring容器中的eureka client产生的各种事件,主要还是心跳,每次心跳都会刷新自己的服务列表。spring在eureka client外封装了一层,重写了eureka client的onCacheRefreshed()方法,在其定时被调用时发布一个心跳事件,根据这个事件更新服务列表。
image监控的各项指标,包括线程,内存等等,都是通过各个客户端的spring boot actuator暴露的endpoints来获取的。admin server有一个代理接口,监控轮询这个接口来获取相应的指标数据:
imageInstancesProxyController:
代理客户端actuator暴露的接口,流程就是:监控前端->proxyController->客户端/actuator/xxx
画了一个流程图帮助理解:
image通过eureka client从服务中心拉取服务列表,在刷新缓存时发布一个心跳,listener监听心跳,从eureka client获取到最新的服务列表,更新自己的服务仓库。管理员监控时访问代理接口,接口中通过最新的实例信息,访问实例暴露的接口,获取实例当前的状态。
·可选依赖
<!—JMX管理-->
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
·自定义通知:
admin提供了许多通知监控的服务当前状态方式,包括邮箱通知,opsgenie等等。也支持自定义通知,实现方式就是,继承AbstractEventNotifier,重写其doNotify方法:
- extends AbstractEventNotifier
- override doNotify(InstanceEvent event, Instance instance)
我这里,注册了一个企业微信账号,绑定到微信实现了微信的通知。通过微信获知服务下线和内存使用率异常等信息。
2.客户端
客户端注册到eureka服务中心,即可被监控。