关键词:
SpringBoot Admin
基于SpringBootAdmin的开源产品很多,我们选择这个:https://github.com/codecentric/spring-boot-admin
1.搭建Admin服务器
创建建对应的SpringBoot项目,添加相关依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.1</version>
</dependency>
然后放开Admin服务即可
然后启动服务,即可访问
这个时候没有服务注册,所以是空的,这时我们可以创建对应的客户端来监控
2.客户端配置
创建一个SpringBoot项目整合Actuator后添加Admin的客户端依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.5.1</version>
</dependency>
然后在属性文件中添加服务端的配置和Actuator的基本配置
server.port=8081
# 配置 SpringBoot Admin 服务端的地址
spring.boot.admin.client.url=http://localhost:8080
# Actuator的基本配置
management.endpoints.web.exposure.include=*
然后我们再刷新Admin的服务端页面
那么我们就可以在这个可视化的界面来处理操作了
3.服务状态
我们可以监控下MySQL的状态,先添加对应的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
然后添加对应的jdbc配置
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mysql-base?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456
然后我们在Admin中的health中就可以看到对应的数据库连接信息
注意当我把MySQL数据库关闭后,我们来看看
我们可以看到Admin中的应用墙变灰了
启动服务后,发现又正常了,然后我们修改下数据库连接的超时时间
# 数据库连接超时时间
spring.datasource.hikari.connection-timeout=2000
关闭数据库后,我们发下应用变红了
设置数据库连接超时后即可在有效的时间内发下应用的状态。
- 绿色:正常状态
- 灰色:连接客户端健康信息超时
- 红色:可以看到具体的异常信息
4.安全防护
其实我们可以发现在SpringBootAdmin的管理页面中我们是可以做很多的操作的,这时如果别人知道了对应的访问地址,想想是不是就觉得恐怖,所以必要的安全防护还是很有必要的,我们来看看具体应该怎么来处理呢?
由于在分布式 web 应用程序中有几种解决身份验证和授权的方法,Spring Boot Admin 没有提供默认的方法。默认情况下,spring-boot-admin-server-ui 提供了一个登录页面和一个注销按钮。
导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
然后添加对应的配置类
package com.bobo.admin.config;
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import java.util.UUID;
@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter
private final AdminServerProperties adminServer;
private final SecurityProperties security;
public SecuritySecureConfig(AdminServerProperties adminServer, SecurityProperties security)
this.adminServer = adminServer;
this.security = security;
@Override
protected void configure(HttpSecurity http) throws Exception
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(this.adminServer.path("/"));
http.authorizeRequests(
(authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll()
.antMatchers(this.adminServer.path("/actuator/info")).permitAll()
.antMatchers(this.adminServer.path("/actuator/health")).permitAll()
.antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated()
).formLogin(
(formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and()
).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults())
.csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringRequestMatchers(
new AntPathRequestMatcher(this.adminServer.path("/instances"),
HttpMethod.POST.toString()),
new AntPathRequestMatcher(this.adminServer.path("/instances/*"),
HttpMethod.DELETE.toString()),
new AntPathRequestMatcher(this.adminServer.path("/actuator/**"))
))
.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600));
// Required to provide UserDetailsService for "remember functionality"
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
auth.inMemoryAuthentication().withUser(security.getUser().getName())
.password("noop" + security.getUser().getPassword()).roles("USER");
然后对应的设置登录的账号密码
spring.security.user.name=user
spring.security.user.password=123456
然后访问Admin管理页面
输入账号密码后可以进入,但是没有监控的应用了
原因是被监控的服务要连接到Admin服务端也是需要认证的
我们在客户端配置连接的账号密码即可
重启后访问Admin服务管理页面
搞定
5.注册中心
实际开发的时候我们可以需要涉及到的应用非常多,我们也都会把服务注册到注册中心中,比如nacos,Eureka等,接下来我们看看如何通过注册中心来集成客户端。就不需要每个客户端来集成了。
变为下面的场景
那么我们需要先启动一个注册中心服务,我们以Nacos为例
然后访问下Nacos服务
暂时还没有服务注册,这时我们可以注册几个服务,用我之前写过的案例来演示。
每个服务处理需要添加Nacos的注册中心配置外,我们还需要添加Actuator的配置
然后启动相关的服务,可以看到相关的服务
然后我们需要配置下Admin中的nacos
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.bobo</groupId>
<artifactId>ActuatorDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bobo</groupId>
<artifactId>AdminServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>AdminServer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring-cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
spring.application.name=spring-boot-admin-server
spring.cloud.nacos.discovery.server-addr=192.168.56.100:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
启动服务,我们就可以看到对应的服务了
要查看服务的详细监控信息,我们需要配置对应的Actuator属性
好了注册中心处理这块就介绍到这里
6.邮件通知
如果监控的服务出现了问题,下线了,我们希望通过邮箱通知的方式来告诉维护人员,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
然后配置对应的邮箱信息
# 使用的邮箱服务 qq 163等
spring.mail.host=smtp.qq.com
# 发送者
spring.mail.username=279583842@qq.com
# 授权码
spring.mail.password=rhcqzhfslkwjcach
#收件人
spring.boot.admin.notify.mail.to=1226203418@qq.com
#发件人
spring.boot.admin.notify.mail.from=279583842@qq.com
发送短信开启
然后启动服务
然后我们关闭服务然后查看服务和邮箱信息
好了对应的邮箱通知就介绍到这里,其他的通知方式可以参考官方网站
springbootadmin微服务监控管理
...项目:https://github.com/codecentric/spring-boot-admin功能特性SpringBootAdmin为注册的应用程序提供以下功能:显示健康状况显示详细信息,例如JVM和内存指标mi 查看详情
springbootadmin微服务监控管理
...项目:https://github.com/codecentric/spring-boot-admin功能特性SpringBootAdmin为注册的应用程序提供以下功能:显示健康状况显示详细信息,例如JVM和内存指标micrometer.io指标数据源指标缓存指标显示构建信息编号关注并下载日志... 查看详情
保姆级教你三字诀15天玩会linux系统-避免踩坑!!!收藏不亏
目录我适合学Linux吗?一、学会需要多久二、进入学习瓶颈期该怎么办1.15天内的瓶颈期三字诀,简、减、重2.15天后的瓶颈期-读总结我适合学Linux吗?提示:这是学习Linux最重要一个问题有些朋友,学Linux,... 查看详情
使用springbootadmin监控应用状态(代码片段)
1SpringBootActuatorSpringBootActuator是SpringBoot提供的对应用的自省和监控功能,如健康检查,审计,指标收集,HTTP跟踪等,可以帮助开发和运维人员监控和管理SpringBoot应用。该模块采集应用的内部信息,并暴露... 查看详情
教程万字长文保姆级教你制作自己的多功能qq机器人(代码片段)
...现存在部分图片缺失,可以访问原文:万字长文保姆级教你制作自己的多功能QQ机器人-小锋学长生活大爆炸目录前言功能清单免费领取轻量应用云服务器SSH连接服务器常见Ubuntu软件安装与问题修复搭建mirai环... 查看详情
springboot监控-springbootadmin(代码片段)
01:SpringBoot高级–SpringBoot监控02:SpringBoot监控-SpringBootAdmin1.SpringBootAdmin使用游览器地址栏访问SpringBoot的监控信息太繁琐了,所以SpringBootAdmin就诞生了,以UI界面的方式来显示监控信息。SpringBootAdmin说明:SpringBootAdmi... 查看详情
springcloud微服务监控springbootadmin
1.简介SpringBootAdmin是一个管理和监控SpringBoot应用程序的开源软件。SpringBootAdmin分为Server端和Client端,SpringBootAdminUI部分使用AngularJs将数据展示在前端。2.工程架构EurekaServer:服务注册中心,端口为8761。AdminServer:用于对微服务系... 查看详情
实战:使用springbootadmin实现运维监控平台
...性能数据呢?在这样的背景下,就诞生了另一个开源软件SpringBootAdmin。下面就来介绍什么是SpringBootAdmin以及如何使用SpringBootAdmin搭建完整的运维监控平台。一、什么 查看详情
springcloud-springbootadmin服务监控(十三)
springcloud笔记推荐文章前言SpringBootAdmin是一个管理和监控你的SpringBoot应用程序的应用程序。这些应用程序通过SpringBootAdminClient(通过HTTP)注册或者使用SpringCloud(例如Eureka)发现。UI只是SpringBootActuator端点上的一个AngularJs应用程... 查看详情
重学springboot系列应用程序监控管理(代码片段)
...缓存改变服务路径开启跨域访问定制Metrics信息定制EndPointSpringBootAdmin界面化监控SpringBootAdmin介绍创建SpringBootAdmin服务端集成SpringBootAdmin客户端Actuator应用监控快速入门SpringBootActuator简介SpringBoot作为构建微服务节点的方案,一... 查看详情
springbootadmin2实例状态监控详解(代码片段)
其他相关文章:SpringBootAdmin参考指南SpringBootAdmin服务离线、不显示健康信息的问题SpringBootAdmin2@EnableAdminServer的加载SpringBootAdmin2AdminServerAutoConfiguration详解在微服务中集成SpringBootAdmin的主要作用之一就是用来监控服务的实例... 查看详情
springbootadmin2.x监控的服务context-path问题
在使用SpringBootAdmin进行监控时,如果被监控的服务没有加context-path的话是不会有任何问题的,一旦服务加了context-path的配置,监控就会失败。下图是正常情况的显示:我们给被监控的服务增加一个context-path:server.servlet.context-path... 查看详情
物联网架构成长之路(30)-springbootadmin微服务webui监控
...要观察各个微服务的运行状态,因此SpringBoot生态提供了SpringBootAdmin这个组件来实现微服务管理WEBUI。但是整体的注册中心还是基于Eureka,只是WebUI是用这个SpringBootAdmin来显示而已。具体的结构如下所示1.Eureka服务 这个没什么... 查看详情
使用springbootadmin监控springcloud微服务
本文基于SpringCloud的环境和配置上增加配置信息,而不是从0开始的配置。一、搭建admin服务端1、引入pom<properties><spring-boot-admin-starter-client.version>1.5.6</spring-boot-admin-starter-client.version><spring-boot-admin 查看详情
springbootadmin
转SpringBootAdmin的使用 作者杜琪关注2015.12.2517:30*字数1803阅读16569评论21喜欢55上一篇文章中了解了SpringBoot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的... 查看详情
保姆级教程10张图学会抓包神器fiddler小白都会系列(代码片段)
...请求数据及规律。2.测试分析bug是前端还是后端。3.实时监控网络活动4.模拟接口mock,调试前 查看详情
springcloud第十三篇|springbootadmin服务监控
本文是SpringCloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文:SpringCloud第一篇|SpringCloud前言及其常用组件介绍概览SpringCloud第二篇|使用并认识Eureka注册中心SpringCloud第三篇|搭建高可用Eureka注册中心SpringCloud... 查看详情
skywalking与springbootadmin区别
参考技术A作用不一样。根据查询相关公开信息,skywalking是一个apm系统,包含监控、追踪、并拥有故障诊断能力的分布式系统。springbootadmin是一个开源的社区项目,用于管理和监控应用程序的软件。 查看详情