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

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

  1. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览
  2. Spring Cloud第二篇 | 使用并认识Eureka注册中心
  3. Spring Cloud第三篇 | 搭建高可用Eureka注册中心
  4. Spring Cloud第四篇 | 客户端负载均衡Ribbon
  5. Spring Cloud第五篇 | 服务熔断Hystrix
  6. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
  7. Spring Cloud第七篇 | 声明式服务调用Feign
  8. Spring Cloud第八篇 | Hystrix集群监控Turbin
  9. Spring Cloud第九篇 | 分布式服务跟踪Sleuth
  10. Spring Cloud第十篇 | 分布式配置中心Config
  11. Spring Cloud第十一篇 | 分布式配置中心高可用
  12. Spring Cloud第十二篇 | 消息总线Bus

一、前言

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: @[email protected]
  name: @[email protected]
  group: @[email protected]
  description: @[email protected]
  #还可以自定义信息
  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: @[email protected]
  name: @[email protected]
  group: @[email protected]
  description: @[email protected]
  #还可以自定义信息
  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/spirngcloud-learn

原文地址:https://www.cnblogs.com/coding-farmer/p/12309272.html

时间: 2024-08-02 14:49:31

Spring Cloud第十三篇 | Spring Boot Admin服务监控的相关文章

spring boot 2.0.3+spring cloud (Finchley)7、微服务监控Spring Cloud Admin

参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,提供如下功能: 显示 name/id 和版本号 显示在线状态 Logging 日志级别管理 JMX beans 管理 Threads 会话和线程管理 Trace 应用请求跟踪 应用运行参数信息,如: Java 系统属性 Java 环境变量属性 内存信息 Spring 环

Spring Cloud第七篇 | 声明式服务调用Feign

本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 Spring Cloud第三篇 | 搭建高可用Eureka注册中心 Spring Cloud第四篇 | 客户端负载均衡Ribbon Spring Cloud第五篇 | 服务熔断Hystrix Spring Cloud第六篇 | Hystrix仪表盘监控Hy

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

? 本文是Spring Cloud专栏的第十篇文章,了解前九篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 Spring Cloud第三篇 | 搭建高可用Eureka注册中心 Spring Cloud第四篇 | 客户端负载均衡Ribbon Spring Cloud第五篇 | 服务熔断Hystrix Spring Cloud第六篇 | Hystrix仪表盘监控

Spring Cloud第八篇 | Hystrix集群监控Turbine

? 本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 Spring Cloud第三篇 | 搭建高可用Eureka注册中心 Spring Cloud第四篇 | 客户端负载均衡Ribbon Spring Cloud第五篇 | 服务熔断Hystrix Spring Cloud第六篇 | Hystrix仪表盘监控

译:基于Spring Cloud Stream构建和测试 message-driven 微服务

原文链接:https://piotrminkowski.wordpress.com/2018/06/15/building-and-testing-message-driven-microservices-using-spring-cloud-stream/ 作者: Piotr Mińkowski 译者: helloworldtang img Spring Boot和Spring Cloud为您提供了一个利用不同的通信方式快速构建微服务的解决方案.您可以基于Spring Cloud Netfli

Spring Cloud下使用Feign Form实现微服务之间的文件上传

背景 ? Spring Cloud现在已经被越来越多的公司采用了,微服务架构比传统意义上的单服务架构从复杂度上多了很多,出现了很多复杂的场景.比如,我们的产品是个app,支持第三方登录功能,在手机端调用第三方授权接口之后,返回了用户的相关信息,比如open_id,性别,头像等.这些信息我们需要保存在我们服务器上,当时针对头像是应该保存图片的url还是图片本身发生了歧义,在一番讨论之后,得出的结果是,我们需要通过url将图片下载到我们本地,然后调用我们自己的文件微服务中上传功能保存起来. 工具 I

Spring Cloud(五):API网关服务——Spring Cloud Zuul

通过前面的介绍,我们可以使用Spring Boot进行微服务开发,使用Spring Cloud Eureka实现注册中心以及微服务的注册和发现,使用Spring Cloud Ribbon实现服务间的负载均衡,使用Spring Cloud Hystrix实现线程隔离以及断路器功能.但是实际应用中这样的架构无疑增加了开发成本以及运维难度,而且后期重构难度也很大.为了解决以上各种问题,需要使用API 网关的方式.API 网关是一个服务器,它是进入一个系统的唯一节点,封装了内部系统的架构,并且提供了AP

微服务与Spring Cloud基本概念、Spring Cloud版本命名方式与版本选择

微服务是什么?Spring Cloud是什么?Spring Cloud版本命名方式?Spring Cloud版本选择? 一.微服务是什么 微服务是一种架构风格,是一种将单体应用开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API).这些服务围绕业务能力构建并且可通过全自动部署机制独立部署.这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术. 二.Spring Cloud是什么 Spring Cloud并不是

Spring cloud入门Eureka篇(一)

一.前言 springcloud是一系列框架的有序集合.它利用spring boot 的开发便利性巧妙的简化了分布式系统基础设施的开发,如服务发现与注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都可以用spring boot 的风格做到一键启动. 本篇介绍spring cloud 中的eureka快速入门. 二.简单介绍 Eureka是Netflix的子模块,它是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 原文地址:https://www.cnblogs