Spring boot admin可视化服务监控

Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现) Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI。(一)简介Spring Boot Admin 提供了很多功能,如显示 name、id 和 version,显示在线状态,Loggers 的日志级别管理,Threads 线程管理,Environment 管理等。(二)Spring... 阅读详情

2.3.0版本的文档

作用

监控spring boot应用的可视化组件。已经内置了漂亮的ui界面。

集成

admin分为两个组件:service和client;版本选择需要与spring boot版本对应,我选择的版本是2.3.0

admin-service 服务

1、创建一个项目作为监控服务端:service-monitor,maven依赖如下

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

    <!-- spring boot admin:包含了ui依赖和server依赖 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.3.0</version>
    </dependency>

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

既然是监控服务,那么就需要保障安全,不能“裸奔”让所有人都能访问,所以需要引入security安全框架保障安全。

2、使用@EnableAdminServer注解激活服务

@SpringBootApplication
// 启动admin
@EnableAdminServer
public class ServiceMonitorApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceMonitorApplication.class, args);
    }
}

3、security安全配置

官方文档有详细的讲解和代码(我的这个配置就是照搬的)

@Configuration(proxyBeanMethods = false)
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private AdminServerProperties adminServer;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 配置认证成功的处理类,绑定 adminServer 的目标地址
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(this.adminServer.path("/"));

        http.authorizeRequests(authorizeRequests ->
                // admin 的静态资源不做校验
                authorizeRequests.antMatchers(adminServer.path("/assets/**")).permitAll()
                        .antMatchers(adminServer.path("/login")).permitAll()
                        // 其他资源都需要认证
                        .anyRequest().authenticated()
        ).formLogin(formLogin ->
                // 指向 admin 的登录页面,而不是 security 默认的登录页面
                formLogin.loginPage(adminServer.path("/login"))
                        .successHandler(successHandler)
        ).logout(logout ->
                // 指向 admin 的退出接口
                logout.logoutUrl(adminServer.path("/logout"))
        ).httpBasic(
                Customizer.withDefaults()
        ).csrf(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)
        );
    }

}

4、这里为了简单,直接配置用户名密码,正式环境中可以通过security实现数据库用户的认证、或者sso的用户认证等复杂认证功能。

spring:
  application:
    name: service-monitor
  security:
    user:
      name: user
      password: f83e7a83-5a92-4221-8198-f0066557f0b5
      roles: USER

5、启动项目并访问:有security的存在,访问http://localhost:8080会跳转到登录页面

输入配置的用户名密码后,进入系统:

admin-Client 服务

1、创建一个普通的spring boot项目,例如:service-gateway,maven依赖如下:

<dependencies>
    <!-- 网关依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

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

2、甚至都不需要其他代码,直接配置一下就可以了

server:
  port: 8081

spring:
  application:
    name: gateway
  boot.admin.client:
    # admin-service的地址
    url: "http://localhost:8080"
    # admin-service中开启了登录认证,所以需要配置用户名密码
    username: user
    password: f83e7a83-5a92-4221-8198-f0066557f0b5
# 开启节点信息
management:
  endpoints:
    # 默认情况下,只有info和health节点通过http协议公布出去,这里配置*,表示所有的节点都公布
    web:
      exposure:
        include: "*"
  server:
    # 节点使用单独的端口,区分业务端口
    port: 8181
# 日志文件配置:路径和名称,要与logback.xml中配置的一致,admin-service中才能成功获取应用日志
logging:
  file:
    name: logs/gateway/info.log

上面的配置中,配置了日志的路径和名称,一定要与logback.xml中配置的输出日志路径和名称一致;这样客户端就能通过actuator将env注册到admin-server中,admin-server拿到logging.file.name就能来实时获取日志,方便在admin-server中查看。

(注意:客户端开启了 jmx和actuator 等对外暴露信息的功能时,客户端服务不要直接对外暴露)

3、启动项目,就发现gateway客户端注册到admin中了。

再次查看admin的页面:

 监控页面

如上图,进入监控页面就能看到内存占用、线程数、cpu利用率、垃圾回收情况等基本监控信息。在性能页面,通过添加指标可以监控服务性能。

实时日志

客户端配置了logging.file.name后,日志菜单下就会多一个“日志文件”的菜单,用于浏览实时日志;当时我就想,他是怎么实现的呢?难道是每次都全量拉取日志过来么?打开F12,发现是每秒钟发送一次请求拉取最新的日志,研究了请求,如果没有新的日志,响应体是空的,如果有新的日志,只会响应最新的日志,前面显示出来了的日志是没有在响应中的。

那是怎么实现的呢?通过仔细研究请求头和响应头:

发现每次请求都携带了Range属性,这个属性就是用于指定从目标文件的什么位置加载数据;而响应头中响应当前已经加载到的数据位置;Range属性多用于大文件的多请求批量下载。

看了之后恍然大悟。

admin-server的通知扩展

当监控的服务实例状态发送变化,admin-server中可以有通知功能,内置了例如email、消息等通知,可以查看官方文档的介绍,这里就不详细讲解。在某些场景下,是需要我们自定义通知功能的,自定义的通知可以实现 AbstractStatusChangeNotifier 抽象类,或者 Notifier 接口。

  • 实现 AbstractStatusChangeNotifier 抽象类
@Component
public class StatusNotifier extends AbstractStatusChangeNotifier {

    private final Logger log = LoggerFactory.getLogger(getClass());

    public StatusNotifier(InstanceRepository repository) {
        super(repository);
    }

    /**
     * 执行通知
     * 通过查看源码发现,只有在 admin 中注册过了的实例,才会触发调用这个方法,所以新注册的服务进不了这里
     *
     * @param event    事件
     * @param instance 实例
     * @return
     */
    @Override
    protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
        return Mono.fromRunnable(() -> {
            // 查看 AbstractStatusChangeNotifier 源码,只有 InstanceStatusChangedEvent 事件才会调用到这里
            InstanceStatusChangedEvent sce = (InstanceStatusChangedEvent) event;
            // 实例状态变更事件
            StatusInfo statusInfo = sce.getStatusInfo();
            if (statusInfo.isDown()) {
                // 服务掉线,心跳丢失
                log.info(">>>>>>>>>> {} 服务的实例 {} 掉线(心跳丢失),服务地址:{}", instance.getRegistration().getName(),
                        instance.getId(), instance.getRegistration().getServiceUrl());
            } else if (statusInfo.isOffline()) {
                // 服务离线了
                log.info(">>>>>>>>>> {} 服务的实例 {} 离线(服务宕机或者停止),服务地址:{}", instance.getRegistration().getName(),
                        instance.getId(), instance.getRegistration().getServiceUrl());
            } else if (statusInfo.isUnknown()) {
                // 未知异常
                log.info(">>>>>>>>>> {} 服务的实例 {} 出现未知异常,服务地址:{}", instance.getRegistration().getName(),
                        instance.getId(), instance.getRegistration().getServiceUrl());
            } else if (statusInfo.isUp()) {
                // 服务重新上线
                log.info(">>>>>>>>>> {} 服务的实例 {} 重新上线了,服务地址:{}", instance.getRegistration().getName(),
                        instance.getId(), instance.getRegistration().getServiceUrl());
            } else {
                // 其他情况
                log.info(">>>>>>>>>> {} 服务的实例 {} 出现未知状况,服务地址:{}", instance.getRegistration().getName(),
                        instance.getId(), instance.getRegistration().getServiceUrl());
            }
        });
    }
}
  •  实现 Notifier 接口
@Component
public class AppRegistryNotifier implements Notifier {

    private final Logger log = LoggerFactory.getLogger(getClass());

    @Override
    public Mono<Void> notify(InstanceEvent event) {
        return Mono.fromRunnable(() -> {
            if (event instanceof InstanceRegisteredEvent) { // 新的 app 实例注册事件
                InstanceRegisteredEvent re = (InstanceRegisteredEvent) event;
                log.info(">>>>>>>>>> {} 服务启动了新的实例,实例id= {},服务地址:{}", re.getRegistration().getName(),
                        re.getInstance(), re.getRegistration().getServiceUrl());
            }
        });
    }
}

 两种方式完成的功能不一样,依据需求自行选择即可。

 

如何判断一个程序员的技术比你强? 技术大佬与普通程序员之间存在明显的认知差异:前者善于将复杂问题抽象为经典计算机科学问题,用声明式代码替代过程式逻辑;对异常和边界条件极度敏感,具备系统化的排查方法论;代码追求高可读性而非炫技,且执着于底层原理研究。这种技术压制体现在解决问题的确定性上——通过扎实的理论功底和工程直觉,快速定位问题本质,而非依赖试错或搜索。真正的技术实力源于对底层逻辑的深刻理解和对系统稳定性的敬畏。 阅读详情

相关推荐

企业固定资产管理的SAP实战:FICO模块配置与折旧范围设置详解

本文深入解析了SAP FICO模块中固定资产会计配置的核心实践,重点阐述了折旧范围的设计哲学与配置逻辑。通过详解折旧表、折旧范围、资产分类及折旧码等关键配置步骤,指导企业如何搭建满足多会计准则(如CAS、IFRS)与税务要求的资产管理体系,实现资产购置、折旧计提与报废清理的自动化与精准化。

wdx01234567的博客 728

【微服务】[SpringBootAdmin]【实战】----spring boot3整合服务监控平台Spring Boot Admin

摘要 Spring Boot Admin(SBA)是专为Spring Boot应用设计的轻量级监控工具,通过Actuator端点提供可视化监控界面,支持JVM状态、健康检查、日志查看等功能,但不支持非Spring Boot应用。与之相比,SkyWalking是分布式链路追踪与APM平台,适用于全链路性能监控。 本文详细介绍了Spring Boot 3整合Spring Boot Admin的实践方法: Admin Server:独立服务,需添加@EnableAdminServer注解,集成Nacos、Secu

朱朱博客,分享技术 1661

Cloudflare 5秒盾逆向实战:13次请求背后的Python补环境框架搭建指南

本文深入解析了如何通过Python构建浏览器环境模拟框架,以应对Cloudflare 5秒盾等现代Web防护机制。文章详细拆解了其背后复杂的13次请求链,涵盖了JavaScript执行引擎集成、DOM事件模拟、网络请求控制及Canvas指纹等环境检测的完整实现方案,为自动化数据采集和逆向工程提供了实战指南。

gold的博客 350

Spring cloud admin 健康检查

目录 概述 Spring Cloud Admin 配置 Admin 服务端 微服务端 总结: 概述 Spring cloud admin 健康检查,就是对微服务的一种监控。所有微服务将自己的服务情况上报给Spring cloud admin Spring Cloud Admin 配置 Admin 服务端 1. 常见一个单独的微服务来做为spring Cloud Admin的服务,专门用来做监控的 2. 依赖包(发现可以不用配置ui的jar包,也是可以访问的,不信试一试) .

水月青花 1287

Linux下离线安装Google Chrome

目录背景一、下载并安装Google Chrome二、下载并安装依赖包1.libvulkan.so.1()(64bit)2.读入数据总结 背景 项目中服务器被要求不能连接外网,不能直接联网安装,所以需要下载Google Chrome安装包和依赖包,然后离线安装。 linux下步骤都一样,不管ubuntu还是centos只是需要下载对应系统的文件包即可。 本机系统:CentOS 7 一、下载并安装Google Chrome 官方下载地址http://www.google.cn/chrome/browser/d

ancientapesman的博客 1万+

【零基础入门哈希签名架构,从Lamport到SPHINCS+】第二集 哈希签名树 Merkle Tree Authentication

在第一集中,我们一直忽略了一个问题。设想一下,假如有一个Hacker(黑客),在截获到Sender发送给Receiver的公钥之后,把这个公钥改成Hacker自己的公钥,然后再发给Receiver,那么Receiver就会误认为这是Sender的公钥。所以我们之前所说放方案,其安全性都需要建立在一个前提下:Receiver需要确认公钥确实是Sender发出的。

m0_50572808的博客 2454

springbootadmin自定义通知

定义一个通知类继承AbstractStatusChangeNotifier,并实现doNotifier @Slf4j @Service public class SmsNotifier extends AbstractStatusChangeNotifier { @Override protected void doNotify(ClientApplicationEve...

qq_36934544的博客 2099

第47节:cesium 热力图效果(含源码+视频)

cesium 热力图效果

qq_29384639的博客 1676

Spring Boot Admin 使用钉钉机器人通知服务的上下线以及健康检查

SpringbootAdmin使用钉钉通知服务上线下线的思路与总结

qq_30505421的博客 1490

SCTPPortScan SCTP协议端口扫描、关联地址识别、传输状态检测

Windows:Winsock2+SCTP扩展)。- **SCTP API封装**:Linux下直接调用`socket()`、`connect()`、`getsockopt()`等系统函数,解析`struct sctp_status`和`struct sctp_paddrinfo`获取状态和关联地址。qDebug() << "开始SCTP扫描:" << ipList.size() << "个IP," << ports.size() << "个端口,共" << m_totalTasks << "个任务";

寒寒豆豆软件公司的博客 93

Centos7系统添加中文支持(附中文语言包)

这里以centos7.6为例,在安装系统是没有选择中文,之后如果需要添加中文支持。在命令行执行后,会提示启动图形模式失败,转为启动文本模式。文本模式其实和图形模式差不多,操作需要用键盘而不是鼠标。在弹窗后,通过上下键选择Chinese(P.R of China) - 中文(简体):然后,按Tab键选择Yes,点击回车。rebootlocale可以看到系统语言已经变成了zh_CN.utf-8:之后,服务器上的中文名称就可以正常显示正常了。

悦分享 684

Spring Boot Admin 监控告警

Spring Boot Admin 监控告警 要进行监控,需要两个Project,一个是Admin Server端,负责监控Spring boot的项目,另一个是Admin Client端,是被监控的Spring boot服务。当然也可以一个项目同时做服务端和客户端,监控自己的本项目服务; 1.这里提供的是两个服务,首先新建一个server端的springboot项目 2.server端pom文件配置 <?xml version="1.0" encoding="UTF-8"?> <pro

weijx_的博客 1292

中科大大数据学院2023年保研夏令营机试题目【无offer,直接放题了~】(2023.07.22下午14:35-17:35考试)

给定一串数字,最后一个数是0表示结尾,表示数字串的终止,为无效数字。将该数字串存储在双向链表中,判断是否为回文串,若是,则输出Yes,否则输出No.

m0_51339444的博客 1922

Spring Boot Admin 集成自定义监控告警------钉钉机器人

1.本文基于 Spring Boot Admin 2.0.1 和1.5.7版本有所出入,通过查看别的集成源码,新增集成钉钉机器人 2.钉钉自定义机器人,参考文档 https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.64Ddtm&treeId=257&articleId=105735&docType...

rubbertree的专栏 2618

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

springboot可视化界面服务监控Spring Boot Admin

服务端搭建 创建springboot server项目 引进jar包 <!-- springboot admin server --> <dependency> <groupId>de.codecentric</groupId> <artifactId>sp...

qq_25073261的博客 1381

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring Boot Admin微服务治理实践

本文深入探讨Spring Boot Admin在微服务治理中的实践应用,包括服务注册发现、配置管理、监控告警等关键技术点。通过详细的技术解析和实践示例,帮助开发者构建完整的微服务治理体系。@Component@Override// 服务注册计数器// 服务注销计数器// 配置变更计数器// 服务健康状态= null) {= null) {= null) {// 返回服务健康状态 (1=健康, 0=不健康)return 1.0;

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 417

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

一文带你了解Spring Actuator

随着微服务架构的普及,Spring Boot 已经成为Java开发人员的首选框架。然而,随着应用的规模不断扩大, 如何有效地监控和管理这些应用成为一个重要的问题。Spring Boot Actuator的出现,为开发人员提供了一个解决方案。本文将详细介绍Spring Boot Actuator的功能、工作原理、使用场景以及应用示例,帮助读者更好地理解和掌握这一工具。

tangjieqing的博客 1069

【SpringCloud系列-09】服务监控与告警

本文深入探讨了Spring Cloud微服务架构中的监控与告警方案。主要内容包括: 微服务监控面临的四大挑战:服务分散性、数据关联性、告警复杂性和指标多样性 现代监控体系设计理念:分层监控、指标驱动、主动发现和可观测性 技术栈选型对比,包括Spring Boot Admin、Prometheus、Grafana等主流方案 Spring Boot Admin源码解析,涵盖其核心架构、服务发现机制和指标收集原理 告警规则设计,通过FilteringNotifier实现灵活的通知机制 文章为构建完整的微服务监控体

专注后端技术架构,AI技术分享 812

微服务系列:服务监控 Spring Boot Actuator 和 Spring Boot Admin

服务监控就是监视当前系统应用状态、内存、线程、堆栈、日志等等相关信息,主要目的在服务出现问题或者快要出现问题时能够准确快速地发现以减小影响范围。 服务监控在微服务改造过程中的重要性不言而喻,没有强大的监控能力,改造成微服务架构后,就无法掌控各个不同服务的情况,在遇到调用失败时,如果不能快速发现系统的问题,对于业务来说就是一场灾难。

zhang33565417的博客 2415

springboot集成各数据库组件demo(phoenix/activemq/websocket/clickhouse/presto/tidb/redis各模式)

清单如下 1. netty-websocket 2. spring-boot-admin-client、springboot admin server图形界面管理 3. activemq 4. mysql 5. presto(hive/kudu) 6. phoenix 7. clickhouse 8. swagger2 9. okhttp 10. Log4j2 11. poi excel 部分包...

qq_25073261的博客 679

spring boot admin 2.0结合eureka监控spring boot服务

最近在学习spring cloud相关的知识,对服务的监控这一块在网上找到了spring boot admin这个项目,网上的资料比较少,还没看到完整的2.0版本的示例。自己学习了下,写了个简单的demo。特此记录一下配置的过程。 spring boot admin 为Spring Boot...

154

springCloud系列——actuator和springbootAdmin集成安全框架security实现服务监控

一、actuator: 其实boot提供了actuator来实现服务监控,只是这种方式比较麻烦,要自己去请求不同的接口,查看json信息来判断服务的情况. 请求不同的端点(路径),查看不同的监控信息。 二、actuator虽然可以实现,但是没有可视化界面,所以就有了springbootAdmin,提供UI界面来监控服务信息。 三、再集成安全框架,不是谁都可以看这些信息的,除非指定账户密码: 四、...

zhangCheng的博客 1379

【亲测免费】 Dubbo Admin:Dubbo服务可视化管理的利器

Dubbo Admin:Dubbo服务可视化管理的利器 项目介绍 Dubbo Admin 是专为Dubbo服务设计的管理控制台,旨在提供更直观的服务可视化管理体验。作为Apache Dubbo生态系统的一部分,Dubbo Admin不仅支持最新的Dubbo3版本,还兼容2.7.x、2.6.x和2.5.x等旧版本。通过Dubbo Admin,用户可以轻松监控和管理Dubbo服务的运行状态,进行配置管...

gitblog_00106的博客 622

Springboot使用AdminUi可视化监控中心

官网https://codecentric.github.io/spring-boot-admin/2.4.3/#getting-started 创建一个服务端配置 <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.4.3&lt

qq_46341024的博客 1743

Spring Boot Admin服务监控详解

本文详细介绍Spring Boot Admin在微服务架构中的应用,包括其安装配置、安全认证、监控功能和最佳实践。Spring Boot Admin作为Spring Boot应用的管理和监控平台,提供了友好的UI界面,帮助开发者监控和管理Spring Boot应用的各个指标。Spring Boot Admin的基本概念和架构如何搭建和配置Admin Server安全配置的最佳实践监控功能的详细使用高级特性和定制化选项常见问题的解决方案。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 765
上一篇: darknet + yolov4 训练自定义数据集 + windows环境搭建
下一篇: java实现排列组合算法
网上搬砖
博客等级 码龄6年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值