Spring Cloud第十三篇 | Spring Boot Admin服务监控
本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文:
一、前言
Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序。这些应用程序通过 Spring Boot Admin Client(通过 HTTP)注册或者使用 Spring Cloud(例如 Eureka)发现。UI只是 Spring Boot Actuator 端点上的一个 AngularJs 应用程序。
原理:Spring Boot Actuator 模块为监控Spring Boot 应用程序暴露的大量的管理端点[ENDPOINT],在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面。
二、使用Spring Boot Admin监控服务
Spring Boot Admin也分为server和client(普通应用程序)
1、搭建Admin服务端
1-1、创键springboot admin服务端模块(springboot-admin-server)
1-2、添加springboot admin服务端依赖
- <dependency>
- <groupId>de.codecentric</groupId>
- <artifactId>spring-boot-admin-starter-server</artifactId>
- <version>2.1.0</version>
- </dependency>
1-3、在主类上添加注解@EnableAdminServer
1-4、在application.yml文件中添加配置,然后启动
- server:
- port: 8788
- spring:
- application:
- name: springboot-admin-server
2、搭建Admin客户端
2-1、创建springboot admin客户端模块(springcloud-admin-client)
2-2、添加springboot admin客户端依赖
- <dependency>
- <groupId>de.codecentric</groupId>
- <artifactId>spring-boot-admin-starter-client</artifactId>
- <version>2.1.0</version>
</dependency>
2-3、在application.yml文件中添加配置,然后启动
- server:
- port: 8080
- spring:
- application:
- name: springcloud-admin-client
- boot:
- admin:
- client:
- #springboot admin client连接 spring boot admin server 端点地址springboot admin client连接 spring boot admin server 端点地址
- url: http://localhost:8788
- instance:
- #默认使用的是主机名注册,改为使用ip注册
- prefer-ip: true
- management:
- endpoints:
- web:
- exposure:
- #开放所有页面节点 默认只开启了health、info两个节点
- include: '*'
- endpoint:
- health:
- #显示健康具体信息 默认不会显示详细信息
- show-details: always
- # 利用info端点,加入版本等信息
- info:
- versin: @project.version@
- name: @project.artifactId@
- group: @project.groupId@
- description: @project.description@
- #还可以自定义信息
- author: Coding Farmer
- blog: http://www.coding-farmer.cn
2-4、启动访问spring boot admin服务端页面http://localhost:8788,显示如下
3、给Sring Boot Admin添加认证
i、修改admin服务端(springboot-admin-server)模块
3-i-1、在生产环境中,为了数据的安全,还是需要加上安全认证的,具体的可以查看官方文档:https://codecentric.github.io/spring-boot-admin/2.1.0/#_securing_spring_boot_admin_server,相对比较简单,简单来说就是加入spring-boot-starter-security进行安全认证。
3-i-2、在admin服务端(springboot-admin-server)模块添加依赖
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
3-i-3、在application.yml中添加用户名、密码
- spring:
- security:
- user:
- name: coding-farmer
- password: 123456
3-i-4、编辑SpringbootAdminServerApplication.java文件,修改为
- package com.springcloudlearn;
- import de.codecentric.boot.admin.server.config.AdminServerProperties;
- import de.codecentric.boot.admin.server.config.EnableAdminServer;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.security.config.annotation.web.builders.HttpSecurity;
- import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
- import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
- import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
- @EnableAdminServer
- @SpringBootApplication
- public class SpringbootAdminServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringbootAdminServerApplication.class, args);
- }
- @Configuration
- public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
- private final String adminContextPath;
- public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
- this.adminContextPath = adminServerProperties.getContextPath();
- }
- @Override
- protected void configure(HttpSecurity http) throws Exception {
- // @formatter:off
- SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
- successHandler.setTargetUrlParameter("redirectTo");
- successHandler.setDefaultTargetUrl(adminContextPath + "/");
- http.authorizeRequests()
- .antMatchers(adminContextPath + "/assets/**").permitAll()
- .antMatchers(adminContextPath + "/login").permitAll()
- .anyRequest().authenticated()
- .and()
- .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
- .logout().logoutUrl(adminContextPath + "/logout").and()
- .httpBasic().and()
- .csrf()
- .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
- .ignoringAntMatchers(
- adminContextPath + "/instances",
- adminContextPath + "/actuator/**"
- );
- // @formatter:on
- }
- }
- }
3-i-5、访问http://localhost:8788
ii、修改admin客户端(springboot-admin-client)模块
3-ii-1、由于服务端配置了密码,客户端访问的时候需要密码,这是基于SBA访问模式,也就是所谓的直接连接springboot admin服务端模式,在application.yml文件中添加username,password
- spring:
- application:
- name: springcloud-admin-client
- boot:
- admin:
- client:
- #springboot admin client连接 spring boot admin server 端点地址springboot admin client连接 spring boot admin server 端点地址
- url: http://localhost:8788
- instance:
- #默认使用的是主机名注册,改为使用ip注册
- prefer-ip: true
- username: coding-farmer
- password: 123456
3-ii-2、然后启动客户端(springboot-admin-client)模块,访问http://localhost:8788,查看客户端服务注册到了admin服务端上
三、使用Spring Boot Admin监控Spring Cloud服务结合Eureka注册中心
当我们监控微服务的时候,服务数量众多,我们肯定想统一管理微服务,我可以将服务全部注册到注册中心上,admin会自己拉取Eureka上注册的应用信息,主动去注册。这也是唯一区别之前手动注册(SBA连接方式)的地方,就是client端不需要admin-client的依赖,也不需要配置admin地址了,一切全部由admin-server自己实现。这样的设计对环境变化很友好,不用改了admin-server后去改所有应用的配置了。
1、在上面基础上继续修改Admin服务端
1-1、添加依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
1-2、在启动类上添加Eureka的注解@EnableEurekaClient
1-3、修改后application.yml配置文件如下,然后启动
- server:
- port: 8788
- spring:
- application:
- name: springboot-admin-server
- security:
- user:
- name: coding-farmer
- password: 123456
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:8700/eureka
- #客户端每隔30秒从Eureka服务上更新一次服务信息
- registry-fetch-interval-seconds: 30
- #需要将我的服务注册到eureka上
- register-with-eureka: true
- #需要检索服务
- fetch-registry: true
- #心跳检测检测与续约时间
- instance:
- #告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
- #Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
- lease-expiration-duration-in-seconds: 10
- #每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
- #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
- lease-renewal-interval-in-seconds: 2
- # 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
- prefer-ip-address: true
- # 实例名称 最后呈现地址:ip:2002
- instance-id: ${spring.cloud.client.ip-address}:${server.port}
- health-check-url-path: /actuator/health
- #Eureka 中的 metadataMap 是专门用来存放一些自定义的数据,
- # 当注册中心或者其他服务需要此服务的某些配置时可以在 metadataMap 里取。
- # 实际上,每个 instance 都有各自的 metadataMap,map 中存放着需要用到的属性。
- # 例如,上面配置中的 eureka.instance.metadata-map.username,当这个服务成功注册到 Eureka 上,
- # Spring Boot Admin 就会取拿到这个 instance,进而拿到 metadataMap 里的属性,
- # 然后放入请求头,向此服务发送请求,访问此服务的 Actuator 开放的端点。
- #说白了,这个为了连接到自己,把密码告诉eureka,spring boot admin server 拿着密码去连接客户端应用,监控信息
- metadata-map:
- user.name: ${spring.security.user.name}
- user.password: ${spring.security.user.password}
- #使用注册中心后,他admin也可以监控自身服务状况
- management:
- endpoints:
- web:
- exposure:
- #开放所有页面节点 默认只开启了health、info两个节点
- include: '*'
- endpoint:
- health:
- #显示健康具体信息 默认不会显示详细信息
- show-details: always
- # 利用info端点,加入版本等信息
- info:
- versin: @project.version@
- name: @project.artifactId@
- group: @project.groupId@
- description: @project.description@
- #还可以自定义信息
- author: Coding Farmer
- blog: http://www.coding-farmer.cn
1-4、访问如下http://localhost:8788,使用注册中心之后他也可以监控自身服务的状况
2、在上面基础上继续修改Admin客户端
2-1、添加依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
2-2、在启动类上添加注解@EnableEurekaClient
2-3、启动Admin客户端,然后访问Admin服务端http://localhost:8788,你会看到还有Admin服务端已被监控了
详细参考案例源码:https://gitee.com/coding-farmer/springcloud-learn
Spring Cloud第十三篇 | Spring Boot Admin服务监控的更多相关文章
- spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin
参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...
- Spring Cloud Gateway应用篇(十三)
一.概述 在微服务架构中,每个服务都是一个可以独立开发和运行的组件,而一个完整的微服务架构由一系列独立运行的微服务组成.其中每个服务都只会完成特定领域的功能,比如订单服务提供与订单业务场景有关的功能. ...
- spring cloud连载第二篇之Spring Cloud Config
Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...
- Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
- Spring Cloud第七篇 | 声明式服务调用Feign
本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
- Spring Cloud第十篇 | 分布式配置中心Config
本文是Spring Cloud专栏的第十篇文章,了解前九篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...
- Spring Cloud第十一篇 | 分布式配置中心高可用
本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...
- Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案
一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...
随机推荐
- 1.2 UML带来了什么(学习笔记)
需求->需求分析->设计->开发 uml 编号 uml元素 对于语言理解 1 元模型 基本词汇 2 表示法或视图 语法 3 RUP 方法(统一软件开发过程) 方法 4 控制类 定语 ...
- shell正则表达式和cut命令
正则表达式 符号 描述 $ 匹配输入字符串的结尾位置 () 标记一个子表达式的开始和结束位置 * 匹配前面的子表达式零次或多次 + 匹配前面的子表达式一次或多次 . 匹配除换行符(\n)之外的任何单字 ...
- Groovy重载操作符
重载一时爽,一直重载一直爽. 最近在读<Groovy in action>一本书重新复习了Groovy的一些语法特性,迷恋上这个重载操作符的功能,坚持爽的不要要的.分享一个Demo. 由于 ...
- bootstrap4.4 Stretched link的使用
Stretched link功能介绍:扩大可点击区域. 原理 .stretched-link::after { position: absolute; top: 0; right:0; bottom: ...
- kmp算法初步理解
123456789 abbdaxnds Next 01212 第三位看第二位b,第二位和第三位相同,都是b,所以第三位的next是第二位的next加1,即1+1=2 第四位看第三位b,第四位d与第 ...
- 前端页面表格排序 jQuery Table 基础
通常来说, 排序的方式有两种, 一种是我们在查询的时候就排好序,然后将数据渲染到前台页面上, 但是这样做有个弊端,就是在争对做好了缓存处理的系统, 在查询相同数据的时候进行排序,可能不能成功, 因为进 ...
- iOS滤镜系列-滤镜开发概览
概述 滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现.当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如 ...
- 【Javascript函数】节流throttle和间隔控制dbounce
一.throttle 函数节流,指把很小时间内触发的N多事件,节流成1个事件. 我们这里说的throttle就是函数节流的意思.再说的通俗一点就是函数调用的频度控制器,是连续执行时间间隔控制.主要应用 ...
- 简简单单之Linux命令入门
show me the code and talk to me,做的出来更要说的明白 GitHub 项目JavaHouse同步收录 我是布尔bl,你的支持是我分享的动力! 引入 作为一名合格的后端开发 ...
- ArcGIS Enterprise 10.6 (Windows)安装及部署图解
目录 前言 1 本地环境配置 1.1 机器名修改 1.2 安装和配置IIS 2 ArcGIS for Server 2.1 安装 ArcGIS for Server 2.2 配置 ArcGIS for ...