SkyWalking 10.1.0 实战:从零构建全链路监控,解锁微服务性能优化新境界
文章目录
- 前言
- 一、集成SkyWalking
- 二、SkyWalking使用
- 三、SkyWalking性能剖析
- 四、SkyWalking 告警推送
- 4.1 配置告警规则
- 4.2 配置告警通知地址
- 4.3 下发告警信息
- 4.4 测试告警
- 4.5 慢SQL查询
- 总结
前言
在传统监控系统中,我们通过进程监控和日志分析来发现系统问题,但通常只能知道哪些服务出故障,而无法迅速定位具体原因。开发和运维人员需要手动查看日志或直接访问服务器,排查过程耗时且低效。而且,即使发现问题,也难以追溯到根本原因,导致解决过程反复。为此,基于分布式追踪的 APM 系统应运而生,帮助快速精准地定位问题,提升系统的可靠性和维护效率。
项目:MicroAdmin后台 账号密码:admin / admin

一、集成SkyWalking
SkyWalking 在 Java 语言中的接入方式采用 字节码增强(Bytecode Instrumentation)技术,属于无代码侵入(No Code Intrusion) 的 APM(应用性能监控)方案。
它通过 Java Agent 机制,在应用启动时动态植入字节码,无需修改业务代码,即可实现全链路追踪、调用链分析、性能监控等功能。
在需要监控的项目中增加JVM的启动参数,本地开发,在IDEA中设置如下:

添加JVM参数:
-javaagent:D:\soft\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=micro-dev::micro-system
-Dskywalking.collector.backend_service=127.0.0.1:11800
参数说明:
-javaagent:skywalking-agent.jar所在路径
-Dskywalking.agent.service_name=分组 + 微服务的服务名称(就是配置参数spring.application.name)
-Dskywalking.collector.backend_service=不用修改(日志收集地址的,固定端口11800)
启动项目:
项目启动成功之后,查看skywalking监控界面,如下:

登录系统,随便访问几个API接口,可以看到SkyWalking采集到了信息,说明我们的监控链路配置成功了。

二、SkyWalking使用
SkyWalking整个监控项、指标太多,就不一一说明,这里我们来追踪一个异常方法,以此来演示一下SkyWalking的强大功能。
在新增角色的时候,写了这样的一个异常代码,睡眠5s,被除数为0:

此时我们多次请求新增角色的接口,毋庸置疑新增肯定是失败的,这才是我们要的结果,目的就是借助SkyWalking排查错误,熟悉SkyWalking核心参数,能够熟练排查我们的线上系统异常问题,在SkyWalking监控中我们可以看到整个服务的评分以及调用成功率在下降。

核心参数说明:
Service Apdex(数字):当前服务的评分
Successful Rate(数字):请求成功率
Load (calls / min) 数字: 每分钟访问次数
Latency(ms): 百分比响应延时
点击该服务进入到服务内部监控界面如下:

核心参数说明:
Service Avg Response Times(ms):平均响应延时,单位ms
Service Apdex(折线图):一段时间内Apdex评分
Service Response Time Percentile (ms)折线图:服务响应时间百分比
Service Load (calls / min) 折线图: 分钟请求数
Success Rate (%)折线图:分钟请求成功百分比
Message Queue Consuming Count(折线图):消息队列消耗计数
Message Queue Avg Consuming Latency (ms)折线图:消息队列平均消耗延迟(毫秒)
Service Instances Load (calls / min):节点请求次数
Slow Service Instance (ms):每个服务实例(物理机、云主机、pod)的最大延时
Service Instance Success Rate (%):每个服务实例的请求成功率
Endpoint Load in Current Service (calls / min):每个端点(URL)的请求次数
Slow Endpoints in Current Service (ms):当前端点(URL)的最慢响应时间
Endpoint Success Rate in Current Service (%):当前端点(URL)的成功响应请求占比
仔细看这两个参数的数值:

请求成功率为0,并且最慢响应时间最大,能够很直观看到我们的接口情况。
然后我们再点击链路查看接口请求情况:

左侧:api接口列表,红色-异常请求,蓝色-正常请求
右侧:api追踪列表,api请求连接各端点的先后顺序和时间
可以看到该接口请求爆红,失败了,点击爆红的接口,可以看到错误的日志信息:

三、SkyWalking性能剖析
还是以上面的接口为例子,上面我们通过SkyWalking分析出来了,接口错误的原因:
ava.lang.ArithmeticException: / by zero 错误表示在代码中尝试进行除法运算时,除数为零。Java 中不允许任何数除以零,因为这是一个数学上的未定义操作,所以会抛出 ArithmeticException 异常
回看代码,我们可以看到代码中还设置了睡眠5s,所以接口响应时间很长,那么怎么通过SkyWalking分析出接口耗时的具体代码呢?
在【Trace Profiling】界面,新建接口任务,然后分析,即可查到耗时的代码了。

新建任务:

最大采样数:设置为1,表示端点调用一次SkyWalking agent就能监控到,最大采样数目5表示,调用接口必须5次以上 agent才能监控到。
点击上图中的新建任务后,然后继续访问这个需要分析的url,点击接口分析,就可以看见详细的代码分析页面了。

采样追踪:

上图就是我们进行性能剖析后的结果图。从左到右分别表示:栈帧名称、该栈帧总计耗时(包含其下面所有自栈帧)、当前栈帧自身耗时和监控次数,从中我们可以看到在com.micro.system.service.impl.SysRoleServiceImpl.saveRole:94 代码处,睡眠了5s,所以才导致接口请求响应慢的问题。
四、SkyWalking 告警推送
当机器或者服务出现问题时,我们会触发告警及时通知负责人,这是企业中最常见的做法,SkyWalking 也支持告警配置。
4.1 配置告警规则
修改如下的配置文件,配置自己需要的告警规则:

修改alarm-settings.yml配置文件:
rules:# 【服务响应时间规则】service_resp_time_rule:# 服务的响应时间超过【1000】毫秒的请求超过 3 次expression: sum(service_resp_time > 1000) >= 3# 每隔1分钟检测一次period: 1# 设置3分钟内容相同告警,不重复告警silence-period: 3# 配置告警信息message: 服务【{name}】在1分钟内响应时间超过1s的请求超过3次# 【服务响应成功率SLA规则】service_sla_rule:# 服务的响应成功率低于80%的次数expression: sum(service_sla < 8000) >= 1# 每隔10分钟检测一次period: 10# 设置3分钟内容相同告警,不重复告警silence-period: 3# 配置告警信息message: 服务【{name}】在10分钟内成功率低于80%的情况发生了1次# 【 服务响应时间的不同分位数规则】 #service_resp_time_percentile_rule:# 分位数超过【1000】毫秒的个数超过3个#expression: sum(service_percentile{p='50,75,90,95,99'} > 1000) >= 3# 每隔10分钟检测一次#period: 10# 设置5分钟内容相同告警,不重复告警#silence-period: 5#message: 服务【{name}】在10分钟内分位数【请求响应时间低于:50%、75%、90%、95%、99%】超过1s的请求个数超过3个# 【单个服务实例响应时间规则】service_instance_resp_time_rule:# 服务实例的响应时间超过【1000】毫秒的请求超过 2 次expression: sum(service_instance_resp_time > 1000) >= 2# 每隔10分钟检测一次period: 10# 设置5分钟内容相同告警,不重复告警silence-period: 5message: 服务实例【{name}】在10分钟内响应时间超过1s的请求超过2次# 【数据库访问响应时间规则】 database_access_resp_time_rule:# 数据库访问响应时间超过【1000】毫秒的请求超过 1 次expression: sum(database_access_resp_time > 1000) >= 1# 每隔1分钟检测一次period: 1message: 数据库【{name}】在1分钟内响应时间超过10ms的请求超过1次# 【端点关系响应时间规则】endpoint_relation_resp_time_rule:# 端点调用的响应时间超过【1000】毫秒的请求超过 2 次expression: sum(endpoint_relation_resp_time > 1000) >= 2# 每隔10分钟检测一次period: 10# 配置告警信息message: 接口【{name}】在10分钟内响应时间超过1s的请求超过2次
4.2 配置告警通知地址
修改alarm-settings.yml配置文件:
hooks:webhook:default:is-default: trueurls:- http://127.0.0.1:9092/alarm/notify
4.3 下发告警信息
由于我配置的告警通知地址是项目的接口地址,这样方便我将告警信息投放到不同的接收方,如QQ邮箱,企业微信、微信等等,我这里是将告警信息发给 企业微信机器人。

4.4 测试告警
还是以我们的新增角色接口为例子,多次请求之后,接口响应慢,服务请求成功率下降,都会触发告警。

查看SkyWalking监控控制台情况:

4.5 慢SQL查询
在生产环境中,我们经常会遇到一些慢SQL,也可以通过SkyWalking监控查到,如下慢SQL耗时情况,方便我们优化SQL,特别方便。

总结
SkyWalking 是一款功能强大且易于集成的 APM 工具,适合用于微服务架构下的性能监控、故障诊断和优化。通过其强大的分布式追踪、性能分析、错误监控等功能,我们能够深入了解应用的运行状态,定位问题并进行针对性的优化。
优点:
- 易于集成:支持多种语言的 Agent,Java、Node.js、PHP 等都可以方便地集成。
- 实时监控:可以实时查看服务性能、请求链路、数据库查询等信息,帮助及时发现和解决问题。
- 强大的可视化功能:UI 展示清晰易懂,拓扑图和链路分析非常有帮助。
不足:
- 配置复杂:对于初次使用者来说,配置可能较为繁琐,尤其是在集群部署时,需要关注各组件之间的协调。
- 资源消耗:SkyWalking 的后端服务(特别是 Elasticsearch)对资源有一定要求,在大规模部署时可能需要适当扩展,所以一般企业项目线上都不集成SkyWalking 日志采集。
总的来说,SkyWalking 是一个强大的监控工具,能够为微服务架构提供精准的性能和故障诊断。如果你正在使用微服务或云原生架构,SkyWalking 无疑是一个值得考虑的解决方案。
相关文章:
SkyWalking 10.1.0 实战:从零构建全链路监控,解锁微服务性能优化新境界
文章目录 前言一、集成SkyWalking二、SkyWalking使用三、SkyWalking性能剖析四、SkyWalking 告警推送4.1 配置告警规则4.2 配置告警通知地址4.3 下发告警信息4.4 测试告警4.5 慢SQL查询 总结 前言 在传统监控系统中,我们通过进程监控和日志分析来发现系统问题&…...
计算机毕业设计——Springboot的旅游管理
🎉**欢迎来到琛哥的技术世界!**🎉 📘 博主小档案: 琛哥,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 琛哥在深度学习任务中展现出卓越的能力&a…...
【通俗易懂说模型】反向传播(附多元分类与Softmax函数)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...
Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统
Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统 需求 在实际生成操作过程中,一般会遇到物理服务器存在多块盘的情况。 安装过程中,磁盘的标签是随机分配的,并不是空间较小的盘,就会使用较小的磁盘标签 而需求往往需要…...
128,【1】buuctf [极客大挑战 2019]PHP
进入靶场 提示了备份文件 抓包,扫描 扫描出了两个有反应的 访问index.php没反应,但www.zip成功下载了文件 index.php里得到如下有用信息 <?phpinclude class.php;$select $_GET[select];$resunserialize($select);?> 所以我们要通过GET 方…...
3.3 学习UVM中的uvm_driver 类分为几步?
文章目录 前言1. 定义2. 核心功能3. 适用场景4. 使用方法5. 完整代码示例5.1 事务类定义5.2 Driver 类定义5.3 Sequencer 类定义5.4 测试平台 6. 代码说明7. 总结 前言 以下是关于 UVM 中 uvm_driver 的详细解释、核心功能、适用场景、使用方法以及一个完整的代码示例ÿ…...
系统思考—双环学习
前几天,一个企业高管向我提到:“我们调整了N次方案,市场策略、团队激励、管理制度,能改的全改了,怎么还是不见起色?” 这让我想到典型的单环学习,简单来说就是:发现问题 → 采取行动…...
QTreeView和QTableView单元格添加超链接
QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。 在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。 一.效果 二.实现 QHTreeView.h #ifndef QHTREEVIEW_H #def…...
elastic search 的 highlight
Elasticsearch 的 highlight 功能用于在搜索结果中突出显示匹配的文本片段。这对于用户界面上的搜索结果展示非常有用,因为它可以帮助用户快速定位到他们搜索的关键词。 1. 基本用法 在 Elasticsearch 中,highlight 功能通常在查询中使用,并…...
【MySQL篇】行格式详解
MySQL行格式详解 文章目录 MySQL行格式详解🎉 什么是行格式🐱👤 如何查看行格式🐱🚀 InnoDB 行格式有哪些?🐱🏍 Compact 行格式🚩 额外信息🚀 变长字段…...
嵌入式知识点总结 操作系统 专题提升(五)-内存
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.在1G内存的计算机能否malloc(1.2G)?为什么? 2.malloc能申请多大的空间? 3.内存管理有哪几种方式? 4.什…...
动手学深度学习---深层神经网络
目录 一、神经网络1.1、模型训练1.2、损失函数1.2.1、分类:hinge loss/合页损失/支持向量机损失1.2.2、分类:交叉熵损失(softmax分类器)1.2.2.1 二分类交叉熵损失1.2.2.2 多分类交叉熵损失 1.2.3、回归:误差平方和(SSE)…...
第9章 城市基础设施更新工程 9.1 道路改造施工
9.1 道路改造施工 9.1.1 道路改造施工内容 沥青、水泥混凝土、砌块路面及人行步道、绿化照明、附属设施、交通标志。沥青路面材料的再生利用。 9.1.2 道路改造施工技术 1.沥青路面病害及微表处理 1.病害处理 裂缝处理 10mm以内 专用灌缝材料、热沥青灌缝、缝内潮湿时采用…...
java基础6(黑马)
一、static 1.static修饰成员变量 static:叫静态,可以修饰成员变量、成员方法。 成员变量按照有无static,分两种。 类变量:有static修饰,属于类,在计算机中只有一份,会被类的全部对象共享。…...
Transformer 详解:了解 GPT、BERT 和 T5 背后的模型
目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…...
Ollama命令使用指南
Ollama 命令使用指南 Ollama 命令使用指南1. Ollama 命令概览2. Ollama 命令详解2.1 启动 Ollama2.2 创建模型2.3 查看模型信息2.4 运行模型2.5 停止运行的模型2.6 从注册表拉取模型2.7 推送模型到注册表2.8 列出本地模型2.9 查看正在运行的模型2.10 复制模型2.11 删除模型 3. …...
【Prometheus】MySQL主从搭建,以及如何通过prometheus监控MySQL运行状态
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
上传文件防木马函数
项目环境:TP6、TP5 问题:解决旧项目中上传上来的文件校验不严格。导致会有木马文件入侵的情况发生。除了上篇博文中提及的限制上传文件存储的目录不可执行php文件外。仍需在入口处严格检验上传文件的类型,排除php类可执行文件上传。 解决&a…...
百问网imx6ullpro调试记录(linux+qt)
调试记录 文章目录 调试记录进展1.开发板相关1.1百问网乌班图密码 1.2 换设备开发环境搭建串口调试网络互通nfs文件系统挂载 1.3网络问题1.4系统启动1.5进程操作 2.QT2.1tslib1.获取源码2.安装依赖文件3.编译 2.2qt移植1.获取qt源码2.配置编译器3.编译 2.3拷贝到开发板1.拷贝2.…...
人脸识别与人脸检测技术
人脸识别技术,作为一种基于人的脸部特征信息进行身份识别的生物识别技术,近年来在人工智能和计算机视觉技术的推动下取得了显著进展。它利用摄像机或摄像头采集含有人脸的图像或视频流,自动在图像中检测和跟踪人脸,进而对检测到的人脸进行一系列计算和分别判断。这一技术不…...
前端性能分析常见内容
前端性能分析是前端开发中的重要部分,以下是对前端常考性能分析题目的详解: 一、性能指标 前端性能优化的核心目标是提升用户体验,常见的性能指标包括: 加载时间(Load Time):指从用户发出请求…...
ZEMAX POPD操作数
在Zemax中,POPD(Physical Optics Propagation Data) 是一个用于物理光学传播(POP)分析的关键操作数,主要用于优化或分析光束的物理特性(如束腰、发散角、M因子等)。以下是对其使用方…...
ansible使用学习
一、查询手册 1、官网 ansible官网地址:https://docs.ansible.com 模块查看路径:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin 2、命令 ansible-doc -s command二、相关脚本 1、服务…...
VS2022中cmath.h头文件功能介绍
在C语言的世界里,数学运算一直是程序开发中不可或缺的一部分。无论是进行简单的数值计算,还是处理复杂的科学工程问题,都需要借助数学函数来实现。在Visual Studio 2022(VS2022)中,cmath.h(在C语…...
基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试
基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试 1. 引言 在计算机视觉领域,图像分类是一个经典的任务。本文将详细介绍如何使用 PyTorch 实现一个树叶分类任务。我们将从数据准备开始,逐步构建模型、训练模型,并在测试…...
【STM32系列】利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程)
ps.源码放在最后面 设计FIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程) 设计IIR滤波器 MATLAB配置 设计步骤 首先在命令行窗口输入"filterDesigner",接着就会跳出以下界面…...
如何在本地部署deepseek?
1、打开ollama官网,点download(下载需要翻墙 https://ollama.com/ 2、双击下载好的OllamaSetup.exe,一直点下一步即可。 3、winR 输入cmd,打开命令提示符,输入ollama。有以下提示即安装完成。 4、可以根据 nvidia-…...
AJAX项目——数据管理平台
黑马程序员视频地址: 黑马程序员——数据管理平台 前言 功能: 1.登录和权限判断 2.查看文章内容列表(筛选,分页) 3.编辑文章(数据回显) 4.删除文章 5.发布文章(图片上传࿰…...
MarsCode AI插件在IntelliJ IDEA中使用
文章目录 前言一、MarsCode是什么?二、下载三、使用1、登录2、操作界面3、生成代码4、解释代码5、注释代码6、生成单测7、智能修复8、代码补全 总结 前言 随着 AI 技术浪潮席卷而来,各类 AI 工具呈爆发式涌现,深度融入我们的日常与职场&…...
如何将网站提交百度收录完整SEO教程
百度收录是中文网站获取流量的重要渠道。本文以我的网站,www.mnxz.fun(当然现在没啥流量) 为例,详细讲解从提交收录到自动化维护的全流程。 一、百度收录提交方法 1. 验证网站所有权 1、登录百度搜索资源平台 2、选择「用户中心…...
