天天看点

在k8s上搭建微服务链路追踪,并将数据存储到ES

作者:简简单单程序员

Jaeger 是一个分布式追踪系统,它用于监控、分析和诊断微服务之间的交互。Jaeger 可以帮助开发者和运维团队识别性能瓶颈、调试请求路径和理解系统行为。Jaeger 由 Uber 开发,并作为 Cloud Native Computing Foundation(CNCF)的一部分,它与 Kubernetes 和 Elasticsearch 等云原生技术非常兼容。

将 Jaeger 数据存储在 Elasticsearch 上具有以下优点:

  1. 高可扩展性:Elasticsearch 是一个分布式搜索和分析引擎,它具有高度可扩展性,可以轻松地在多个节点上进行分片和复制。这使得 Elasticsearch 成为大型微服务环境中处理 Jaeger 数据的理想选择。
  2. 高性能查询:Elasticsearch 提供了高性能的实时查询,这对于 Jaeger 这样需要高速查询追踪数据的工具非常重要。借助 Elasticsearch,您可以快速地查询和分析跨越数百万条追踪的数据。
  3. 数据可视化和分析:Elasticsearch 与 Kibana 集成良好,Kibana 是一个强大的数据可视化和分析工具。您可以使用 Kibana 创建定制的仪表板和可视化工具,深入了解您的 Jaeger 数据,以便更好地监控和优化您的微服务。
  4. 数据持久性和备份:Elasticsearch 支持数据的快照和恢复功能,这使得备份和恢复 Jaeger 数据变得更加简单。这对于保护关键追踪数据和满足业务连续性需求至关重要。
  5. 成熟的生态系统:Elasticsearch 拥有一个庞大的社区和丰富的插件生态系统。这意味着您可以利用现有的工具和插件轻松地扩展和定制 Jaeger 和 Elasticsearch 的功能,以满足您的特定需求。
  6. 云原生兼容性:Elasticsearch 与 Kubernetes 和其他云原生技术非常兼容,这使得在 Kubernetes 等平台上部署和管理 Jaeger 和 Elasticsearch 变得更加简单。

部署Jaeger

镜像:jaegertracing/all-in-one:1.30

环境变量:

# 设置存储类型为elasticsearch
SPAN_STORAGE_TYPE=elasticsearch
# 设置es地址
ES_SERVER_URLS=http://176.16.77.80:9200           
在k8s上搭建微服务链路追踪,并将数据存储到ES

端口说明

Jaeger Agent:
端口 6831/UDP:用于接收由客户端(例如 Jaeger 客户端库)发送的追踪数据(采用 Thrift over UDP 协议)。
端口 6832/UDP:用于接收由客户端(例如 Jaeger 客户端库)发送的追踪数据(采用 Jaeger 协议)。
端口 5778/HTTP:用于接收采样策略配置的查询请求。

Jaeger Collector:
端口 14250/GRPC:用于接收由 Jaeger Agent 发送的追踪数据(采用 gRPC 协议)。
端口 14268/HTTP:用于接收由 Jaeger Agent 发送的追踪数据(采用 Thrift over HTTP 协议)。
端口 9411/HTTP:用于接收 Zipkin 格式的追踪数据(采用 Zipkin 协议)。
端口 14269/HTTP:用于接收 Jaeger Collector 的健康检查请求。

Jaeger Query:
端口 16686/HTTP:用于提供 Jaeger UI 和查询 API,以支持查询和可视化追踪数据。

Jaeger Ingester(可选):
端口 14270/HTTP:用于接收 Jaeger Ingester 的健康检查请求。           

Ingress

在k8s上搭建微服务链路追踪,并将数据存储到ES

展示效果

jaeger 的搜索页面是 Jaeger UI 的核心部分,它提供了丰富的功能以帮助您查询、分析和可视化分布式追踪数据。以下是 Jaeger 搜索页面的一些关键要素:

  1. 服务列表:显示收集到的所有服务名称。您可以从这个下拉列表中选择要查询的特定服务。
  2. 操作列表:在选择服务后,此下拉列表将显示与所选服务相关的所有操作。您可以选择一个特定操作以限制搜索范围。
  3. 时间范围:您可以选择自定义的时间范围或使用预定义的时间范围,如最近1小时、最近2小时等,以限制查询结果。
  4. 追踪结果限制:您可以设置要在查询结果中显示的追踪数量的上限。
  5. 搜索条件:您可以添加多个搜索条件(如标签、最小/最大持续时间)以更精确地过滤查询结果。
  6. 搜索按钮:单击此按钮以执行查询。查询结果将在下方的追踪结果列表中显示。
  7. 追踪结果列表:显示查询结果。每个追踪都以一个可折叠的条目形式展示,包含有关追踪的基本信息,如追踪ID、开始时间、持续时间等。点击追踪条目可展开详细信息,如追踪的时间轴视图和关联的 span 信息。
  8. 追踪时间轴视图:展示追踪中各个 span 的执行顺序和时间分布。这有助于识别潜在的性能瓶颈和错误。
  9. Span 详情:展示有关单个 span 的详细信息,如操作名称、持续时间、关联服务、标签和日志。

通过这些要素,Jaeger 搜索页面为您提供了一个直观的方式来查询和分析追踪数据,从而帮助您诊断和解决分布式系统中的性能问题和错误。

在k8s上搭建微服务链路追踪,并将数据存储到ES

Jaeger 的追踪页面为分析分布式系统的性能和故障提供了丰富的信息。它展示了一次完整的请求调用过程中各个服务及其相互交互的详细情况。以下是追踪页面能为我们提供的帮助及如何进行分析:

  1. 识别性能瓶颈:通过观察追踪中各个 span 的执行顺序和时间分布,我们可以识别出可能存在性能瓶颈的服务或操作。较长的 span 持续时间可能表明某个服务或操作的性能较差,需要进一步优化。
  2. 发现错误和异常:追踪页面展示了每个 span 的状态,如成功或错误。我们可以通过查看 span 的状态和关联日志来发现潜在的错误或异常,从而帮助我们快速定位问题。
  3. 理解服务依赖关系:追踪页面展示了各个服务之间的调用关系,帮助我们更好地理解系统的架构和服务依赖。这对于诊断潜在的依赖问题或设计优化非常有帮助。
  4. 分析请求路径:通过查看追踪中的调用链,我们可以了解一次请求在分布式系统中的传播过程。这有助于分析和优化请求路径,以提高系统的整体性能。

分析追踪页面的方法:

  1. 检查关键指标:首先观察追踪中的关键指标,如总持续时间、各个 span 的持续时间、成功与失败的 span 数量等,以识别可能存在问题的区域。
  2. 深入研究问题区域:针对发现的问题区域,查看 span 的详细信息、关联日志和标签,以获取更多关于问题的上下文信息。
  3. 查看服务间交互:分析追踪中的服务依赖关系,检查服务间的调用是否符合预期,以及是否存在不必要的依赖或循环依赖。
  4. 优化和调整:根据分析结果,对系统进行优化和调整,如优化慢速服务、修复错误、优化请求路径等。然后继续监控和分析追踪数据,以验证优化效果。

通过仔细分析 Jaeger 的追踪页面,我们可以更好地了解分布式系统的性能、依赖关系和潜在问题,从而帮助我们诊断和解决问题,提高系统的整体稳定性和性能。

在k8s上搭建微服务链路追踪,并将数据存储到ES

Jaeger在ES中的存储

Jaeger 在 Elasticsearch 中存储了以下几个主要的索引,它们用于存储追踪数据和相关信息:

  1. jaeger-span-YYYY-MM-DD:这个索引用于存储 span 数据,包括 span 的 ID、名称、开始时间、持续时间、关联的追踪 ID、标签等。这些数据是构建和分析完整追踪信息的基础。
  2. jaeger-service-YYYY-MM-DD:这个索引用于存储系统中出现的所有服务名称。服务名称在 Jaeger UI 中的服务下拉列表中显示,用于筛选和查找特定服务的追踪数据。
  3. jaeger-operation-YYYY-MM-DD:这个索引用于存储系统中出现的所有操作名称。操作名称在 Jaeger UI 中的操作下拉列表中显示,用于筛选和查找特定操作的追踪数据。
  4. jaeger-dependencies-YYYY-MM-DD:这个索引用于存储服务之间的依赖关系信息。这些数据用于构建和显示 Jaeger UI 中的依赖关系图,帮助我们了解系统的架构和服务依赖。

这些索引的作用主要是存储追踪数据以及相关的元数据,使得 Jaeger 可以通过 UI 或 API 查询、筛选和分析这些数据,从而帮助我们诊断分布式系统的性能问题和故障。通过对这些索引的数据进行实时监控和分析,我们可以更好地理解系统的运行状况,并及时发现和解决潜在问题。

在k8s上搭建微服务链路追踪,并将数据存储到ES

继续阅读