Linkerd 2.10(Step by Step)之使用 Linkerd 进行分布式跟踪

Linkerd 2.10(Step by Step)之使用 Linkerd 进行分布式跟踪

作者:为少 2021-06-17 14:29:39

开发

前端

分布式 在实践中使用分布式跟踪可能很复杂, 为了从高层次解释您得到了什么以及它是如何完成的, 我们整理了一个list of myths。

[[406175]]

Linkerd 2.10 中文手册持续修正更新中:

https://linkerd.hacker-linner.com

在实践中使用分布式跟踪可能很复杂, 为了从高层次解释您得到了什么以及它是如何完成的, 我们整理了一个list of myths。

本指南将引导您完成 emojivoto 的配置和启用跟踪。关于使用 Linkerd 使用分布式跟踪的最佳方式的一些建议,请跳到最后。

要使用分布式跟踪,您需要:

  • 安装 Linkerd-Jaeger 扩展。
  • 修改您的应用程序以发出跨度。

在 emojivoto 的情况下,一旦所有这些步骤都完成,就会有一个看起来像这样的拓扑:

先决条件

  • 要使用本指南,您需要在集群上安装 Linkerd。如果您还没有这样做,请按照安装 Linkerd 指南进行操作。

安装 Linkerd-Jaeger 扩展

获取分布式跟踪设置的第一步是将 Linkerd-Jaeger 扩展安装到您的集群上。这个扩展由一个收集器(collector)、一个 Jaeger 后端和一个 Jaeger-injector 组成。收集器消耗从网格和您的应用程序发出的跨度, 并将它们发送到 Jaeger 后端,后者存储它们并提供仪表板以查看它们。Jaeger-injector 负责配置 Linkerd 代理以发出 span。

要安装 Linkerd-Jaeger 扩展,请运行以下命令:

  1. linkerd jaeger install | kubectl apply -f - 

您可以通过运行以下命令来验证 Linkerd-Jaeger 扩展是否已正确安装:

  1. linkerd jaeger check 

安装 Emojivoto

将 emojivoto 添加到您的集群并使用 Linkerd 代理注入它:

  1. linkerd inject https://run.linkerd.io/emojivoto.yml | kubectl apply -f - 

在进入下一步之前,请确保一切都已启动并使用 kubectl 运行以下命令:

  1. kubectl -n emojivoto rollout status deploy/web 

修改应用

与服务网格的大多数功能不同,分布式跟踪需要修改应用程序的源。跟踪需要某种方式将传入的请求与您的应用程序与传出的请求绑定到相关服务。为此,将向每个请求添加一些标头,其中包含跟踪的唯一 ID。Linkerd 使用 b3 propagation 传播格式将这些东西联系在一起。

我们已经修改了 emojivoto 以使用此信息检测其请求,此 commit 显示了这是如何完成的。对于大多数编程语言,它只需要添加一个客户端库来处理这个问题。Emojivoto 使用 OpenCensus 客户端,但也可以使用其他客户端。

要在 emojivoto 中启用跟踪,请运行:

  1. kubectl -n emojivoto set env --all deploy OC_AGENT_HOST=collector.linkerd-jaeger:55678 

此命令将添加一个环境变量,使应用程序能够传播上下文并发出跨度。

探索 Jaeger

随着 vote-bot 开始跟踪每个请求,跨度现在应该出现在 Jaeger。要进入 UI,运行:

  1. linkerd jaeger dashboard 

 

您可以在下拉列表中搜索任何服务,然后单击 Find Traces。vote-bot 是一个很好的入门方式。

单击特定跟踪将提供所有详细信息,您将能够看到每个代理的跨度!

该输出中肯定有很多 linkerd-proxy 跨度。在内部,代理具有服务器端和客户端。当请求通过代理时,由服务器接收,然后由客户端发出。对于在两个网状 Pod 之间传递的单个请求,总共会有 4 个跨度。当请求遍历该代理时,两个将在源端,当远程代理接收到请求时,两个将在目标端。

此外,由于代理添加了应用元数据作为跟踪属性,用户可以通过单击度量表中的 Jaeger 图标, 直接从 linkerd-web 仪表板直接跳转到相关资源跟踪,如下所示

清理

要进行清理,请通过运行以下命令卸载 Linkerd-Jaeger 扩展和 emojivoto:

  1. linkerd jaeger uninstall | kubectl delete -f - 
  2. kubectl delete ns emojivoto 

带上你自己的 Jaeger

如果您有一个现有的 Jaeger 安装, 您可以配置 OpenCensus 收集器向它发送跟踪, 而不是 Linkerd-Jaeger 扩展中内置的 Jaeger 实例。

  1. linkerd jaeger install --set collector.jaegerAddr='http://my-jaeger-collector.my-jaeger-ns:14268/api/traces' | kubectl apply -f - 

也可以手动编辑 OpenCensus 配置以将其导出到它支持的任何后端。有关完整列表,请参阅 OpenCensus 文档。

故障排除

我没有看到代理的任何跨度

Linkerd 代理使用 b3 propagation 传播格式。一些客户端库,例如 Jaeger,默认使用不同的格式。您需要将客户端库配置为使用 b3 格式让代理参与跟踪。

建议

Ingress

ingress 是分布式跟踪的一个特别重要的组件,因为它创建每个跟踪的根跨度, 并负责决定是否应该对该跟踪进行采样。让 ingress 做出所有采样决策可确保对整个轨迹进行采样或不采样, 并避免创建“部分轨迹(partial traces)”。

分布式跟踪系统都依赖于服务来传播有关从接收到的请求到发送的请求的当前跟踪的元数据。这一元数据称为跟踪上下文,通常编码在一个或多个请求标头中。有许多不同的跟踪上下文标头格式,虽然我们希望生态系统最终会收敛于像 W3C tracecontext 跟踪上下文这样的开放标准, 但我们今天只使用 b3 format。作为最早广泛使用的格式之一,它具有最广泛的支持,尤其是在 Nginx 等入口中。

此参考架构包括一个简单的 Nginx 配置,该配置对 50% 的跟踪进行采样并将跟踪数据发送到 收集器(使用 Zipkin 协议)。任何入口控制器都可以在这里代替 Nginx 使用,只要它:

  • 支持概率采样
  • 以 b3 格式编码跟踪上下文
  • 在 OpenCensus 收集器支持的协议中发出 span

如果使用 helm 安装 ingress-nginx,您可以使用以下命令配置跟踪:

  1. controller: 
  2.   config: 
  3.     enable-opentracing: "true" 
  4.     zipkin-collector-host: linkerd-collector.linkerd 

客户端库

虽然服务可以手动传播跟踪传播标头,但使用执行以下三件事的库通常要容易得多:

  • 将跟踪上下文从传入请求头传播到传出请求头
  • 修改跟踪上下文(即开始一个新的跨度)
  • 将此数据传输到跟踪收集器

我们建议在您的服务中使用 OpenCensus 并配置它:

  • b3 propagation (这是默认设置)
  • the OpenCensus agent exporter

OpenCensus agent exporter 将通过 gRPC API 将跟踪数据导出到 OpenCensus 收集器。如何配置 OpenCensus 的详细信息会因语言而异,但有许多流行语言的指南。您还可以使用我们的示例应用程序 Emojivoto 在 Go 中查看端到端示例。

您可能会注意到 OpenCensus 项目处于维护模式并将成为 OpenTelemetry 的一部分。不幸的是,OpenTelemetry 尚未准备好投入生产,因此 OpenCensus 仍然是我们目前的建议。

也可以使用许多其他跟踪客户端库。只需确保正在使用 b3 传播格式, 并且客户端库可以以收集器已配置为接收的格式导出其跨度。

收集器: OpenCensus

OpenCensus collector 从 OpenCensus agent exporter 接收跟踪数据, 并可能在将该数据发送到 Jaeger 之前进行转换和过滤。将 OpenCensus exporter 发送到 OpenCensus collector 为我们提供了很大的灵活性:我们可以切换到 OpenCensus 支持的任何后端,而无需中断应用程序。

后端: Jaeger

Jaeger 是使用最广泛的跟踪后端之一,并且有充分的理由:它易于使用并且在可视化跟踪方面做得很好。但是,可以改用 OpenCensus 支持的任何后端。

Linkerd

如果您的应用程序注入了 Linkerd,Linkerd 代理将参与跟踪并将跟踪数据发送到 OpenCensus 收集器。这丰富了跟踪数据,并允许您准确查看请求在代理和线路上花费的时间。

虽然 Linkerd 只能主动参与使用 b3 传播格式的trace, 但 Linkerd 将始终透明地转发未知的请求头, 这意味着它永远不会干扰使用其他传播格式的 trace。

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/232745.html<

(0)
管理的头像管理
上一篇2025-04-20 07:37
下一篇 2025-04-20 07:39

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注