在线数据链路跟踪的平台化发展及思考

Tracer的平台化背景和发展历程

对于每一个应用来说,无论是在生产环境还是在线下测试环境,都会有一些重要的底层或者上层数据,甚至这些数据的正确与否能决定此应用的请求返回结果是否准确无误。这些基础数据能帮助应用快速地定位问题所在。如果这些重要数据能够跟应用请求一一对应,实时展示出来,就能够帮助开发同学第一时间定位排查问题,会大大提高分析解决问题的速度。还有某些隐藏在应用内部的逻辑希望能够以显性化的数据模式直接暴露出来,也就是说对于一些应用的重要基础数据需要进行一定的处理、解析、映射等操作组成一些调试信息,形成业务类诊断工具,可以帮助客服同学第一时间直接解答客户的投诉和咨询。

无线端应用往往由于客户端、无线服务端、业务服务端分离的架构模式,很难做到一次真实线上请求的全链路关联。所以在排查无线端问题的时候,如果能够将一次无线端的请求与这些重要数据的做到映射关联,就能够快速定位排查无线端问题。

但是这些重要的基础数据和调试结果往往是在普通的页面返回结果上没有的,没有办法将其与一次线上请求一一关联对应,线上请求的时候没有办法第一时间拿到这些重要信息,而是需要通过线下调试或日志打印的方式去获取。如果每次问题来临,都需要线下启动测试环境,或者在生产环境进行远程调式,再通过调试拿到结果,这样往往严重影响问题解决的速度。并且很难保证可以准确复原用户在线上遇到问题的真实场景。

  • 我们需要抛开搜索场景,将Tracer形成平台化产品,对接任何有在线调式需求的应用,比如推荐场景、广告场景、seo场景、后台任务场景等等。
  • 我们需要将Tracer的对端的限制问题解决,不仅支持PC端的在线调式,我们要解决无线端在线调式难的痛点。
  • 我们需要扩展Tracer的使用对象,无论是开发、测试、算法、引擎、产品、运营、客服角色,针对各个角色不同的在线调式需求都要满足。
  • 我们要做到使用Tracer的应用可按照自己的规则和业务需要进行独立定制。

那么Tracer面临的问题就是升级架构、沉淀平台化产品、减少接入成本、降低使用复杂度。我们要做平台化产品Tracer。

Tracer就是这样一套在不同阶段适应业务需求和技术发展沉淀的辅助应用快速进行在线问题排查的平台产品 。在发展的每个阶段,它的适合对象、定位与目标也不一样,直到现在也还在不断发展。
image.png
image.png

Tracer平台的能力

Tracer的设计理念是保证调式的准确性和可靠性,做在线调式,那么从源头的用户在线请求到接下来的整条链路的调式一定要是一一对应的。
image.png
那么Carry-Tracer产品在技术上做了哪些事情,来帮助应用做准确的快速的在线调式。
image.png

Tracer产品在对接应用,辅助应用做在线调式上有什么优点:

  • 1.应用按需定制:

安全规则定制:在线调式对应用来说固然重要,但是在线调式的前提一定是安全规则!只有在应用允许授权的安全规则内,才可以对应用做在线调式和进一步的扩展定制。
而对于每一个应用来说对安全规则的定义可能都不一样,Tracer可对接一些业务平台,比如定制工具进行应用接入的权限管理和配置管理,可在工具上对在线调式的安全规则进行应用按需自定义配置。目前Tracer在安全规则上支持IP授权(针对PC),参数授权(针对PC),账号授权(针对无线),设备id授权(针对无线)。
诊断信息定制:对于某些应用来说,可能单纯从应用中取得的基础数据信息可能只有开发同学能够直观的理解,并且可能还不完全够排查问题或形成业务诊断工具,Tracer平台提供自定义HSF服务和vm模板供应用将收集到的基础数据,经过处理、解析、定制等操作,渲染出可视化的页面信息供应用进一步在线调式使用或将此形成诊断工具,供产品、运营、客服等非开发角色人员排查在线问题参考使用。

  • 2.多端多场景对接:

多端:Tracer的在线调式能力定位不仅仅在PC端上,无线端问题排查,在线调式能力的需求是Tracer也要去解决的。从无线客户端上发起一次请求到无线服务端再到业务应用服务,Tracer可以做到将某应用下经过授权的用户在无线端发起真实请求以后,我们能够第一时间取得这次操作的背后底层数据请求或者隐藏信息,定制化展示在某个工具页面上,帮助我们排查无线端问题。

多场景:即便对某一个应用来说,除了多端以外,所承载的业务场景也是繁多的。Tracer可以按照应用自定义场景,分业务场景对在线调式功能进行数据收集、规则配置管理和信息定制。

  • 3.接入成本低:

Tracer对于应用来说可提供SDK的方式,对应用来说tracer在嵌入应用的入口就是一个web filter,Tracer有相应的api规范,应用只需要将自己业务需要的跟某次请求关联重要的数据按照api规范进行收集。

protected Tracer tracer1 = TracerManager.getTracer("service1");
protected Tracer tracer2 = TracerManager.getTracer("service2");

//此方法适用于收集的tracer类型是KV结构的map类型时
tracer1.debug("key1",value1);
//此方法适用于收集的tracer类型是在同一个key上叠加value,组成list类型时
tracer2.debugAppend("key1",value1);
tracer2.debugAppend("key1",value2);

当前应用请求在安全规则校验通过以后,Tracer才会开启在线调式功能,允许应用收集基础数据。根据请求生成一个随机标志作为key,收集到的数据以json格式作为value,存到tair中。与当前请求相对应的这个tairkey会给到应用方,供查看收集到的调式信息或进一步利用此数据获取详细诊断信息。当然这些都是应用所不需要关心的。

Tracer平台化发展及思考

Tracer的目标是平台化产品,也一直在往这个方向去努力。
未来Tracer会对接更多的有在线调式需求的应用和业务场景,对Tracer和应用来说最关键的是能一一对应在线请求的基础重要数据,复原用户线上的真实场景去排查问题。
Tracer会将应用基础数据和业务类诊断数据进行更友好的处理,为应用在线调式提供平台,不分端不分角色不分业务都能够具备在线调式的可能。

猜你喜欢

转载自yq.aliyun.com/articles/617352