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状态是不通的,为什么呢?

image.png

点进去可以看到,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

image.png

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 目录下:

image.png

在我们自己的项目里,创建同名目录结构,把文件粘贴进去就可以啦,要做什么改动就可以随便改了

image.png


湘西刺客王胡子
6 声望0 粉丝

做人不好吃懒做,那还是人吗