分布式追踪的形态
1. 分布式追踪基础
在一些支持用户管理进程上下文对象的语言(如 Go)中,伪代码会按特定风格编写。而在 Java 或 C# 等语言里,线程本地存储能提供类似功能。关键在于,若要为子函数创建跨度(span),就需将跨度上下文传递给它们,可借助语言自身机制实现,比如通过函数参数传递单个跨度对象。
每个子跨度通常有一个父跨度,但在每个方法签名中都添加跨度上下文的支持会显得很繁琐。不过,有一种更简便的方法,即使用范围管理器(scope manager),不过这依赖于具体的技术和语言。一般来说,范围管理器利用线程本地存储自动保存对活动跨度的引用,从而无需手动操作,还能基于活动跨度创建新的子跨度。
2. 对不同架构的追踪策略
2.1 对微服务和无服务器架构的追踪
分布式追踪与微服务/无服务器架构堪称绝配。不过,并非所有微服务在追踪方面都表现相同。基于跨度的分布式请求追踪有一些特性,遵循这些特性可为微服务或无服务器架构创建更有用的追踪信息。以下是一些建议和注意事项:
- 建议 :
- 优先考虑白盒插桩 :微服务应足够小,以便能进行基于库的插桩,将追踪代码集成到服务中。这样不仅能使追踪数据更准确地反映服务实际功能,还能随着服务更新逐步完善追踪。
- 捕获语义信息 :为每个跨度添加相关的语义属性,如 OpenTelemetry 的 span.kind 属性,能让你更全面准确地了解服务的运行情况。
- 创建重要属性 :考虑在调试生产问题时需要了
超级会员免费看
订阅专栏 解锁全文
900

被折叠的 条评论
为什么被折叠?



