1. base path
项目需要用到spring-boot-admin(后简写为sba)做监控,没有独立域名,使用主域名+ingress做路径识别,所以需要配合contextPath使用,如何配置呢?
使用tomcat的bio通讯模型时,通过 server.servlet.context-path=/xxx
就可以了,但是由于sba使用了netty+webflux的nio模型,所以要用 spring.webflux.base-path=/xx
来指定。服务启动之后,就可以通过 http://ip:port/xx 来访问了。
但这时候有个问题,因为sba连上注册中心默认是把自己也注册上去的,监控别人顺便监控自己,没有问题,但是通过控制台可以看到sba状态是不通的,为什么呢?
点进去可以看到,health-check的endpoint是 http://ip:port/actuator/health
这个actuator组件提供的默认检查路径。由于我们的sba前面配了basePath,正确的检查路径应该是http://ip:port/xxx/actuator/health
如何更改呢?
查看源码可以知道,sba是通过注册节点的元数据来获取节点的各项指标数据对应的endpoint的,所以在注册的时候带上对应的metadata就可以了,使用nacos时可以通过添加这个配置来指定:
spring:
cloud:
nacos:
discovery:
metadata:
'management.context-path': /sadmin/actuator
2. basic auth
sba项目,加入 spring-boot-starter-security
依赖包和如下配置:
spring:
security:
user:
name: admin
password: 123456
即可赋予sba控制台简单验证功能,非常好用。
但是如果sba监控的其他项目也使用了basic auth呢?请求的endpoint会被验证阻拦,监控会全部失效。这时通过添加以下配置即可:
spring:
boot:
admin:
instance-auth:
service-map:
xxx: # 配置了验证的服务名
userName: admin # 用户名
userPassword: 123456 # 密码
3. mail notify
sba引入 spring-boot-starter-mail
包,在 spring.mail
节点添加发件服务器配置后,通过以下配置:
spring:
boot:
admin:
notify:
mail:
to: shoujianren1<name@domain.com>,shoujianren2<name2@domain.com>,
from: fajianren@domain.cn
enabled: true
ignore-changes: "UNKNOWN:UP" # 哪些状态不通知,可以使用*通配符
即可开启sba的检测节点状态变更时的邮件通知功能。当然除了邮件通知,sba还内置了其他多种IM软件通知方式,不够用了自己扩展也很方便。
这种邮件通知方式,使用的默认邮件模板,非常不灵活,如何自定义呢?
首先,先把默认模板拷贝出来,基于它直接改很省事。找到 sping-boot-admin-server
这个依赖jar包,模板文件就在 META-INF
目录下:
在我们自己的项目里,创建同名目录结构,把文件粘贴进去就可以啦,要做什么改动就可以随便改了