Spring Cloud第十三篇 | Spring Boot Admin服务监控

本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文:html

  1. Spring Cloud第一篇 | Spring Cloud前言及其经常使用组件介绍概览java

  2. Spring Cloud第二篇 | 使用并认识Eureka注册中心git

  3. Spring Cloud第三篇 | 搭建高可用Eureka注册中心github

  4. Spring Cloud第四篇 | 客户端负载均衡Ribbonweb

  5. Spring Cloud第五篇 | 服务熔断Hystrixspring

  6. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard安全

  7. Spring Cloud第七篇 | 声明式服务调用Feignspringboot

  8. Spring Cloud第八篇 | Hystrix集群监控Turbinapp

  9. Spring Cloud第九篇 | 分布式服务跟踪Sleuth负载均衡

  10. Spring Cloud第十篇 | 分布式配置中心Config

  11. Spring Cloud第十一篇 | 分布式配置中心高可用

  12. Spring Cloud第十二篇 | 消息总线Bus

1、前言

    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 应用程序的一个简单的界面。

2、使用Spring Boot Admin监控服务

Spring Boot Admin也分为server和client(普通应用程序)

一、搭建Admin服务端

1-一、创键springboot admin服务端模块(springboot-admin-server)

1-二、添加springboot admin服务端依赖

<dependency>
  <groupId>de.codecentric</groupId>
  <artifactId>spring-boot-admin-starter-server</artifactId>
  <version>2.1.0</version>
</dependency>

1-三、在主类上添加注解@EnableAdminServer

1-四、在application.yml文件中添加配置,而后启动

server:
  port: 8788
spring:
  application:
    name: springboot-admin-server

二、搭建Admin客户端

2-一、建立springboot admin客户端模块(springcloud-admin-client)

2-二、添加springboot admin客户端依赖

<dependency>
  <groupId>de.codecentric</groupId>
   <artifactId>spring-boot-admin-starter-client</artifactId>
   <version>2.1.0</version>
</dependency>

2-三、在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-四、启动访问spring boot admin服务端页面http://localhost:8788,显示以下

三、给Sring Boot Admin添加认证

i、修改admin服务端(springboot-admin-server)模块

3-i-一、在生产环境中,为了数据的安全,仍是须要加上安全认证的,具体的能够查看官方文档:https://codecentric.github.io/spring-boot-admin/2.1.0/#_securing_spring_boot_admin_server,相对比较简单,简单来讲就是加入spring-boot-starter-security进行安全认证。

3-i-二、在admin服务端(springboot-admin-server)模块添加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

3-i-三、在application.yml中添加用户名、密码

spring: security: user: name: coding-farmer password: 123456

3-i-四、编辑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-五、访问http://localhost:8788

ii、修改admin客户端(springboot-admin-client)模块

3-ii-一、因为服务端配置了密码,客户端访问的时候须要密码,这是基于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-二、而后启动客户端(springboot-admin-client)模块,访问http://localhost:8788,查看客户端服务注册到了admin服务端上

3、使用Spring Boot Admin监控Spring Cloud服务结合Eureka注册中心

    当咱们监控微服务的时候,服务数量众多,咱们确定想统一管理微服务,我能够将服务所有注册到注册中心上,admin会本身拉取Eureka上注册的应用信息,主动去注册。这也是惟一区别以前手动注册(SBA链接方式)的地方,就是client端不须要admin-client的依赖,也不须要配置admin地址了,一切所有由admin-server本身实现。这样的设计对环境变化很友好,不用改了admin-server后去改全部应用的配置了。

一、在上面基础上继续修改Admin服务端

1-一、添加依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

1-二、在启动类上添加Eureka的注解@EnableEurekaClient

1-三、修改后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-四、访问以下http://localhost:8788,使用注册中心以后他也能够监控自身服务的情况

二、在上面基础上继续修改Admin客户端

2-一、添加依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2-二、在启动类上添加注解@EnableEurekaClient

2-三、启动Admin客户端,而后访问Admin服务端http://localhost:8788,你会看到还有Admin服务端已被监控了

 

详细参考案例源码:https://gitee.com/coding-farmer/springcloud-learn

 

原文出处:https://www.cnblogs.com/coding-farmer/p/12309272.html

相关文章
相关标签/搜索