[学习记录]Jaeger的第一步
jaeger是基于opentracing的一个追踪器,兼容opentracing标准。这项技术可以帮助开发者掌握分布式系统内的函数调用情况,分析函数性能、网络状况等等。
先列出相关参考文献:
https://github.com/yurishkuro/opentracing-tutorial opentracing语言教学
https://opentracing.io/docs/translations/ opentracing官方文档
https://github.com/aliyun/aliyun-log-jaeger/blob/master/README_CN.md?spm=a2c63.p38356.879954.12.32bf3defjg1BKu&file=README_CN.md 阿里云相关文档
jaeger有以下五个核心组件
jaeger-client:嵌入代码中的采集器,接收各个函数返回的追踪信息
jaeger-agent:接收client的数据并传给collector收集器
jaeger-collector:从agent或直接从client中获取追踪信息
storage:存储追踪信息
jaeger-query:查询组件,也是UI的提供者
对于jaeger或者说opentracing系工具来说,都只是创造了一个用来通信的通道,该通道专门用来收集trace信息,而trace信息则是由开发者在每个函数或者是关键步骤上自定义的,开发者只需要按照opentracing的标准整理并发送信息,jaeger就会自动获取并整理成便于阅读的形式。
jaeger的部署非常简单,既可以通过docker部署(参考https://github.com/yurishkuro/opentracing-tutorial),也可以在kubernetes上分布式部署(https://github.com/jaegertracing/jaeger-operator),但是需要注意,jaeger-operator是一个整合后的工具,同时提供了collector、storage、query、agent的功能,但client仍然需要程序员自己实现。
本文的重点主要介绍client的部分,所选语言为python
jaeger的语言api主要提供了以下功能,具体内容还是详见第一份参考资料,一步步教学非常详细
1.提供了span的实现用来传递trace信息,自动计算时间并允许提供name、tag、log用来记录更多信息
2.可以通过span中child_of属性指定父子关系,也可以通过tracer.start_active_span自动处理
3.rpc远程调用就是本地调用远端函数,可以说是serverless的原型中的原型了。(题外话)
4.在远端通过tracer.inject和extract的方式将远程调用时产生的trace传递过去,从而方便区分本地运行的时间与远程调用的时间(可能一共响应的10ms中,9ms来自网络,只有1ms用于远程函数的计算)
5.jaeger还提供了baggage的方式用来传递信息,和之前的inject-extract有点像,但这个更偏向于程序员传递特定信息,建议大小不要太大,因为所有包都要附加这个baggage中的内容。