微服务架构 | 如何利用好日志链路追踪做性能分析?

【SkyWalking】Java服务从零接入全链路追踪解决方案 skywalking服务日志存储到apache-skywalking-apm-bin-es7/logs中。sh apache-skywalking-apm-bin-es7/bin/startup.sh 启动。bin: 各种启动脚本,⼀般使⽤脚本startup.*来启动web⻚⾯和对应的后台应⽤;webapp: UI前端(web监控⻚⾯)的jar包配置⽂件。config:启动后台应⽤程序的配置⽂件。:组合脚本,同时启动oapServer.启动成功后会启动两个服务,⼀个是。 阅读详情

微服务架构 | 如何利用好日志链路追踪做性能分析?

导读:做性能分析听到最多的歪理就是,服务做水平、垂直扩容、分表分库、读写分离、XX中间件、资源静态化等等但是归根到底这些方案都是为了尽可能减少对数据库的访问以及堆栈的释放,提高数据库IO的读写速度和程序的运行效率。

系统都是逐渐演进的,一个系统在运行中必须是根据场景逐渐地提高优化性能。高并发就是对资源的节约的考验,这种考验除了更换优秀和先进的技术,优化架构,还在于从小处出发,对尽可能节约的资源进行节约。

 而在一个系统的数据访问中,系统的瓶颈往往是来自于数据库,因此我们要尽可能减少对数据库的访问!

一、背景

最近一段时间粉丝可能留意到,技术号一直没有更新多少技术文章。因为近期都在做一直在做性能优化。

在业务模块在并发量起来以后,接口的性能瓶颈就愈发变得明显。

最近一段时间粉丝可能留意到,技术号一直没有更新多少技术文章。因为近期都在做一直在做性能优化。

在业务模块在并发量起来以后,接口的性能瓶颈就愈发变得明显。

配置解析和函数路由服务接口性能堆栈分析

本篇主要针对配置布局资源文件过大,导致接口耗时过长问题分析解决。

二、日志链路追踪

排查性能如果从代码层面出发少不了堆栈分析,但是目前大部分服务都为了便于服务扩容、升级都做了微服务处理,日志分析排查免不了通过链路 ID 追踪日志《微服务分布式架构中,如何实现日志链路跟踪?》

▐ 链路追踪日志改造 - RPC 接口

通过 restTemplate、Openfeign 的形式访问其他服务的接口时,就会携带起始位置生成的 traceId、spanId 到下一个服务单元。但是没有详细实现,这里做下简单补充便于后面理解与使用。

阅读 Spring-Web 源码,对于远程接口的调用拦截可以实 ClientHttpRequestInterceptor

拦截客户端 HTTP 请求。这个接口的实现可以注册到 RestTemplate ,以修改传出的 ClientHttpRequest 和/或传入的 ClientHttpResponse 。拦截器的主要入口点是 intercept(HttpRequest, byte[], ClientHttpRequestExecution) 。

计算 RPC 接口耗时与日志记录,这样在做接口分析的时候可以针对性能较差、耗时高的接口有针对性性排查分析。

远程服务的接口性能暂时不做分析,目前很明确耗时:1528ms 应该存在很大的性能问题。

▐ 链路追踪日志改造- 传播线程变量

但是目前只统计出远程接口耗时是远远不够的,我们需要知道接口总耗时以及对堆栈分析才能精准定位到问题。

记录 HTTP 监控信息

这里需要补充下不是所有的接口我们都需要捕捉和统计分析,我们可以统一接口规范。如页面请求统一以/data/开头,RPC 接口统一以/api/开头这样可以分别区分两则的统计信息,避免记录错乱。

▐ 链路追踪日志改造- 统计 RPC 调用次数

上面👆🏻的两处的处理目前也只能精确度到当前 HTTP 请求有哪些 PRC 接口请求?每个 PRC 接口请求耗时多少?作为核心服务不太会去关系业务服务的接口细节,如果需要针对 PRC 接口的主服务做进步性能分析即可。

因此还需要进步统计出所有 RPC 接口的总耗时和次总次数。

通过“线程变量”传递 RPC 接口的请求的次数。记得先前有类似出路过服务之间的认证问题也是通过请求头传递。《Spring Cloud中如何保证各个微服务之间调用的安全性?》

累计完请求数量继续传递下去,以此类推来统计 RPC 接口的请求总数

这里做了简单阈值限制,背景不难想到:如果一个接口频繁调用另外一个服务超过 20、30 次此时,我们就应该考虑服务之间数据同步或者映射问题。

所以在计算 RPC 接口的请求总次数加了阈值限制,若 RPC 调用次数超出范围则输出警告日志

▐ 链路追踪日志改造 - 链路日志统计展示

至于链路追踪日志的展示,自己使用就不用太关注图形化样式问题,这里建议直接使用 Thymeleaf 模板引擎进行渲染展示,也就有了文章开头的图片

三、总结

对于问题分析我们首先能遇到的总是一个较大的问题,在算法中我们常会用分治算法。一言以蔽之:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破。

回顾整个处理思路

  • 微服务日志埋点处理,记录链路日志并统计

  • 监听 HTTP 请求后,记录微服务服务之间 RPC 接口耗时

  • 监听 HTTP 请求后,记录 RPC 接口深度(请求次数)

  • 记录 RPC 请求总总耗时与总占比

至此算是完成了我们做链路日志分析的第一步:统计分析 HTTP 请求所触发的外部服务的性能消耗。

原创:微服务架构 | 如何利用好日志做性能分析?


 

10个微服务中找出接口查询性能瓶颈 本文系统介绍了微服务架构下接口性能问题的排查方法论。核心思路采用分层漏斗式排查:首先通过SkyWalking/Zipkin等分布式追踪工具宏观定位慢服务,然后使用Arthas进行微观诊断,通过profiler生成火焰图分析CPU热点,利用trace命令追踪方法调用栈,最终定位到具体代码行问题。文章通过Feign调用性能问题的实战案例,展示了如何从390ms异常耗时追踪到类加载缺失的根本原因。建议采用"全局追踪→局部诊断→根因分析→优化验证"的四步流程,配合JMeter压测和Prometh 阅读详情

相关推荐

SpringBoot日志追踪实战:如何用MDC和SLF4J给单体应用加上traceId

本文详细介绍了在SpringBoot单体应用中,如何利用SLF4J的MDC机制和过滤器,轻量级地实现日志链路追踪,为每个请求自动生成并传递唯一的traceId。通过核心代码示例和日志配置,解决了异步线程、定时任务等场景的上下文传递问题,显著提升线上问题排查效率。

iii12的专栏 248

全链路监控:方案概述

即便在这一点上,Pinpoint 所采用的概念也不完全与那篇论文一致。比如他采用。

hsabrina的博客 1428

在 Spring Boot 中实现基于 TraceId 的日志链路追踪

`TraceId` 是一个唯一的标识符,用于跟踪分布式系统中的请求。每个请求从客户端发起到服务端处理,再到可能的多个微服务调用,都会携带这个 `TraceId`,以便在整个请求链路中进行追踪和调试。

九天的专栏 1669

链路日志系统:SkyWalking 与 ELK 的对比分析

在当今的大数据时代,对于复杂的分布式系统,链路追踪和日志管理成为了不可或缺的一部分。其中,SkyWalking 和 Elastic Stack(常被称为 ELK,即 Elasticsearch, Logstash, Kibana)是市场上两个非常流行的解决方案。本文旨在深入比较这两个系统的特点、优势以及适用场景,以帮助开发者或技术决策者更好地理解它们在实际项目中的应用。SkyWalking 是一个开源的应用性能监控系统,专注于提供对分布式系统的全链路追踪、服务性能分析、以及多维度的监控功能。

qq_37743433的博客 2585

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包怎么手动打包项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件)。 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了为什么要打包我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project

我早就想,要这样载着你,翻山越岭 2万+

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

微服务分布式架构中,如何实现日志链路跟踪?

本文主要讲解了spring cloud微服务使用Feign作为微服务间的通讯框架的情况下,如何使用统一的日志ID来追踪一次请求日志,高效排查日志

JQ棣的博客 3506

电机控制::软件架构::微型软件架构

所谓软件架构就是软件分层:HAL库,嵌入式操作系统,中间件,应用层。大型项目可参考借鉴ROS/PX4/Apollo/FMT等无人机、机器人、无人驾驶等开源项目;电机控制大型为AUTOSAR架构,小型跑裸机参考 前后台系统 或 微型实时操作系统对模块管理的思想。基本原理还是参照大型项目的架构来的,只是大部分层与块都相对简单,也没有操作系统这一层。硬件架构了解不同芯片组合及其各自的特点。1.FPGA+;2.架构;3.TC387+AUTOSAR架构,车规级,汽车领域常用。

one__leaf的博客 1695

微服务架构 | 如何利用日志链路追踪程序执行的慢 SQL?

查看 SQL 的执行效率,不难想到使用 explain 分析慢查询,但是前提是你需要非常了解业务背景。否则很难精准定位到。

码农架构 1025

VPS环境搭建及配置

VPS(Virtual Private Server)是一种虚拟化技术,可以将一台物理服务器分成多个虚拟服务器,每个虚拟服务器都有独立的操作系统和资源,相互之间互不影响。VPS可以提供类似于独立服务器的功能,但价格更便宜,适合中小企业和个人用户使用。VPS可以用于网站托管、应用程序部署、游戏服务器、数据备份等各种场景。

YJ_12340的博客 1万+

OFDM调制解调系统信道估计和均衡算法的MATLAB仿真

然后,从接收到的信号中提取导频序列,并使用LS算法进行信道估计。OFDM(正交频分复用)是一种常用于高速数据传输的调制技术,它将高速数据流分割成多个低速子载波,通过在不同的子载波上传输数据,实现了频域上的正交性。因此,信道估计和均衡算法在OFDM系统中起着至关重要的作用,用于减小信道衰落引起的影响。通过运行上述代码,可以进行基于LS算法的OFDM调制解调系统信道估计和均衡的MATLAB仿真。本文将介绍一种基于LS(最小二乘)算法的OFDM调制解调系统信道估计和均衡算法,并提供相应的MATLAB仿真代码。

uote_e的博客 229

Spring Boot 实现日志链路追踪与统一日志规范设计实战

在本篇中,我们从日志链路追踪的核心需求出发,构建了一个具备如下能力的日志模块:统一 TraceId 自动注入与传递(支持子线程、远程调用)日志 JSON 格式输出 + MDC 注入接口日志增强打印(参数、IP、耗时)多日志文件分类输出(业务日志、错误日志)可对接 ELK 平台进行全链路分析该方案可广泛用于各类 Spring Boot 项目,为后期的稳定性保障、问题定位与系统审计提供有力支撑。

2501_92152350的博客 1139

全网唯一OpenCyphal/UAVCAN教程(8)libcanard介绍

当Cyphal里,这个结构体代表一条完整的Cyphal消息,之后我们会根据metadata里提供的元信息,其实就是消息ID,调用对应的反序列化函数,将payload还原成具体的Cyphal消息。用于构造一个新的发送队列,原则上一个can物理接口需要分配一个发送队列,如果它们的MTU大小一致,是可以共用一条的。这个库不包含IO层,是平台无关的,意义是没有实现具体的数据收发,仅提供将发送出去的Cyphal消息转成can帧,以及将收到的can帧转成Cyphal消息。返回值是这条消息拆解成的can帧的数目。....

二进制君 2404

springcloud日志链路追踪,Zipkin,Spring Cloud Sleuth

springcloud日志链路追踪,Spring Cloud Sleuth,Zipkin

qq_41633199的博客 1020

【Python办公】剪贴板记录工具(记录文本 + 图片防重复)

本文介绍了一个用Python开发的剪贴板记录工具,能够自动记录复制过的文本和图片内容。该工具使用tkinter构建GUI界面,通过后台线程实时监控剪贴板变化,具有文本记录、图片保存(自动去重)功能。核心代码采用pyperclip访问剪贴板,PIL处理图片,hashlib计算图片哈希值实现去重。运行程序后,文本内容直接显示在界面,图片保存为PNG文件并记录路径。工具还提供清空历史记录功能,适合日常办公中需要追踪剪贴板历史的使用场景。

weixin_42636075的博客 238

YOLO26改进策略【损失函数篇】| AAAI 2025 SD Loss,基于目标尺度动态调整尺度损失和位置损失的影响系数,减少 IoU 标签波动

在红外小目标检测任务里,基于交并比的损失存在波动问题,像边界框(BBox)标签的IoU损失波动最高可达86%,较小目标的IoU损失稳定性更差,严重影响模型稳定性和回归效果。同时,现有损失函数没有充分考虑不同目标尺度下对尺度和位置的敏感度差异,,并且掩码标签的位置损失在处理漏检物体时难以收敛,容易产生误报。这些问题限制了模型在不同尺度目标上的检测性能,为解决这些问题,提出了损失函数。

Limiiiing的博客 393

Spring Cloud 日志与监控 链路追踪

链路追踪(Distributed Tracing)是一种分布式系统中的监控技术,通过为每个请求生成唯一的标识符(Trace ID),记录请求在不同服务间的传播路径,从而实现全局可观测性。

Flying_Fish_roe的博客 744

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

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

微服务性能监控终极指南:ZLT平台应用吞吐量与系统资源监控实战

微服务架构的性能监控是确保系统稳定运行的关键环节,ZLT微服务平台提供了完整的性能监控解决方案,能够实时监控应用吞吐量、响应时间、系统资源使用情况等关键指标。本文将详细介绍如何利用ZLT平台进行全面的微服务性能监控 🔍 ## 为什么需要微服务性能监控? 在现代微服务架构中,系统由多个独立部署的服务组成,每个服务都可能影响整体性能。通过ZLT平台的监控功能,您可以: - 📊 实时监控应用吞

gitblog_00495的博客 452

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

分布式与微服务核心区别:架构风格 vs 部署形态

在系统架构演进中,分布式与微服务是经常被混淆的两个技术概念。分布式系统关注多节点通过网络通信协同工作,对外表现为统一整体,核心解决数据一致性、分布式事务、分布式锁、分布式缓存等底层协作问题;而微服务则强调按业务边界拆分服务,实现独立部署与自治,侧重服务治理、熔断降级、配置管理等架构管控能力。理解两者的本质区别,有助于工程师在架构选型时做出合理决策:单体应用遇到性能瓶颈可优先考虑分布式集群部署,而代码耦合严重、团队协同复杂时则需引入微服务架构。本文结合Spring Cloud、Nacos、Seata等主流组件

weixin_33868027的博客 419

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于Go语言的链路追踪实践

OpenTelemetry 客户端架构与生态。程序的可观测性与Telemetry。一次基于Go语言的链路追踪实践。Trace系统数据流全局解折。

niwoxiangyu的博客 513

SkyWalking:分布式系统的全链路监控方案

SkyWalking是一个面向微服务和云原生架构的APM系统,主要用于分布式链路追踪,帮助解决微服务架构中的性能瓶颈排查问题。它支持多种编程语言,包括Java、.Net Core、PHP等,并能处理千亿级别的遥测数据。SkyWalking兼容Zipkin、OpenTelemetry等成熟的可观测性生态,具备智能告警和AI能力,能自动识别HTTP URI模式并计算指标基线。适用于服务数量较多的微服务架构团队,对于小项目则显得过于复杂。

omegaforge569的博客 191

Vue+SpringBoot影院管理系统开发实战

现代Web应用开发中,前后端分离架构已成为主流技术范式。Vue.js作为渐进式前端框架,配合SpringBoot提供的RESTful API服务,能够高效构建企业级管理系统。通过MyBatis实现灵活的数据持久层操作,结合Redis处理高并发场景下的分布式锁需求,这种技术组合特别适合需要处理复杂业务规则的应用场景。以影院管理系统为例,场次排期冲突检测、座位锁定机制等典型业务需求,展示了如何将基础技术原理转化为具体工程实践。项目中采用的Canvas自主开发座位图、时间区间重叠检测算法等方案,为同类业务系统开发

weixin_30588675的博客 365
上一篇: Java NIO三件套之Buffer实现原理解析
下一篇: 新来的同事问我where 1=1 是什么意思
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值