有了这款工具,定位线上问题事半功倍|云效工程师指北

简介: 有了这款工具,定位线上问题事半功倍,程序员在日常工作中经常会遇到一些线上问题需要排查,本文的主人公程序员小张也不例外。但排查的过程却时常令他困扰不已。让我们一起看看他遇到了哪些问题,又是怎么解决的。

大家好,我叫刘玄,负责云效流水线的开发。程序员在日常工作中经常会遇到一些线上问题需要排查,本文的主人公程序员小张也不例外。但排查的过程却时常令他困扰不已。让我们一起看看他遇到了哪些问题,又是怎么解决的。

焦头烂额的一天

那是一个阳光明媚的上午,小张来到工位,打开电脑,备上咖啡,精神满满的开始了一天的工作。正在小张噼里啪啦的敲着键盘,认真Coding之时,钉钉群里的一个钉,打破了宁静。客服人员反馈,有客户遇到了一个问题,需要开发人员排查。小张排查了线上日志,发现用户的请求比较多,日志也比较多,没有定位到关键信息。小张只能又让客服找用户提供更具体的信息。在和用户反复进行沟通之后,小张最终花了半个多小时才定位到了问题。

忙碌的一天很快结束,正当小张准备下班,筹划着下班之后怎么happy时,电话报警的声音,又把他拉回了现实。小张收到后端服务RT高的告警后,赶紧排查多个后台应用的监控信息和日志。虽然很快从Nginx日志定位到了有问题的请求信息,但小张很难精确的找到这个请求对应的应用日志,所以花费了很长时间才定位到问题:一个第三方服务异常,导致部分功能受影响。定位到原因后,及时采取了降级手段,系统恢复正常。

寻求解决问题的方案

过完了焦头烂额的一天,小张觉得现在处理问题的效率太低,大把的时间花在了问题定位上。而之所以排查的这么慢,是因为系统采用微服务架构,一个请求会涉及到多个服务,并且每个服务还会调用DB、缓存以及其他第三方服务。大致链路如下:

image.png

小张想,应该有成熟的技术方案,能够标识整个请求链路,将异常服务节点清晰标注。小张借助搜索工具,发现有一种解决方案,链路追踪,刚好适合自己的场景。

链路追踪工具可以将一次分布式请求还原成完整的调用链路,将整个请求的调用情况进行展示,比如各个服务上的耗时、各个服务的请求状态、具体调度到各个服务的哪台机器上等信息。

改造系统

期望的效果

根据前面遇到的两个问题,小张期望:

  1. 用户请求遇到问题时候,可以获取到一个traceId,只要提供了这个traceId,就可以看到这个请求在各个服务之间的调用路径。并且可以通过这个traceId查到所有应用中相关的日志。
  2. 当收到RT告警时,也能够从Nginx的日志中找到这个traceId。

接入链路追踪

经过技术选型,小张选择阿里云的产品链路追踪Tracing Analysis作为自己链路追踪的服务端。

阿里云链路追踪Tracing Analysis提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助用户快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。

阿里云链路追踪Tracing Analysis支持多种常见的链路追踪工具,例如Zipkin、Skywalking、Jaeper等。小张选择使用Skywalking作为链路追踪数据埋点。

在阿里云上开通完链路追踪Tracing Analysis 产品之后,就可以在集群配置中获取到Skywalking的接入点。更详细的接入指南参考阿里云官方文档

由于小张的系统是基于spring boot,所以只需要在启动命令中加入以下内容即可。

image.png

重新启动应用后,链路追踪埋点数据就会收集到链路追踪Tracing Analysis 上了。

日志中打印traceId

为了能够通过traceId搜索到所有的日志,也需要在的应用的日志中展示traceId信息,具体方式如下:

在应用中引入以下依赖:

image.png

修改logback配置文件,例如:tid即为 Skywalking 的traceId。

image.png

以上改动就可以在日志中看到traceId了。如下图所示:图中标红的TID值即为traceId。

image.png

同时小张也在系统出现异常信息时,将traceId透出给用户,用户反馈问题时只需要提供traceId即可。相应的,需要在代码中把traceId写入到响应体中,如下所示:

image.png

Nginx日志中打印traceId

为了在收到系统RT告警时,也可以获得traceId,需要修改Nginx配置。

接入Skywalking之后,系统间调用的请求都会带上名称为sw6的header (其中6为对应的Skywalking版本号),Header值的的格式为:1-TRACEID-SEGMENTID-3-PARENT_SERVICE-PARENT_INSTANCE-PARENT_ENDPOINT-IPPORT从这个值中提取出TRACEID,也就是第一个和第二个横杠之间的部分,再进行BASE64 decode就可以获取到traceId。

然后需要在Nginx 的log_format 配置添加对应的Header,如下如下:

image.png

然后就可以在Nginx日志中看到了相应的值了,如图:

image.png

解决链路追踪多线程丢失traceId 的问题

小张在测试链路追踪时,发现在多线程的使用场景中,只有一个子线程能够正确获取到traceId,而其它线程中的traceId会出现丢失。为了解决上述问题,小张使用@TraceCrossThread注解对Callable和Runnable进行增强,@TraceCrossThread为Skywalking提供的注解,Skywalking通过增强被此注解注释的类,以此来实现traceId的跨线程传递。示例代码如下。

image.png

image.png

后续提交线程任务时使用改造后的TraceableCallable和TraceableRunnable 即可解决多线程丢失traceId 的问题。

完成以上改造后,以下图为例,用户每一次的请求都会有对应的traceId,便于将整个请求链路展示出来。

image.png

轻松应对线上问题

又一个阳光明媚的早上,小张埋头工作时,又有客服反馈用户问题,这个时候小张不慌不忙的根据用户提供traceId,在阿里链路追踪https://tracing.console.aliyun.com/上查看调用链路,很快定位到异常节点,示例如下:图中状态为红色的节点就是异常节点,图中示例表示由于某个sql执行出现异常。

image.png

轻松应对一天工作后,小张在下班前又收到应用RT过高的告警, 由于Nginx日志中打印了traceId信息,很快就可以定位到耗时的请求,示例如下:

image.png

image.png

图中耗时比较长的节点,是由于调用第三方服务造成,小张根据情况,对服务进行降级,很快就解决RT过高的问题,防止问题扩散。

接入了链路追踪以后,小张在定位线上问题的耗时大大缩短,可以有更多的时间专注其他工作。

以上就是小张是如何通过使用链路追踪从焦头烂额的排查线上问题到从容定位线上问题的转变,希望对仍未使用链路追踪技术的同学有些帮助。本故事纯属虚构,如有雷同,纯属巧合。


点击下方链接,即可免费体验云效流水线Flow。

https://www.aliyun.com/product/yunxiao/flow?

lQLPDhtDba1KT2_NBDjNB4CwgwE-eOLUK_gCPyXeUECTAA_1920_1080.png

相关实践学习
流水线运行出错排查难?AI帮您智能排查
本实验将带您体验云效流水线Flow的智能排查能力,只需短短1-2分钟,即可体验AI智能排查建议。
ALPD云架构师系列 - 云原生DevOps36计
如何把握和运用云原生技术,撬动新技术红利,实现持续、安全、高效和高质量的应用交付,并提升业务的连续性和稳定性,这是云原生时代持续交付共同面对的机会和挑战。本课程由阿里云开发者学堂和阿里云云效共同出品,是ALPD方法学云架构师系列的核心课程之一,适合架构师、企业工程效能负责人、对DevOps感兴趣的研发、测试、运维。 课程目标 前沿技术:了解云原生下DevOps的正确姿势,享受云原生带来的技术红利 系统知识:全局视角看软件研发生命周期,系统学习DevOps实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
运维 监控 Devops
|
3月前
|
敏捷开发 运维 数据可视化
提升协作效率的秘密武器:2025年DevOps任务可视化工具全解析
开发、测试、运维团队协作常因流程不透明导致效率低下,DevOps任务可视化工具成为解决这一痛点的关键方案。这类工具通过图形化呈现任务流程、状态追踪和CI/CD监控,实现跨团队协作透明化。核心功能包括看板管理、流水线可视化、自动告警等,能显著降低沟通成本,提升交付效率。市场主流工具如Jenkins、GitLab、板栗看板等各有优势,企业需根据规模、集成需求选择合适方案。随着AI和ChatOps发展,未来可视化工具将更智能化,助力企业构建高效DevOps闭环。
127 1
|
3月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
弹性计算 Java jenkins
开箱即用的企业级CICD工具-云效流水线 Flow
【5月更文挑战第10天】开箱即用的企业级CICD工具-云效流水线 Flow
56135 11
|
Prometheus 监控 安全
|
运维 Devops 测试技术
DevOps:文化、工具与实践的深度融合
【6月更文挑战第21天】DevOps融合文化、工具与实践,促进开发与运维协作,加速软件交付。核心包括共享文化、自动化工具(如Git、Jenkins)与流程优化(敏捷、自动化、微服务)。DevOps助力团队协作,提高效率,降低运维成本,驱动企业持续创新与成长。
|
运维 监控 Devops
云效DevOps:不仅仅是工具,更是思维方式的转变
【6月更文挑战第11天】云效DevOps是软件行业的 game changer,超越技术工具层面,推动协作、自动化和持续改进的思维转型。它连接开发、测试、运维,强化团队协作,通过自动化提升效率和准确性,减少人为错误。示例展示了自动化构建过程,强调每次迭代都是改进机会,促进项目持续优化和竞争力提升。
260 3
|
Prometheus 运维 监控
DevOps实践中的监控策略与工具应用
在当今快速发展的软件交付领域,DevOps实践已成为提升效率、确保质量的关键因素。本文深入探讨了在DevOps流程中实施有效监控的必要性,分析了监控数据对于优化运维工作的价值。文章首先概述了监控在DevOps中的作用,随后详细介绍了一系列现代监控工具,并通过实际案例展示了如何整合这些工具以构建强大的监控系统。最后,文中讨论了监控策略的最佳实践,旨在帮助读者构建一个全面、自动化和高效的监控体系。
|
人工智能 运维 Devops
云效流水线智能排查功能实测:AI赋能DevOps,精准定位与高效修复实战评测
云效持续集成流水线Flow是阿里云提供的企业级CICD工具,免费且注册即用。它具备高可用性、免运维、深度集成阿里云服务、多样化发布策略及丰富的企业级特性。产品亮点包括智能排查功能,能快速定位问题,提高问题解决效率。云效Flow支持一站式DevOps流程,适用于各种规模的企业,助力实现高效、高质量的软件交付。现在即可免费试用,体验智能CICD解决方案。
|
监控 Devops 持续交付
程序员必须了解的 10个免费 Devops 工具
程序员必须了解的 10个免费 Devops 工具