Jaeger

OpenShift Container Platform 4.3

Jaeger 的安装、使用和发行注记信息

Red Hat OpenShift Documentation Team

摘要

本文档提供了有关如何在 OpenShift Container Platform 中使用 Jaeger 的信息

第 1 章 Jaeger 发行注记

1.1. Jaeger 概述

作为服务所有者,您可以使用 Jaeger 来检测您的服务,以收集与服务架构相关的信息。Jaeger 是一个开源的分布式追踪平台,可用来对现代的、云原生的基于微服务的应用程序中组件间的交互进行监控、创建网络配置集并进行故障排除。

使用 Jaeger 可让您执行以下功能:

  • 监控分布式事务
  • 优化性能和延迟时间
  • 执行根原因分析

Jaeger 基于厂商中立的 OpenTracing API 和工具。

1.2. 获取支持

如果您在执行本文档所述的某个流程时遇到问题,请访问红帽客户门户。您可通过该客户门户:

  • 搜索或浏览红帽知识库,了解有关红帽产品的技术支持文章。
  • 提交问题单给红帽支持。

    注意

    在提交问题单的同时提供您的集群信息,可以帮助红帽支持为您进行排除故障。

    • 这类信息可使用 oc adm must-gather 命令来收集。
    • 唯一的集群 ID。进入 (?) HelpOpen Support Case ,在提交问题单时自动填充集群 ID。
  • 访问其他产品文档。

如果您对本文档有任何改进建议,或发现了任何错误,请访问 Bugzilla,针对 OpenShift Container Platform 产品的 Documentation组件提交 Bugzilla 报告。请提供具体详情,如章节名称和 OpenShift Container Platform 版本。

1.3. OpenShift Jaeger 1.17.1 的新功能

此 OpenShift Jaeger 发行版本添加了对将 Jaeger 作为独立解决方案安装的支持,而不是作为 Red Hat OpenShift Service Mesh 的一个组件。

1.4. Jaeger 已知问题

Jaeger 中存在的限制:

  • 虽然 Kafka publisher 是 Jaeger 的一部分,但它并不被支持。
  • 不支持 Apache spark。
  • 仅支持自置备的 Elasticsearch 实例。此发行版本不支持外部 Elasticsearch 实例。

Jaeger 中已知的问题:

  • TRACING-1166 目前无法在断开网络连接的环境中使用 Jaeger 流策略。当一个 Kafka 集群被置备时,它会产生一个错误: Failed to pull image registry.redhat.io/amq7/amq-streams-kafka-24-rhel7@sha256:f9ceca004f1b7DCCB3b82d9a8027961f9fe4104e0ed69752c0bdd8078b4a1076
  • TRACING-809 Jaeger Ingester 与 Kafka 2.3 不兼容。当存在两个或多个 Jaeger Ingester 实例时,它会不断在日志中生成重新平衡信息。这是由于在 Kafka 2.3 里存在一个程序错误,它已在 Kafka 2.3.1 中修复。如需更多信息,请参阅 Jaegertracing-1819

第 2 章 Jaeger 架构

2.1. Jaeger 架构

每次用户在某个应用程序中执行一项操作时,一个请求都会在所在的系统上执行,而这个系统可能需要几十个不同服务的共同参与才可以做出相应的响应。Jaeger 提供了分布式追踪功能,可以在组成一个应用程序的多个微服务间记录请求的路径。

分布式追踪是用来将不同工作单元的信息关联起来的技术,通常是在不同进程或主机中执行的,以便理解分布式事务中的整个事件链。开发人员可以视觉化在大型微服务架构中调用的流程。它对理解序列化、并性和延迟来源会很有价值。

Jaeger 在微服务的整个堆栈中记录了独立请求的执行过程,并将其显示为 trace。trace是系统的数据/执行路径。一个端到端的 trace 由一个或者多个 span 组成。

span 代表 Jaeger 中的逻辑工作单元,它包含操作名称、操作的开始时间和持续时间,以及可能的标签(tag)和日志信息。span 可能会被嵌套并排序以模拟因果关系。

2.1.1. Jaeger 概述

作为服务所有者,您可以使用 Jaeger 来检测您的服务,以收集与服务架构相关的信息。Jaeger 是一个开源的分布式追踪平台,可用来对现代的、云原生的基于微服务的应用程序中组件间的交互进行监控、创建网络配置集并进行故障排除。

使用 Jaeger 可让您执行以下功能:

  • 监控分布式事务
  • 优化性能和延迟时间
  • 执行根原因分析

Jaeger 基于厂商中立的 OpenTracing API 和工具。

2.1.2. Jaeger 特性

Jaeger 追踪提供以下功能:

  • 与 Kiali 集成 – 当正确配置时,您可以从 Kiali 控制台查看 Jaeger 数据。
  • 高可伸缩性 – Jaeger 后端被设计为没有单一故障点,并可根据需要进行缩放。
  • 分布式上下文发布 – 允许您通过不同的组件连接数据以创建完整的端到端的 trace。
  • 与 Zipkin 的后向兼容性 – Jaeger 通过使用 Zipkin 格式(Thrift 或 JSON v1/v2)通过 HTTP 提供与 Zipkin 的后向兼容性。

2.1.3. Jaeger 架构

Jaeger 由几个组件组成,它们一起收集、存储和显示追踪数据。

  • Jaeger Client (Tracer, Reporter, instrumented application, client libraries)- Jaeger client 是 OpenTracing API 的具体语言实现。它们可以用来为各种现有开源框架(如 Camel (Fuse) 、Spring Boot (RHOAR) 、MicroProfile (RHOAR/Thorntail) 、Wilfly (EAP) 等提供分布式追踪工具。
  • Jaeger Agent (Server Queue, Processor Workers)- Jaeger 代理是一个网络守护进程,它会监听通过 User Datagram Protocol (UDP) 发送的 span,并发送到收集程序。这个代理应被放置在要管理的应用程序的同一主机上。这通常是通过如 Kubernetes 等容器环境中的 sidecar 来实现的。
  • Jaeger Collector (Que,Weue)- 与代理类似,该收集器可以接收 span,并将其放入内部队列以便进行处理。这允许收集器立即返回到客户端/代理,而不需要等待 span 进入存储。
  • Storage (Data Store) - 收集器需要一个持久的存储后端。Jaeger 带有一个可插入的机制用于 span 存储。请注意:在这个发行本中,唯一支持的存储是 Elasticsearch。
  • Query (Query Service) - Query 是一个从存储中检索 trace 的服务。
  • Ingester (Ingester Service) - Jaeger 可以使用 Apache Kafka 作为收集器和实际后备存储 (Elasticsearch) 之间的缓冲。Ingester 是一个从 Kafka 读取数据并写入另一个存储后端 (Elasticsearch) 的服务。
  • Jaeger Console – Jaeger 提供了一个用户界面,可让您可视觉地查看所分发的追踪数据。在搜索页面中,您可以查找 trace,并查看组成一个独立 trace 的 span 详情。

第 3 章 安装 Jaeger

3.1. 安装 Jaeger

您可以通过以下两种方式之一在 OpenShift Container Platform 上安装 Jaeger:

  • Jaeger 作为 Red Hat OpenShift Service Mesh 的一部分进行安装。Service Mesh 安装默认包含了 Jaeger。要将 Jaeger 作为 service mesh 的一部分安装,请按照 Red Hat Service Mesh 安装中的内容进行。
  • 如果您不想安装 service mesh,您可以使用 Jaeger Operator 来自行安装 Jaeger 的红帽构建。要在没有 service mesh 的情况下安装 Jaeger,请按照以下说明操作。

先决条件

在安装 OpenShift Jaeger 前,请查看安装所需的操作,确保满足以下条件:

3.1.1. Jaeger 安装概述

安装 OpenShift Jaeger 的步骤如下:

  • 查看文档并确定您的部署策略。
  • 如果您的部署策略需要持久性存储,请通过 OperatorHub 安装 Elasticsearch Operator。
  • 通过 OperatorHub 安装 Jaeger Operator。
  • 修改 Jaeger YAML 文件,以支持您的部署策略。
  • 将一个或多个 Jaeger 实例部署到 OpenShift Container Platform 环境。

3.1.2. 安装 Elasticsearch Operator

默认 Jaeger 部署使用内存存储,这可以使那些评估 Jaeger 、演示或者在测试环境中使用 Jaeger 的用户快速地进行安装。如果要在生产环境中使用 Jaeger,则必须安装持久性存储选项,即 Elasticsearch。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。
  • 具有 cluster-admin 角色的帐户。
警告

不要安装 Operators 的 Community 版本。不支持社区 Operator。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。
  2. 进入 OperatorsOperatorHub
  3. 在过滤器框中键入 Elasticsearch 以找到 Elasticsearch Operator。
  4. 点由红帽提供的 Elasticsearch Operator 来显示有关 Operator 的信息。
  5. Install.
  6. Create Operator Subscription 页中选 All namespaces on the cluster (default)。这会在默认的 openshift-operators 项目中安装 Operator ,并使其可以被集群中的所有项目使用。
  7. 选择与 OpenShift Container Platform 安装匹配的更新频道。例如,如果您要在 OpenShift Container Platform 版本 4.3 上安装,请选择 4.3 更新频道。
  8. 选择 Automatic 批准策略。

    注意

    手动批准策略需要拥有适当凭证的用户批准 Operator 的安装和订阅过程。

  9. Subscribe.
  10. Installed Operators 页面中,选择 openshift-operators 项目。等待 Elasticsearch Operator 的状态显示为 "InstallSucceeded" 后再继续进行操作。

3.1.3. 安装 Jaeger Operator

要安装 Jaeger,您需要使用 OperatorHub 来安装 Jaeger Operator。

默认情况下,Operator 安装在 openshift-operators 项目中。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。
  • 具有 cluster-admin 角色的帐户。
  • 如果需要持久性存储,则必须在安装 Jaeger Operator 前安装 Elasticsearch Operator。
警告

不要安装 Operators 的 Community 版本。不支持社区 Operator。

流程

  1. 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform web 控制台。
  2. 进入 OperatorsOperatorHub
  3. 在过滤器框中键入 Jaeger 来定位 Jaeger Operator。
  4. 点由红帽提供的 Jaeger Operator 来显示有关 Operator 的信息。
  5. Install.
  6. Create Operator Subscription 页中选 All namespaces on the cluster (default)。这会在默认的 openshift-operators 项目中安装 Operator ,并使其可以被集群中的所有项目使用。
  7. 选择 stable 更新频道。这可在发布新版本时自动更新 Jaeger。如果您选择维护频道,例如 1.17-stable,则会在支持周期内接收程序错误修复和安全补丁。

    • 选择一个批准策略您可以选择 AutomaticManual 更新。如果选择自动更新某个已安装的 Operator,则当相应 Operator 有可用的新版本时,Operator Lifecycle Manager (OLM) 将自动升级该 Operator 的运行实例,而无需人为干预。如果选择手动更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才可将 Operator 更新至新版本。
  8. Subscribe.
  9. Subscription Overview 页面中,选择 openshift-operators 项目。等待 Jaeger Operator 的状态显示为 "InstallSucceeded" 后再继续进行操作。。

3.2. 升级 Jaeger

Operator Lifecycle Manager (OLM) 控制集群中 Operator 的安装、升级和基于角色的访问控制 (RBAC)。OLM 在 OpenShift Container Platform 中默认运行。OLM 可以查询可用的 Operator 以及已安装的 Operator 的升级。如需了解有关 OpenShift Container Platform 如何处理升级的更多信息,请参阅 Operator Lifecycle Manager 文档。

Jaeger Operator 使用的更新方法是将受管 Jaeger 实例升级到与 Operator 相关的版本。安装新版本的 Jaeger Operator 时,由 Operator 管理的所有 Jaeger 应用程序实例都会升级到 Operator 的版本。例如,如果安装了 1.10 版本(包括 Operator 和后端组件),Operator 升级到了 1.11 版本,那么 Operator 就会在 Operator 升级完成后扫描运行 Jaeger 实例并将其升级到 1.11。

3.3. 删除 Jaeger

从 OpenShift Container Platform 集群中删除 Jaeger 的步骤如下:

  1. 关闭任何 Jaeger pod。
  2. 删除任何 Jaeger 实例。
  3. 删除 Jaeger Operator

3.3.1. 使用 Web 控制台删除 Jaeger 实例

注意

当删除使用内存存储的实例时,其所有数据将永久丢失。当 Jaeger 实例被删除时,存储在持久性存储中的数据(如 Elasticsearch)不会被删除。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 OperatorsInstalled Operators
  3. 从 Project 菜单中选择 Operators 安装的项目名称,如 jaeger-system
  4. 点 Jaeger Operator
  5. Jaeger 标签页。
  6. 点击“选项”菜单 kebab 选择要删除的实例旁边的 Delete Jaeger
  7. 在确认信息中,点击 Delete

3.3.2. 通过 CLI 删除 Jaeger 实例

  1. 登录 OpenShift Container Platform CLI。

    $ oc login
  2. 要显示 Jaeger 实例,请运行以下命令:

    oc get deployments -n <jaeger-project>

    Operator 的名称具有后缀 -operator。以下示例显示了两个 Jaeger Operators 和四个 Jaeger 实例:

    oc get deployments -n jaeger-system
    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    elasticsearch-operator   1/1     1            1           93m
    jaeger-operator          1/1     1            1           49m
    jaeger-test              1/1     1            1           7m23s
    jaeger-test2             1/1     1            1           6m48s
    tracing1                 1/1     1            1           7m8s
    tracing2                 1/1     1            1           35m
  3. 要删除 Jaeger 实例,请运行以下命令:

    oc delete jaeger <deployment-name>  -n <jaeger-project>

    例如,

    oc delete jaeger tracing2 -n jaeger-system
  4. 要验证删除过程,请再次运行 oc get deployment :

    oc get deployments -n <jaeger-project>

    例如,

    oc get deployments -n jaeger-system
    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    elasticsearch-operator   1/1     1            1           94m
    jaeger-operator          1/1     1            1           50m
    jaeger-test              1/1     1            1           8m14s
    jaeger-test2             1/1     1            1           7m39s
    tracing1                 1/1     1            1           7m59s

3.3.3. 删除 Jaeger Operator

流程

  1. 按照从集群中删除 Operator 的说明进行操作。

    • 删除 Jaeger Operator
    • 删除 Jaeger Operator 后(如果适用),请删除 Elasticsearch Operator。

法律通告

Copyright © 2020 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。