简介
跟踪代表了请求或操作在分布式系统所有节点(尤其是容器化应用或微服务架构)中的完整历程。跟踪是发现瓶颈和互连问题的理想可观测性信号。
跟踪由一个或多个 span 组成。Span 是跟踪中的工作单元,它具有相对于跟踪开始时间的开始时间、持续时间以及工作单元的操作名称。它通常引用一个父 span,除非它是跟踪中的第一个(或根)span。它经常包含与 span 本身相关的键/值属性,例如请求中使用的 HTTP 方法,以及其他元数据,例如服务名称、子 span 事件或到其他 span 的链接。
根据定义,跟踪永远不会完整。即使自上次推送以来已过去几天,您仍然可以随时推送另一批 span。当接收到请求已存储跟踪的查询时,Tempo 等跟踪后端会查找该特定跟踪的所有 span,并将它们整理成返回结果。如果跟踪数据非常大,检索跟踪数据可能会出现问题。
跟踪示例
首先,您网站上的用户在表单中输入其电子邮件地址以订阅您的邮件列表。他们单击 Enter。此初始事务会生成一个跟踪 ID,该 ID 随后与系统内处理链中的每次交互关联起来。
接下来,用户的电子邮件地址是流经您系统的数据。在云计算世界中,单击一个按钮可能会触发计算基础设施中多个不同节点上运行的各种微服务中的许多下游流程。
结果,电子邮件地址会发送到负责验证的微服务。如果电子邮件通过此检查,则数据库会存储该地址。
在此过程中,匿名微服务会从地址中删除个人身份数据,并添加额外元数据,然后将其发送到市场营销资格评估微服务。此微服务会确定请求是否来自互联网的特定目标区域。
服务响应,数据从每个服务流回,有时会触发系统中额外的事件。在此过程中,运行这些服务的节点会写入日志,并带有时间戳,显示信息通过的时间。
最后,请求和响应活动结束。没有其他 span 附加到该跟踪 ID。
跟踪和跟踪 ID
设置跟踪会为所有这些事件添加一个标识符,即跟踪 ID。跟踪 ID 在请求发起时生成。当请求和响应在整个系统中生成活动时,该相同的跟踪 ID 会应用于每个 span。
跟踪 ID 允许您跟踪或跟随请求,因为它在您的混乱的云计算系统中从节点流向节点,从服务流向微服务,流向 Lambda 函数,流向任何地方,然后返回。这会记录并显示为 span。
这里有一个 Grafana Cloud 中显示两页的示例。第一页(编号 1)显示了使用“探索”功能进行的查询。在查询结果中,您可以看到添加到应用程序中的 TraceID 字段。该字段包含一个 Tempo 跟踪 ID。第二页(编号 2)使用相同的“探索”功能,使用该 TraceID 执行 Tempo 搜索。然后,它将一组 span 显示为水平条,每个条表示系统的不同部分。
跟踪有什么用?
跟踪可以帮助您找到瓶颈。像 Grafana 这样的应用程序可以将跟踪可视化,以图形方式表示数据流路径中的每个步骤完成所需的时间。它可以显示附加请求的起点和终点,以及您的系统如何响应。这些数据可帮助您找到问题区域,通常在您意想不到或如果没有此跟踪请求流的能力就无法找到的地方。
了解更多
有关跟踪的更多信息,请参阅: