why
使用spring boot admin 可以更方便监控服务状态, 还可以监控部署服务的各项信息, 例如JVM, 日志... 反正是服务监控必备产品.
admin monitor 工程解读
工程位于: https://gitee.com/xiaofeipapa/spring-cloud-demo
目录是: admin-demo
增加项目依赖
在工程的pom中可以看到增加了如下依赖:
<dependencies>
<!--Admin-Server-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
我写这篇博客的时间是 2021/3/8 , 当前版本是 2.3.1 . Spring boot admin 有可能会和Spring 本身有包冲突, 所以要注意版本的问题.
新增启动类
package org.xiaofeipapa.feimall.admin;
import de.codecentric.boot.admin.server.config.AdminServerHazelcastAutoConfiguration;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* 作者: 小肥爬爬
* 简书: https://www.jianshu.com/u/db796a501972
* gitee: https://gitee.com/xiaofeipapa
* 邮箱: imyunshi@163.com
* 您可以自由转载此博客文章, 恳请保留原链接, 谢谢!
**/
@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MonitorAdminApplication {
public static void main(String[] args) {
SpringApplication.run( MonitorAdminApplication.class, args );
}
}
主要是多了个 @EnableAdminServer 的注解, 没什么太特殊的.
配置文件
##################
# 以下配置到consul #
##################
spring:
application:
name: monitor-admin
boot:
admin:
discovery:
ignored-services: consul,aliyun-*,baidu-*
cloud:
config:
enabled: false
consul:
host: localhost
port: 8500
discovery:
tags: management.context-path=/foo,health.path=/ping
#监控监控
management:
endpoints:
web:
exposure:
include: "*"
path-mapping:
health: /ping
base-path: /foo
endpoint:
health:
show-details: always
以上配置主要用于:
- 忽略 consul, aliyun, baidu ... 这些服务. 特别是consul, 如果不忽略它会出错.
- admin server 也是可以注册到consul的, 它会自动从consul 获取当前注册的服务.
- management 本身的配置
测试
依次启动各个服务, 包括 MonitorAdminApplication 这个类, 然后访问: localhost:8080, 就能看到:
image.png
在微服务间使用 admin client
server 和 client 模式
在上面的工程已经可以看到 admin server的模式, 简单来说server 模式就是一个网站, 可以让你查看微服务的各项数据. 但如果你点开微服务, 会发现只有很少数据, 说好的功能强大呢? 那是因为微服务并没有实现 admin 的 client 接口. 如果实现了client , 就能传送准确数据到 admin server 端.
修改 userApi 工程
修改pom
<!--Admin-client-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
修改配置文件
boot:
admin:
client:
# 即 admin server 的地址
url: http://localhost:8080
instance:
#默认使用的是主机名注册,改为使用ip注册
prefer-ip: true
management:
endpoints:
web:
exposure:
#开放所有页面节点 默认只开启了health、info两个节点
include: '*'
endpoint:
health:
#显示健康具体信息 默认不会显示详细信息
show-details: always
测试
重启 userApi 工程, 然后访问 localhost:8080 , 点进 userApi, 可以看到展示的信息丰富了许多:
image.png
最后
spring boot admin 还可以轻松集成 security 框架, 在登录前加一个用户/验证码的验证页面. 不过个人觉得不是特别必要, 在网上也很容易能查到集成的方法, 就不再赘述了.
网友评论