本文是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: @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服务监控的更多相关文章

  1. 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 的基础上提 ...

  2. Spring Cloud Gateway应用篇(十三)

    一.概述 在微服务架构中,每个服务都是一个可以独立开发和运行的组件,而一个完整的微服务架构由一系列独立运行的微服务组成.其中每个服务都只会完成特定领域的功能,比如订单服务提供与订单业务场景有关的功能. ...

  3. spring cloud连载第二篇之Spring Cloud Config

    Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...

  4. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard

    本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...

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

    本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...

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

    ​ 本文是Spring Cloud专栏的第十篇文章,了解前九篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

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

    ​ 本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  8. spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)

    本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...

  9. Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案

    一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...

随机推荐

  1. selenium爬取驾考宝典题目

    要求 [x] Python3+ [x] Chrome驱动并已配置环境变量 [x] Selenium ## 研究页面 发现驾考宝典的科目四页面URL都是以 https://www.jiakaobaodi ...

  2. 02_小程序——onPageScroll 你入坑了吗?

    1:你的 onPageScroll 事件是不是失灵?闲话不多说,直接上代码!!! <!--pages/homePage/testing/testing.wxml--> <view c ...

  3. 如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp

    查询临时表空间有多大: SQL> SELECT tablespace_name, file_name, bytes FROM dba_temp_files WHERE tablespace_na ...

  4. 2020 年 Java 程序员应该学习什么?

    大家好,我相信大家在新的一年都有一个良好的开端,并准备好制定一个提升自我技术的目标.作为 Java 开发人员,我还制定了一些目标,希望在今年成为一名更好的 Java 开发人员. 如果你尚未制定目标,这 ...

  5. 论Java中的抽象类与接口

    目录 抽象类和抽象方法 定义 与普通类的区别以及注意点: 抽象类的作用 接口 定义 示例 注意 作用 最后:接口与抽象类的异同 使用场景 借鉴 抽象类和抽象方法 定义 抽象方法和抽象类都必须被abst ...

  6. 速石科技携HPC混合云平台亮相AWS技术峰会2019上海站

    2019年6月20日,全球云技术盛会——AWS技术峰会2019(上海站)在上海世博中心举行.作为AWS的技术合作伙伴,速石科技携旗下基于混合云的一站式高性能计算(HPC)平台首次公开亮相. 速石科技向 ...

  7. 6、使用基元类型而不要使用 FCL 类型

    基元类型: int string object uint long ulong 等 ; FCL (Framework Class Library ) System.Int32 等. 一些定义在一些语言 ...

  8. TCP/IP协议与HTTP协议(二)

    TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据. 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过 ...

  9. java intellij 工具的简单用法

    一.目录结构 1.新建项目(Empty Project) ->  新建module(可以有多个) => 出来src文件夹 -> 在src文件夹中新建package -> 在pa ...

  10. Node.js实操练习(一)之Node.js+MySQL+RESTful

    前言 最近学习了一下node.js相关的内容,在这里初步做个小总结,说实话关于本篇博客的相关内容,自己很久之前就已经有过学习,但是你懂的,“好记性不如烂笔筒”,学过的东西不做笔记的话,很容易就会忘记的 ...