Linkerd2.10中文手册正在不断修订更新中:https://linkerd.hacker-linner.com在实践中使用分布式追踪可能会很复杂,为了得到来自为了在更高层次上解释你得到了什么以及它是如何完成的,我们整理了一个神话列表。本指南将引导您完成配置emojivoto和启用跟踪。跳到最后,获取有关通过Linkerd使用分布式跟踪的最佳方式的一些建议。要使用分布式跟踪,您需要:安装Linkerd-Jaeger扩展。修改您的应用程序以发出跨度。对于emojivoto,完成所有这些步骤后,您将拥有一个如下所示的拓扑:先决条件要使用本指南,您需要在集群上安装Linkerd。如果您还没有这样做,请按照安装Linkerd的指南进行操作。安装Linkerd-Jaeger扩展获取分布式跟踪设置的第一步是将Linkerd-Jaeger扩展安装到您的集群上。这个扩展由一个收集器、一个Jaeger后端和一个Jaeger注入器组成。收集器使用从网格和您的应用程序发出的跨度,并将它们发送到Jaeger后端,后者存储它们并提供一个仪表板来查看它们。Jaeger-injector负责配置Linkerd代理以发出跨度。要安装Linkerd-Jaeger扩展,请运行以下命令:linkerdjaegerinstallkubectlapply-f-您可以通过运行以下命令验证Linkerd-Jaeger扩展是否已正确安装:linkerdjaegercheck安装Emojivoto将emojivoto添加到您的集群并使用Linkerd代理注入它:linkerdinjecthttps//run.linkerd.io/emojivoto.yml|kubectlapply-f-在进行下一步之前,确保一切都已启动并使用kubectl运行:kubectl-nemojivotorolloutstatusdeploy/web修改应用程序和服务网格与分布式跟踪的大多数功能不同,您需要修改应用程序的源代码。跟踪需要某种方式将传入请求绑定到您的应用程序并将传出请求绑定到相关服务。为此,每个请求都会添加一些标头,其中包含用于跟踪的唯一ID。Linkerd使用b3传播格式将这些东西联系在一起。我们已经修改了emojivoto以使用此信息来检测其请求,此提交显示了这是如何完成的。对于大多数编程语言,只需添加一个客户端库来处理这个问题。Emojivoto使用OpenCensus客户端,但也可以使用其他客户端。要在emojivoto中启用跟踪,请运行:kubectl-nemojivotosetenv--alldeployOC_AGENT_HOST=collector.linkerd-jaeger:55678此命令将添加一个环境变量,使应用程序能够传播上下文并发出跨度。探索Jaeger随着投票机器人开始跟踪每个请求,跨度现在应该出现在Jaeger中。要进入UI,请运行:linkerdjaegerdashboard您可以在下拉列表中搜索任何服务,然后单击FindTraces。vote-bot是一个很好的入门方式。单击特定跟踪将提供所有详细信息,您将能够看到每个代理的跨度!该输出中肯定有很多linkerd-proxy跨度。在内部,代理有服务器端和客户端。当请求通过代理时,它被服务器接收,然后由客户端发送。对于在两个MeshPod之间传递的单个请求,总共会有4个跨度。当请求遍历该代理时,两个将在源端,当远程代理接收请求时,两个将在目标端。此外,由于代理将应用程序元数据添加为跟踪属性,因此用户可以通过单击指标表中的Jaeger图标直接从linkerd-web仪表板跳转到相关资源跟踪,如下所示。要清理,通过运行以下命令来卸载Linkerd-Jaeger扩展和emojivoto:-Jaeger扩展中内置的Jaeger实例。linkerdjaegerinstall--setcollector.jaegerAddr='http://my-jaeger-collector.my-jaeger-ns:14268/api/traces'|kubectlapply-f-也可以手动编辑OpenCensus配置以将其导出到任何它支持的后端结尾。有关完整列表,请参阅OpenCensus文档。故障排除我没有看到代理的任何跨度Linkerd代理使用b3传播格式。一些客户端库,例如Jaeger,默认使用不同的格式。您需要将客户端库配置为使用b3格式,以便代理参与跟踪。建议Ingressingress是分布式跟踪的一个特别重要的组件,因为它创建每个跟踪的根跨度,并负责决定是否应该对该跟踪进行采样。让入口做出所有采样决策可确保对整个轨迹进行采样或不进行采样,并避免创建“部分轨迹”。分布式跟踪系统都依赖于服务来将有关当前跟踪的元数据从接收到的请求传播到发送的请求。此元数据称为跟踪上下文,通常编码在一个或多个请求标头中。有许多不同的tracecontext标头格式,虽然我们希望生态系统最终会融合到像W3Ctracecontext这样的开放标准,但我们今天只使用b3格式。作为最早广泛使用的格式之一,它的支持最为广泛,尤其是在Nginx等ingress中。此参考架构包括一个简单的Nginx配置,它对50%的跟踪进行采样并将跟踪数据发送到收集器(使用Zipkin协议)。此处可以使用任何入口控制器代替Nginx,只要它:支持概率采样以b3格式编码跟踪上下文以OpenCensus收集器支持的协议发出跨度如果您使用helm安装了ingress-nginx,则可以配置跟踪::config:enable-opentracing:"true"zipkin-collector-host:linkerd-collector.linkerd客户端库虽然服务可以手动传播跟踪传播标头,但使用执行以下三项操作的库通常要容易得多:传播跟踪上下文从传入请求标头到传出请求标头修改跟踪上下文(即开始新跨度)将此数据传输到跟踪收集器我们建议在您的服务中使用OpenCensus并配置它:b3传播(这是默认设置)OpenCensus代理导出器TheOpenCensus代理导出器将通过gRPCAPI将跟踪数据导出到OpenCensus收集器。如何配置OpenCensus的详细信息因语言而异,但有许多流行语言的指南。您还可以使用我们的示例应用程序Emojivoto查看Go中的端到端示例。您可能会注意到OpenCensus项目处于维护模式,并将成为OpenTelemetry的一部分。不幸的是,OpenTelemetry尚未准备好投入生产,因此OpenCensus仍然是我们目前的推荐。许多其他跟踪客户端库也可用。只需确保正在使用b3传播格式,并且客户端库可以以收集器配置为接收的格式导出其跨度。收集器:OpenCensusOpenCensus收集器从OpenCensus代理导出器接收跟踪数据,并可能在将数据发送到Jaeger之前转换和过滤该数据。将OpenCensus导出器发送到OpenCensus收集器为我们提供了很大的灵活性:我们可以切换到OpenCensus支持的任何后端,而不会破坏应用程序。后端:JaegerJaeger是使用最广泛的跟踪后端之一,并且有充分的理由:它易于使用并且在可视化跟踪方面做得很好。但是,可以改用OpenCensus支持的任何后端。Linkerd如果您的应用程序注入了Linkerd,Linkerd代理将参与跟踪并将跟踪数据发送到OpenCensus收集器。这丰富了跟踪数据,并允许您准确查看请求在代理和线路上花费了多长时间。虽然Linkerd只能主动参与使用b3传播格式的跟踪,但Linkerd将始终透明地转发未知请求标头,这意味着它永远不会干扰使用其他传播格式的跟踪。
