【Springcloud】Actuator服务监控

news2024/12/27 11:16:53

【Springcloud】Actuator服务监控

  • 【一】基本介绍
  • 【二】如何使用
  • 【三】端点分类
  • 【四】整合Admin-Ui
  • 【五】客户端配置
  • 【六】集成Nacos
  • 【七】登录认证
  • 【八】实时日志
  • 【九】动态日志
  • 【十】自定义通知

【一】基本介绍

(1)什么是服务监控
监视当前系统应用状态、内存、线程、堆栈、日志等等相关信息,主要目的在服务出现问题或者快要出现问题时能够准确快速地发现以减小影响范围。

(2)为什么要使用服务监控
服务监控在微服务改造过程中的重要性不言而喻,没有强大的监控能力,改造成微服务架构后,就无法掌控各个不同服务的情况,在遇到调用失败时,如果不能快速发现系统的问题,对于业务来说就是一场灾难。

(3)spring boot actuator 服务监控接口
actuator是监控系统健康情况的工具。

(4)spring boot admin 服务监控管理
Spring Boot Admin是一个针对spring-boot的actuator接口进行UI美化封装的监控工具。他可以:在列表中浏览所有被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各种配置信息(比如数据源、缓存列表和命中率)等,还可以直接修改logger的level。

【二】如何使用

(1)添加依赖

<!-- SpringBoot Web -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- SpringBoot Actuator -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(2)在application.yml配置暴露所有监控端点

management:
  endpoints:
    web:
      exposure:
        include: '*'

(3)启动后访问http://localhost:9100/actuator,返回正确数据表示测试通过。

【三】端点分类

/beans 显示所有的Spring bean列表
/caches 显示所有的缓存相关信息
/scheduledtasks 显示所有的定时任务相关信息
/loggers 显示所有的日志相关信息
/configprops 显示所有的配置信息
/env 显示所有的环境变量信息
/mappings 显示所有控制器相关信息
/info 显示自定义用户信息配置
/metrics 显示应用指标相关信息
/health 显示健康检查状态信息,up表示成功 down表示失败
/threaddump 显示程序线程的信息

【四】整合Admin-Ui

(1)添加依赖

<!-- SpringBoot Admin -->
<dependency>
	<groupId>de.codecentric</groupId>
	<artifactId>spring-boot-admin-starter-server</artifactId>
	<version>${spring-boot-admin.version}</version>
</dependency>

(2)启动类添加@EnableAdminServer注解

(3)测试访问
浏览器访问(http://localhost:9100 (opens new window))可以看到以下界面。

在这里插入图片描述

【五】客户端配置

(1)添加依赖

<!-- SpringBoot Admin Client -->
<dependency>
	<groupId>de.codecentric</groupId>
	<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

<!-- SpringBoot Actuator -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(2)配置服务端地址

spring:
  application:
    name: ruoyi-admin-client
  boot:
    admin:
      client:
        url: http://localhost:9100

【六】集成Nacos

在使用Admin时,如果没有注册中心,需要各个客户端填写Admin服务端地址,而Admin是支持Nacos、Eureka、ZooKeeper等组件,可以直接从注册中心拉取服务实例

(1)添加依赖

<!-- springcloud alibaba nacos discovery -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

(2)项目yml配置添加nacos地址,包含客户端和服务端

spring: 
  application:
    # 应用名称
    name: ruoyi-xxxx 
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848

【七】登录认证

(1)添加依赖

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

(2)配置spring security权限

package com.ruoyi.modules.monitor.config;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
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;

/**
 * 监控权限配置
 * 
 * @author ruoyi
 */
@Configuration
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter
{
    private final String adminContextPath;

    public WebSecurityConfigurer(AdminServerProperties adminServerProperties)
    {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");

        http
            .headers().frameOptions().disable()
            .and().authorizeRequests()
            .antMatchers(adminContextPath + "/assets/**"
                , adminContextPath + "/login"
                , adminContextPath + "/actuator/**"
                , adminContextPath + "/instances/**"
            ).permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin().loginPage(adminContextPath + "/login")
            .successHandler(successHandler).and()
            .logout().logoutUrl(adminContextPath + "/logout")
            .and()
            .httpBasic().and()
            .csrf()
            .disable();
    }
}

(3)在ruoyi-monitor-dev.yml配置用户,默认账户ruoyi/123456

# spring
spring: 
  security:
    user:
      name: ruoyi
      password: 123456
  boot:
    admin:
      ui:
        title: 若依服务状态监控

【八】实时日志

Spring Boot Admin提供了基于Web页面的方式实时查看服务输出的本地日志,前提是服务中配置了logging.file.name

以ruoyi-xxxx模块为例,bootstrap.yml配置logging.file.name配置

logging:
  file:
    name: logs/${spring.application.name}/info.log

进入日志-日志文件查看实时日志,效果如下
在这里插入图片描述

【九】动态日志

Spring Boot Admin支持动态修改日志级别。

进入日志-日志配置修改日志级别,效果如下

在这里插入图片描述

【十】自定义通知

可以通过添加实现Notifier接口的Spring Beans来添加您自己的通知程序。

import org.springframework.stereotype.Component;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent;
import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
import reactor.core.publisher.Mono;

/**
 * 通知发送配置
 * 
 * @author ruoyi
 */
@Component
public class RuoYiStatusChangeNotifier extends AbstractStatusChangeNotifier
{
    public RuoYiStatusChangeNotifier(InstanceRepository repository)
    {
        super(repository);
    }

    @Override
    protected Mono<Void> doNotify(InstanceEvent event,
            de.codecentric.boot.admin.server.domain.entities.Instance instance)
    {
        return Mono.fromRunnable(() -> {
            if (event instanceof InstanceStatusChangedEvent)
            {
                String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
                switch (status)
                {
                    // 健康检查没通过
                    case "DOWN":
                        System.out.println("发送 健康检查没通过 的通知!");
                        break;
                    // 服务离线
                    case "OFFLINE":
                        System.out.println("发送 服务离线 的通知!");
                        break;
                    // 服务上线
                    case "UP":
                        System.out.println("发送 服务上线 的通知!");
                        break;
                    // 服务未知异常
                    case "UNKNOWN":
                        System.out.println("发送 服务未知异常 的通知!");
                        break;
                    default:
                        break;
                }
            }
        });
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/987694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

情侣头像微信小程序源码 朋友圈背景小程序源码 动态壁纸微信小程序源码

壁纸和情侣头像&#xff0c;朋友圈素材都可以做&#xff0c;带视频教程。 搭建也不难&#xff0c;纯前端无后台。直接开发者工具调试前端&#xff0c;绑定合法域名&#xff0c;流量主功能也是在前端替换。 无需服务器域名直接上手&#xff01;&#xff01;&#xff01;

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要 1. 尾翼的贡献2. 垂尾是航向静稳定性的最大来源3. 推进系统对航向的贡献3.1 螺旋桨3.2 喷气式 4. 参考资料 1. 尾翼的贡献 平尾对航向静稳定性的影响机理与机翼相同&#xff0c;由于尺寸小&#xff0c;通…

AI教程 | 用Midjourney制作AI模特和换装的保姆级教程

Hi! 大家好&#xff0c;我是专注于AI项目实战的赤辰。 昨天电商朋友过来交流&#xff0c;聊到他最近新开了一家淘宝店&#xff0c;在没有请任何员工的情况下&#xff0c;他一个人用AI工具完成了店铺取名&#xff0c;商品文案&#xff0c;店铺logo&#xff0c;主图设计&#xf…

ASO优化之阅读并回复应用的评论

回复评论对于与用户保持牢固的关系非常重要。如果时间有限&#xff0c;优先回复负面评论&#xff0c;可以向其他用户保证&#xff0c;我们正在积极解决应用的问题&#xff0c;从而提高转化率。 1、逻辑与沟通要清晰。 首先&#xff0c;无论他们的反馈是正面还是负面&#xff0…

【c++】如何有效地利用命名空间?

​ &#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言什么是命名空间&#xff1f;命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

51单片机-直流电机学习

简介 51单片机采用的是5V的直流电机 轴长&#xff1a;8mm 轴径&#xff1a;2mm 电压&#xff1a;1-6V 参考电流&#xff1a;0.35-0.4A 3V 转速&#xff1a;17000-18000 转每分钟 他的组成&#xff1a; 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止…

【Spring】aop的底层原理

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

工作和生活中,如何用项目管理思维解决复杂的事情?

在工作和生活中&#xff0c;许多事情都可以采用项目思维方式来解决。当我们逐渐将工作和生活中的各种事务以项目的方式来处理和推进时&#xff0c;我们可能并没有意识到&#xff0c;实际上我们正在运用项目管理思维。 项目管理思维能帮助我们在面对繁杂事务时&#xff0c;理清…

DevOps到底是什么意思?

前言: 当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念。那么,到底什么是"DevOps"呢? 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具,还有人说它是一种思想。更有甚者,说它是一种哲学…

【echarts】如何修改折线图X轴每个刻度的间隔宽度,让拥挤的空间变大,所有坐标点的文案可以显示得下,Echarts x轴文本内容太长的几种解决方案

Echarts 如何修改折线图X轴每个刻度的间隔宽度&#xff0c;让拥挤的空间变大&#xff0c;所有坐标点的文案可以显示得下&#xff0c;Echarts x轴文本内容太长的几种解决方案 有以下几种方案&#xff0c;堪称最全方案&#xff1a; 1、dataZoom进行坐标的比例缩放 通过调整dataZ…

生态第五篇-调度的多维空间技术

生态第五篇-调度的多维空间技术 文章目录 生态第五篇-调度的多维空间技术前言一、什么是多维空间&#xff1f;二、实现原理1.先看效果2.如何实现 预告 前言 调度已经结束更新了本不想再更新调度技术&#xff0c;因为生态的更新计划里面有这一条所以就写一篇把 一、什么是多维…

Java“牵手”ebay商品详情数据,ebay商品详情API接口,ebayAPI接口申请指南

天猫平台商品详情接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口&#xff0c;通过…

了解Armv8.x和Armv9.x扩展

概述 Arm架构新增的功能以扩展的形式提供&#xff0c;这样Arm能够定期发布新功能&#xff0c;以响应合作伙伴的需求&#xff0c;而无需对主架构进行重大更改。 Arm 每年都会发布新的扩展。Cortex CPU 是该架构的 Arm 实现&#xff0c;其会根据发布时间使用相应的扩展。 本指…

扫描mapper包

文章目录 第一种-配置在resource目录下第二种- 直接配置java代码目录&#xff0c;在Maven中配置相关路径 第一种-配置在resource目录下 第二种- 直接配置java代码目录&#xff0c;在Maven中配置相关路径 不配置不会把mapper的xml文件编译到target文件中 <build><res…

vs2022不能加载winform界面

今天遇到vs2022加载winform界面错误&#xff0c; The service ‘Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService’ must be installed for this feature to work。 当前vs版本&#xff1a; Microsoft Visual Studio Enterprise 2022 (64 位) - Cur…

虚拟化和容器

文章目录 1 介绍1.1 简介1.2 虚拟化工作原理1.3 两大核心组件&#xff1a;QEMU、KVMQEMUKVM 1.4 发展历史1.5 虚拟化类型1.6 云计算与虚拟化1.7 HypervisorHypervisor分为两大类 1.8 虚拟化 VS 容器 2 虚拟化应用dockerdocker 与虚拟机的区别 K8Swine 参考 1 介绍 1.1 简介 虚…

【MySQL】初见数据库

目录 什么是MySQL 为什么要使用数据库 数据库基础 数据库的本质 存储引擎 常用操作 登录mysql 创建数据库 使用数据库 查看数据库 创建数据库表 查看表 向表中插入数据 查询表中数据 什么是MySQL &#x1f352;在我们服务器安装完 MySQL 服务之后&#xff0c;经…

C++核心编程--类篇

C核心编程 1.内存分区模型 C程序在执行时&#xff0c;将内存大方向分为4个区域 意义&#xff1a;不同区域存放数据&#xff0c;赋予不同的生命周期&#xff0c;更能灵活编程 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放…

通讯录怎么导入新手机?3个推荐小妙招

最近刚换了新手机&#xff0c;旧手机里的联系人太多了&#xff0c;不想在新手机上一个个重新添加。有没有什么快速简单的方法能够将通讯录导入新手机&#xff1f; 大家在更换新手机之后都是怎么导入通讯录的呢&#xff1f;换手机最重要的就是把数据进行完整转移&#xff0c;那么…

Dwg转换成PDF怎么转?来学习下这个转换小妙招

dwg转PDF格式的好处在于两种格式的兼容性和安全性不同。PDF格式本身可以包含文字、图形、图像、表格等各种信息&#xff0c;而DWG格式只包含图纸的几何图形。PDF格式是封闭的&#xff0c;有统一的标准&#xff0c;可以在任何CAD不兼容的软件里打开。而DWG格式是CAD专用的电子文…