打通源码!高效定位代码问题|云效工程师指北

简介: 为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。

大家好,我叫胡飞虎,花名虎仔,目前负责云效旗下产品 Codeup 代码托管的设计与开发。代码作为企业最核心的数据资产,除了被构建、部署之外还有更大的价值。为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。

image.png

随着微服务架构的流行,一个业务流程需要多个微服务共同完成。一旦出现问题,运维人员在面对数量多、调用链路复杂的情况下,很难快速锁定导致问题发生的罪魁祸首:代码。

为了提高排查效率,目前常见的解决方案是:链路跟踪+日志分析工具相结合。即通过链路跟踪产品(如阿里云的Tracing Analysis)可视化还原业务执行过程的系统调用链路的拓扑、接口请求量与耗时等数据,再配合日志分析工具(如阿里云的SLS)进一步分析链路中某个系统的详细日志从而锁定出问题的大致坐标。

理想情况是开发人员能够自助分析并解决联调过程中遇到的问题,但实际情况是一旦被依赖的服务执行返回失败时测试流程就终止了,必须要等到下游服务提供方的同事协助排查才能解决;尤其当遇到在紧急场景时,更是讲究一个“快”字,如果过于依赖排查人员对代码的熟悉程度以及必须下载到本地电脑才能分析的诸多限制,势必会降低问题排查的效率。

究其根源,链路跟踪+日志分析工具的排查模式存在两个待解的问题:

  • 无法直接锁定有问题的源码,现有的定位方式只能查找到问题发生的现场信息(如发生的时间、上下文数据和一些描述信息),而缺少产生问题的凶手信息,即源代码数据;
  • 限制条件多,首先需要排查人员事前知道问题可能涉及的代码库;其次代码库必须提前下载到本地PC电脑才能查看分析,如果身边没有电脑则无法进行下去。

打通源码,解决最后一公里

为了解决上述2个问题,云效代码管理平台 Codeup 联合阿里云日志服务工具 SLS 一起打通了日志到源码追溯的通道。管理员在完成一次配对后,开发者在排查过程中就无需关心日志与代码库的关联关系,也无需临时申请代码库权限,让在线代码问题的排查变得简单而高效。

这里涉及到两款工具,其中 Codeup 是代码托管产品,提供了代码源文件的存储与版本控制、代码文本搜索等服务;SLS 提供了海量日志数据的收集、存储、检索等服务。

首先通过 SLS 收集上报业务系统打印的日志数据,一旦生产环境出现问题并由监控系统发出报警,则开发或运维人员接到报警后第一时间登录 SLS 控制台查询具体的日志详情,然后分析具体日志详情以及一键跳转日志关联的源码仓库,定位到问题代码行,整个过程一气呵成,让处理人员专注于问题本身,极大提高解决问题的效率。

实际操作指南

1、登录阿里云日志服务 SLS 界面,由管理员配置日志库与代码库的关联关系,通过点击图1所示的“查看源码”功能,可以进入配置页面。配置是一次性工作,生效后无需重复配置。

image.png
图1 “查看源码”初始化入口

2、选择「查看源码」,选择业务对应的云效代码库,如果代码暂未托管至云效 Codeup,别担心,这里支持一键快速导入三方代码库到 Codeup,具体可见下方操作视频。

3、配置成功后会在高级选项里新增“代码诊断”入口,如图3所示(入口名称可自定义,此处中自定义为:代码诊断)。

image.png
图2 初始设置完成效果图

4、查看 SLS 日志详情,如需配合源码分析,则只需选择相应代码相关日志关键字,然后点击「代码诊断」即可,如图4~6所示,点击后可以在 SLS 页面直接查看相关的代码片段。

image.png
图3 代码查询交互

image.png
图4 关联查询的代码片段

image.png
图5 Codeup托管的代码详情

上述能力可以可以很好地解决日常联调场景和在线应急场景的问题。

  • 日常联调场景中能够通过日志记录搜索问题代码,自助解决全链路调试过程中出现的一些类似参数校验,运行时异常等简单的代码问题。
  • 在线应急场景下,能够通过一个traceID轻松从链路中定位问题的系统,再从系统的日志中查询详细日志数据,最后通过日志数据中记录的代码摘要快速搜索查询源码内容。整个过程一键完成,只要有相应的日志和代码库权限即可,即使没有PC电脑,移动设备一样能够搞定。

如果你对该能力感兴趣,欢迎加入钉群找我们交流(钉钉群号:33634408)。


点击下方链接即可免费体验代码管理 Codeup。

https://www.aliyun.com/product/yunxiao/codeup?channel=yy_rccb

lQLPDhtDba1KT2_NBDjNB4CwgwE-eOLUK_gCPyXeUECTAA_1920_1080.png

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何找回旧版rdc的代码仓库
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 缓存 Java
阿里云云效产品使用合集之如何确保代码不泄密
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
存储 运维 网络安全
阿里云云效操作报错合集之推送代码到仓库报错:Could notread from remote repository.,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
3月前
|
缓存 资源调度 Kubernetes
阿里云云效产品使用合集之如何将两个独立的代码仓库构建并部署到同一个容器内
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
Kubernetes Java 开发工具
阿里云云效产品使用合集之如何将代码库中的代码覆盖目录
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
人工智能
就AI 基础设施的演进与挑战问题之云效平台上进行代码的持续验证的问题如何解决
就AI 基础设施的演进与挑战问题之云效平台上进行代码的持续验证的问题如何解决
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何优化克隆代码时长
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 数据可视化 测试技术
阿里云云效产品使用合集之怎么在php composer安装自己服务器的代码
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之从GitHub下载代码失败是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何确保解决冲突代码是提交到合并的目标分支
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。