spring-boot-admin 服务端创建与集成入nacos
创建一个项目,我这里放入minicloud 框架内support module下作为一个支撑服务
起名mini-cloud-monitor
引入spring boot admin server maven pom
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
spring boot 2.2.x 可以引进 spring-boot-admin-starter-server 2.2.x
集成 入nacos
添加 nacos pom 和config pom
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
application.yml
spring: application: name: @artifactId@ cloud: nacos: discovery: server-addr: ${NACOS_HOST:127.0.0.1}:${NACOS_PORT:8848} metadata: version: xiaoli namespace: de7eb781-5e83-4bff-8c52-6f00f6a090d3 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yml shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} namespace: de7eb781-5e83-4bff-8c52-6f00f6a090d3 profiles: active: @profiles.active@
Application 添加spring-boot-admin @EnableAdminServer 注解
这时spring boot admin 监控服务其实已经集成完毕了,但是目前是没有登录验证的
为spring boot admin 添加登录验证
引入spring-boot-starter-security
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
设置登录的用户名密码
spring: security: user: name: admin password: 123456
首先启动注册中心,然后启动我们的监控服务并访问 该服务ip 端口
然后输入用户名密码admin 123456登录
登陆后我们只能看见我们监控服务本身一个服务
因为我们还没有启动其他服务
spring boot admin 是获取注册中心所有服务并监控的,所以注册几个服务就会显示几个
下图是上篇中展示的spring boot admin运行原理 :
客户端集成健康检测
本文举例一个服务说明如何开启健康检测,实际情况应该是所有服务都开启健康检测
客户端服务集成spring boot actuator,spring cloud 环境下只需要集成actuator即可,
单体spring boot 服务要需要集成spring-boot-admin-client,actuator pom如下
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置需要开启或者关闭的检测端点,.yml配置如下
management: health: db: enabled: false endpoint: health: show-details: always endpoints: web: exposure: include: '*'
启动服务,查看结果
可以看到已经显示了我们刚刚启动的服务,可以点击该服务看见详细的监测详情
目前基本的健康监测已经可以了,但我们想要在监控页面直接可以看到各个服务的日志,
每个服务还需要添加一下自己服务的日志地址,配置如下
management: endpoint: logfile: enable: true external-file: D:\code\mini-cloud\logs\mini-cloud-upms-center-biz\debug.log
我是在nacos 配置中心配置的,然后我们重启服务,看看结果
可以看到,我们服务的日志已经可以在spring boot admin中看见了,这样做的好处是如果我们是分布式部署的,多个机器上的日志可以通过这个页面统一看见会节省去各个服务器上翻找日志的时间
注意点
1.不要改变客户端的actuator 端点base path
spring boot admin 是使用/actuator 作为访问各个服务的基础path的,如果更改了basepath
那么spring boot admin则无法访问各个客户端服务,如下为改变base path方法
2.如果关闭了所有端点,一定要至少开启/health 端点
spring boot admin 是依靠访问各个服务/acuator/health 的接口监测健康情况的,如果关闭了
/health ,那么spring boot admin就认为该服务挂掉了,一般不需要关闭所有端点
所有端点如下,根据自己项目情况选择开启:
HTTP方法 | Endpoint | 描述 |
GET | /actuator | 查看有哪些 Actuator endpoint 是開放的 |
GET | /actuator/auditevent | 查看 audit 的事件,例如認證進入、訂單失敗,需要搭配 Spring security 使用,sample code |
GET | /actuator/beans | 查看運行當下裡面全部的 bean,以及他們的關係 |
GET | /actuator/conditions | 查看自動配置的結果,記錄哪些自動配置條件通過了,哪些沒通過 |
GET | /actuator/configprops | 查看注入帶有 @ConfigurationProperties 類的 properties 值為何(包含默認值) |
GET | /actuator/env (常用) | 查看全部環境屬性,可以看到 SpringBoot 載入了哪些 properties,以及這些 properties 的值(但是會自動* 掉帶有 key、password、secret 等關鍵字的 properties 的值,保護安全資訊) |
GET | /actuator/flyway | 查看 flyway DB 的 migration 資訊 |
GET | /actuator/health (常用) | 查看當前 SpringBoot 運行的健康指標,值由 HealthIndicator 的實現類提供(所以可以自定義一些健康指標資訊,加到這裡面) |
GET | /actuator/heapdump | 取得 JVM 當下的 heap dump,會下載一個檔案 |
GET | /actuator/info | 查看 properties 中 info 開頭的屬性的值,沒啥用 |
GET | /actuator/mappings | 查看全部的 endpoint(包含 Actuator 的),以及他們和 Controller 的關係 |
GET | /actuator/metrics(常用) | 查看有哪些指標可以看(ex: jvm.memory.max、system.cpu.usage),要再使用/actuator/metrics/{metric.name} 分別查看各指標的詳細資訊 |
GET | /actuator/scheduledtasks | 查看定時任務的資訊 |
POST | /actuator/shutdown | 唯一一個需要 POST 請求的 endpoint,關閉這個 SpringBoot 程式 |