【Springcloud】Actuator服务监控

【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-clientboot: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();}@Overrideprotected 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: ruoyipassword: 123456boot: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);}@Overrideprotected 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.mzph.cn/news/73730.shtml

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

相关文章

【NLP的python库(02/4) 】:Spacy

一、说明 借助 Spacy&#xff0c;一个复杂的 NLP 库&#xff0c;可以使用用于各种 NLP 任务的不同训练模型。从标记化到词性标记再到实体识别&#xff0c;Spacy 还生成了精心设计的 Python 数据结构和强大的可视化效果。最重要的是&#xff0c;可以加载和微调不同的语言模型以适…

代码质量保障第2讲:单元测试 - 浅谈单元测试

代码质量保障第2讲&#xff1a;单元测试 - 浅谈单元测试 本文是代码质量保障第2讲&#xff0c;浅谈单元测试。单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。这是基础&#xff0c;所以围绕着单元测试&#xff0c;我从…

HTTP代理协议原理分析

HTTP代理协议是一种常见的网络协议&#xff0c;它可以在网络中传递HTTP协议的请求和响应。本文将介绍HTTP代理协议的分析和原理&#xff0c;包括HTTP代理的工作流程、HTTP代理的请求和响应格式、HTTP代理的优缺点等方面。 一、HTTP代理的工作流程 HTTP代理的工作流程如下&#…

通过idea实现springboot集成mybatys

概述 使用springboot 集成 mybatys后&#xff0c;通过http请求接口&#xff0c;使得通过http请求可以直接直接操作数据库&#xff1b; 完成后端功能框架&#xff1b;前端是准备上小程序&#xff0c;调用https的请求接口用。简单实现后端框架&#xff1b; 详细 springboot 集…

【React 】useLayoutEffect 和 useEffect的区别

useLayoutEffect和useEffect是React中常用的两个Hook&#xff0c;它们的主要区别在于触发时机。 useEffect会在渲染完成后异步执行&#xff0c;不会阻塞浏览器的绘制操作。它适用于需要在组件渲染后执行副作用的情况&#xff0c;例如数据的获取、订阅事件等。它不会阻止屏幕更新…

redis zset score 求和

redis zset score 求和 local sum0 local zredis.call(‘ZRANGE’, KEYS[1], 0, -1, ‘WITHSCORES’) for i2, #z, 2 do sumsumz[i] end return sum 例子&#xff1a;lua ~$ redis-cli zadd z 1 a 2 b 3 c 4 d 5 e (integer) 5 ~$ redis-cli eval "local sum0 local zr…

Elasticsearch,Logstash和Kibana安装部署(ELK Stack)

前言 当今数字化时代&#xff0c;信息的快速增长使得各类组织和企业面临着海量数据的处理和分析挑战。在这样的背景下&#xff0c;ELK Stack&#xff08;Elasticsearch、Logstash 和 Kibana&#xff09;作为一套强大的开源工具组合&#xff0c;成为了解决数据管理、搜索和可视…

arduino - 用 arduino zero 开发板来学习理解arduino软件编程细节

文章目录 arduino - 用 arduino zero 开发板来学习理解arduino软件编程细节概述笔记实验环境不是所有的arduino工程都能在同一块开发板上编译过为啥arduino编程都是在setup()和loop()函数中实现代码?END arduino - 用 arduino zero 开发板来学习理解arduino软件编程细节 概述…

linux并发服务器 —— 多线程并发(六)

线程概述 同一个程序中的所有线程均会独立执行相同程序&#xff0c;且共享同一份全局内存区域&#xff1b; 进程是CPU分配资源的最小单位&#xff0c;线程是操作系统调度执行的最小单位&#xff1b; Linux环境下&#xff0c;线程的本质就是进程&#xff1b; ps -Lf pid&…

简单了解ARP协议

目录 一、什么是ARP协议&#xff1f; 二、为什么需要ARP协议&#xff1f; 三、ARP报文格式 四、广播域是什么&#xff1f; 五、ARP缓存表是什么&#xff1f; 六、ARP的类型 6.1 ARP代理 6.2 免费ARP 七、不同网络设备收到ARP广播报文的处理规则 八、ARP工作机制原理 …

好玩的js特效

记录一些好玩的js特效 1、鱼跳跃特效 引入jquery:https://code.jquery.com/jquery-3.7.1.min.js 源码如下&#xff1a; <!--引入jquery--> <script src"https://code.jquery.com/jquery-3.7.1.min.js"></script> <!--引入跳跃源码--> <s…

【JavaEE】_HTML

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

Java学习笔记——35多线程02

线程同步 线程同步卖票案例同步代码块同步方法块 线程安全的类StringBufferVectorHashtable Lock锁 线程同步 卖票案例 public class SellTicket implements Runnable{private int tickets10;Overridepublic void run(){while (true){if(tickets>0){System.out.println(Th…

【网络编程】IO多路复用

IO多路复用是一种高效的I/O处理方式&#xff0c;它允许单个进程能够同时监视多个文件描述符&#xff08;sockets、文件等&#xff09;&#xff0c;并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作&#xff0c;以提…

RK3568平台开发系列讲解(音视频篇)H264 的编码结构

🚀返回专栏总目录 文章目录 一、H264 的编码结构1.1、帧类型1.2、GOP1.3、Slice沉淀、分享、成长,让自己和他人都能有所收获!😄 📢视频编码的码流结构其实就是指视频经过编码之后得到的二进制数据是怎么组织的,换句话说,就是编码后的码流我们怎么将一帧帧编码后的图像…

数据结构学习系列之顺序表的两种删除方式

方式1&#xff1a;在顺序表的末端删除所存储的数据元素&#xff0c;代码如下&#xff1a;示例代码&#xff1a; int delete_seq_list_1(list_t *seq_list){if(NULL seq_list){printf("入参为NULL\n");return -1;}if(0 seq_list->count){printf("顺序表为空…

数据结构学习系列之顺序表的两种插入方式

方式1&#xff1a;在顺序表末端插入数据元素&#xff0c;代码如下&#xff1a;示例代码&#xff1a; int insert_seq_list_1(list_t *seq_list,int data){if(NULL seq_list){printf("入参为NULL\n");return -1;}if(N seq_list->count){printf("顺序表已满…

通过rabbitmq生成延时消息,并生成rabbitmq镜像

通过rabbitmq生成延时消息队列&#xff0c;并生成rabbitmq镜像 整体描述1. 使用场景2. 目前问题3. 前期准备 具体步骤1. 拉取镜像2. 运行镜像3. 安装插件4. 代码支持4.1 config文件4.2 消费监听4.2 消息生产 5. 功能测试 镜像操作1. 镜像制作2. 镜像导入 总结 整体描述 1. 使用…

Stable Diffusion WebUI中COMMANDLINE_ARGS参数配置说明

Windows用户: 在webui-user.bat文件的set COMMANDLINE_ARGS=后面配置 Linux用户: 在webui-user.sh文件的export COMMANDLINE_ARGS=""引号中配置 COMMANDLINE_ARGS详细参数配置说明 配置(Configuration)-h, –help无错误显示此帮助消息并退出–config配置配置/稳…

蠕虫病毒流量分析案例

背景 某供排水集团的网络管理员对其网络的健康状况持认可态度&#xff0c;表示网络运行正常&#xff0c;没有发现异常行为。然而&#xff0c;由于网络环境变得越来越复杂&#xff0c;仅凭借传统的网络经验已经不能全面了解网络情况。因此&#xff0c;我们为供排水集团安装了Ne…