前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Linkerd 2.10(Step by Step)—使用 Linkerd 进行分布式跟踪

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

作者头像
为少
发布于 2021-07-07 03:13:10
发布于 2021-07-07 03:13:10
91800
代码可运行
举报
文章被收录于专栏:黑客下午茶黑客下午茶
运行总次数:0
代码可运行

Linkerd 2.10 系列

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 扩展,请运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
linkerd jaeger install | kubectl apply -f -

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
linkerd jaeger check

安装 Emojivoto

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
linkerd inject https://run.linkerd.io/emojivoto.yml | kubectl apply -f -

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n emojivoto rollout status deploy/web

修改应用

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n emojivoto set env --all deploy OC_AGENT_HOST=collector.linkerd-jaeger:55678

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

探索 Jaeger

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
linkerd jaeger dashboard

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

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

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

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

清理

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
linkerd jaeger uninstall | kubectl delete -f -
kubectl delete ns emojivoto

带上你自己的 Jaeger

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,您可以使用以下命令配置跟踪:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
controller:
  config:
    enable-opentracing: "true"
    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 collectorOpenCensus agent exporter 接收跟踪数据, 并可能在将该数据发送到 Jaeger 之前进行转换和过滤。将 OpenCensus exporter 发送到 OpenCensus collector 为我们提供了很大的灵活性:我们可以切换到 OpenCensus 支持的任何后端,而无需中断应用程序。

后端: Jaeger

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

Linkerd

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Linkerd进行分布式跟踪的指南
我们很高兴地宣布Linkerd 2.6增加了对分布式跟踪的支持!这意味着Linkerd数据平面代理,现在可以发出跟踪跨度(span),允许你查看请求在跟踪请求的Linkerd代理中花费的确切时间。由于在实践中使用分布式跟踪是相当困难的,在这篇文章中,我们收集了一个参考架构,并推荐了使用Linkerd进行分布式跟踪的最佳方法。
CNCF
2019/12/04
1K0
Kubernetesr的Service Mesh(第7部分):让分布式跟踪变得简单
在这篇文章中,我们将通过一个简单的例子来介绍一下Linkerd和Zipkin如何在Kubernetes(Google开源的容器集群管理系统)中协同工作以自动获得分布式跟踪,只需要对应用程序进行一些小小的修改。
Techeek
2018/01/12
1.2K0
Kubernetesr的Service Mesh(第7部分):让分布式跟踪变得简单
Linkerd 2.10(Step by Step)—Ingress 流量
从 Linkerd 2.9 版开始,有两种方式可以让 Linkerd 代理 与您的 Ingress Controller 一起运行。
为少
2021/07/07
1.4K0
Linkerd 2.10(Step by Step)—安装 Linkerd
在使用 Linkerd 之前,您需要安装核心控制平面。本页介绍了如何实现这一点,以及您可能遇到的常见问题。
为少
2021/07/07
7100
Linkerd 2.10(Step by Step)—Linkerd 和 Pod 安全策略 (PSP)
Linkerd 控制平面带有自己的最低特权 Pod Security Policy 和相关的 RBAC 资源。仅当启用 PodSecurityPolicy admission controller 时,才会强制执行此 Pod 安全策略。
为少
2021/07/07
4570
Jaeger和OpenTelemetry
最近,OpenTelemetry宣布成为CNCF新的沙箱项目,由OpenTracing和OpenCensus[1]、[2]、[3]、[4]合并而成。已经有几个人问我,OpenTelemetry对Jaeger项目(在CNCF孵化阶段)意味着什么,以及它是否会取代Jaeger。我将在这篇文章中尝试回答这些问题。
CNCF
2019/12/04
5K0
Jaeger和OpenTelemetry
OpenTelemetry入门看这一篇就够了|公开课
在本文结束时,您将了解如何使用 OpenTelemetry Operator 在应用程序中实现跟踪,而无需更改任何代码。
我是阳明
2023/09/11
16.9K2
OpenTelemetry入门看这一篇就够了|公开课
Linkerd 2.10—使用 Debug Sidecar,注入调试容器来捕获网络数据包
调试服务网格(service mesh)可能很困难。当某些东西不起作用时, 是代理(proxy)有问题吗?与应用程序(application)?与客户端(client)?与底层网络?(underlying network)有时, 没有什么比查看原始网络数据更好的了。
为少
2021/07/07
7250
Linkerd 2.10(Step by Step)—多集群通信
本指南将引导您安装和配置 Linkerd,以便两个集群可以与托管在两个集群上的服务通信。在本指南结束时,您将了解如何在不同集群上的服务之间分配流量。
为少
2021/07/07
7690
Linkerd 2.10(Step by Step)—修改代理日志级别
发送日志对于网络代理来说是一项昂贵的操作, 默认情况下,Linkerd 数据平面代理配置为仅记录异常事件。但是,有时增加代理日志的详细程度以帮助诊断代理行为很有用。令人高兴的是,Linkerd 允许您动态修改这些日志。
为少
2021/07/07
6470
分布式链路追踪
微服务架构 作为云原生核心技术之一,提倡将单一应用程序划分成一组小的服务(微服务),服务之间互相协调、互相配合,为用户提供最终价值。
gopher云原生
2021/10/18
1.3K1
Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
GitOps 是一种使用 Git 作为单一事实来源自动管理和交付 Kubernetes 基础设施和应用程序的方法。它通常利用一些软件代理来检测和协调 Git 中受版本控制的工件与集群中运行的工件之间的任何差异。
为少
2021/07/07
1.9K0
Linkerd 2.10(Step by Step)—优雅的 Pod 关闭
当 Kubernetes 开始终止一个 Pod 时,它首先向该 Pod 中的所有容器发送一个 TERM 信号。当 Linkerd 代理 sidecar 收到此信号时, 它将立即开始正常关闭, 拒绝所有新请求并允许现有请求在关闭之前完成。
为少
2021/07/07
5040
Linkerd 2.10—设置服务配置文件
Service profiles 为 Linkerd 提供 了关于服务以及如何处理服务请求的附加信息。
为少
2021/07/07
5390
详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
Linkerd 提供了许多功能,如:自动 mTLS、自动代理注入、分布式追踪、故障注入、高可用性、HTTP/2 和 gRPC 代理、负载均衡、多集群通信、重试和超时、遥测和监控、流量拆分(金丝雀、蓝/绿部署)等。
为少
2021/07/07
1.4K0
Linkerd 2.10(Step by Step)—手动轮换控制平面 TLS 凭证
Linkerd 的自动 mTLS 功能 使用一组 TLS 凭据为代理生成 TLS 证书:信任锚、颁发者证书和私钥。信任锚的有效期有限:365 天(如果由 linkerd install 生成)或 自定义值(如果手动生成)。
为少
2021/07/07
6350
浅谈分布式链路追踪之Jaeger
因此,在实际的生产业务场景中,为了能够全方位地追踪每一个相关组件的行为轨迹,就需要一些能够可以帮助我们理解、追踪系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和暴露问题之间的相关关键点,从而高效地解决问题。基于上述痛点,此时,APM 系统便应运而生。
Luga Lee
2021/12/09
3K0
浅谈分布式链路追踪之Jaeger
Linkerd 2.10(Step by Step)—配置代理并发
Linkerd 数据平面的代理是多线程(multithreaded)的, 并且能够运行可变数量的工作线程, 以便它们的资源使用(resource usage)与应用程序工作负载(application workload)相匹配。
为少
2021/07/07
6480
DevOps 漫谈:基于OpenCensus构建分布式跟踪系统
随着互联网技术的高速发展,以往单应用的服务架构已经很难处理如山洪般增长的信息数据,随着云计算技术的大规模应用,以微服务、RESTful 为代表的各种软件架构广泛应用,跨团队、跨编程语言的大规模分布式系统也越来越多。相对而言,现在要理解系统行为,追踪诊断性能问题会复杂得多。
RiboseYim
2018/04/28
2.4K0
DevOps 漫谈:基于OpenCensus构建分布式跟踪系统
Linkerd 2.10(Step by Step)—安装多集群组件
Linkerd 中的多集群支持需要在默认控制平面安装之上进行额外的安装和配置。本指南将介绍此安装和配置以及您可能遇到的常见问题。
为少
2021/07/07
5820
推荐阅读
相关推荐
使用Linkerd进行分布式跟踪的指南
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文