×

Red Hat OpenShift 分布式追踪平台 (Jaeger) 是一个已弃用的功能。已弃用的功能仍包含在 OpenShift Container Platform 中,并继续得到支持;但是,它将在该产品的未来版本中删除,不建议用于新的部署。

有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的“已弃用和已删除的功能”部分。

Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符使用自定义资源定义 (CRD) 文件,该文件定义在创建和部署分布式追踪平台 (Jaeger) 资源时要使用的架构和配置设置。您可以安装默认配置或修改文件。

如果您已将分布式追踪平台作为 Red Hat OpenShift Service Mesh 的一部分安装,则可以在 ServiceMeshControlPlane 中执行基本配置,但要完全控制,必须配置 Jaeger CR,然后 在 ServiceMeshControlPlane 中引用您的分布式追踪配置文件

Red Hat OpenShift 分布式追踪平台 (Jaeger) 具有预定义的部署策略。您在自定义资源文件中指定部署策略。创建分布式追踪平台 (Jaeger) 实例时,运算符将使用此配置文件创建部署所需的objects。

显示部署策略的 Jaeger 自定义资源文件
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: MyConfigFile
spec:
  strategy: production (1)
1 部署策略。

支持的部署策略

Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符目前支持以下部署策略

allInOne

- 此策略适用于开发、测试和演示目的;它不适用于生产环境。主要后端组件、Agent、Collector 和 Query 服务都打包到单个可执行文件中,默认情况下配置为使用内存中存储。

内存存储并非持久化存储,这意味着如果分布式追踪平台 (Jaeger) 实例关闭、重启或被替换,您的追踪数据将会丢失。并且内存存储无法扩展,因为每个 Pod 都有其自身的内存。对于持久化存储,您必须使用productionstreaming策略,它们使用 Elasticsearch 作为默认存储。

production

production 策略适用于生产环境,在生产环境中,长期存储追踪数据非常重要,并且需要更具可扩展性和高可用性的架构。因此,每个后端组件都是单独部署的。Agent 可以作为 sidecar 注入到被监控的应用程序中。Query 和 Collector 服务配置了受支持的存储类型——目前是 Elasticsearch。可以根据性能和弹性要求配置多个这些组件的实例。

streaming

streaming 策略旨在通过提供一种流式处理能力来增强 production 策略,该能力有效地位于 Collector 和 Elasticsearch 后端存储之间。这在高负载情况下可以减轻后端存储的压力,并使其他追踪后处理功能能够直接从流式平台 (AMQ Streams/ Kafka) 获取实时跨度数据。

  • streaming 策略需要额外的 Red Hat AMQ Streams 订阅。

  • 目前在 IBM Z® 上不支持 streaming 部署策略。

从 Web 控制台部署分布式追踪平台默认策略

自定义资源定义 (CRD) 定义了部署 Red Hat OpenShift 分布式追踪平台实例时使用的配置。默认 CR 名称为jaeger-all-in-one-inmemory,它配置了最少的资源,以确保您可以在默认的 OpenShift Container Platform 安装上成功安装它。您可以使用此默认配置创建一个使用AllInOne部署策略的 Red Hat OpenShift 分布式追踪平台 (Jaeger) 实例,也可以定义您自己的自定义资源文件。

内存存储并非持久化存储。如果 Jaeger Pod 关闭、重启或被替换,您的追踪数据将会丢失。对于持久化存储,您必须使用productionstreaming策略,它们使用 Elasticsearch 作为默认存储。

先决条件
  • Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符已安装。

  • 您已查看有关如何自定义部署的说明。

  • 您可以作为具有cluster-admin角色的用户访问集群。

步骤
  1. 以具有cluster-admin角色的用户身份登录 OpenShift Container Platform Web 控制台。

  2. 创建一个新项目,例如tracing-system

    如果您作为 Service Mesh 的一部分进行安装,则分布式追踪平台资源必须安装在与ServiceMeshControlPlane资源相同的命名空间中,例如istio-system

    1. 转到主页项目

    2. 点击创建项目

    3. 名称字段中输入tracing-system

    4. 点击创建

  3. 导航到运算符已安装的运算符

  4. 如有必要,从项目菜单中选择tracing-system。您可能需要等待几分钟才能将运算符复制到新项目。

  5. 点击 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符。在详细信息选项卡下的提供的 API中,运算符提供单个链接。

  6. Jaeger下,点击创建实例

  7. 创建 Jaeger页面上,要使用默认值进行安装,请点击创建以创建分布式追踪平台 (Jaeger) 实例。

  8. Jaegers页面上,点击分布式追踪平台 (Jaeger) 实例的名称,例如jaeger-all-in-one-inmemory

  9. Jaeger 详情页面上,点击资源选项卡。等待 Pod 状态变为“运行”后再继续。

从命令行部署分布式追踪平台默认策略

请按照此步骤从命令行创建分布式追踪平台 (Jaeger) 实例。

先决条件
  • Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符已安装并验证。

  • 您已查看有关如何自定义部署的说明。

  • 您可以访问与您的 OpenShift Container Platform 版本匹配的 OpenShift CLI (oc)。

  • 您可以作为具有cluster-admin角色的用户访问集群。

步骤
  1. 通过运行以下命令,以具有cluster-admin角色的用户身份登录 OpenShift Container Platform CLI

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:8443
  2. 通过运行以下命令创建一个名为tracing-system的新项目

    $ oc new-project tracing-system
  3. 创建一个名为jaeger.yaml的自定义资源文件,其中包含以下文本

    jaeger-all-in-one.yaml 示例
    apiVersion: jaegertracing.io/v1
    kind: Jaeger
    metadata:
      name: jaeger-all-in-one-inmemory
  4. 运行以下命令来部署分布式追踪平台 (Jaeger)

    $ oc create -n tracing-system -f jaeger.yaml
  5. 运行以下命令以在安装过程中观察 Pod 的进度

    $ oc get pods -n tracing-system -w

    安装过程完成后,输出类似于以下示例

    NAME                                         READY   STATUS    RESTARTS   AGE
    jaeger-all-in-one-inmemory-cdff7897b-qhfdx   2/2     Running   0          24s

从 Web 控制台部署分布式追踪平台 production 策略

production部署策略适用于需要更具可扩展性和高可用性架构的生产环境,以及需要长期存储追踪数据的地方。

先决条件
  • OpenShift Elasticsearch 运算符已安装。

  • Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符已安装。

  • 您已查看有关如何自定义部署的说明。

  • 您可以作为具有cluster-admin角色的用户访问集群。

步骤
  1. 以具有cluster-admin角色的用户身份登录 OpenShift Container Platform Web 控制台。

  2. 创建一个新项目,例如tracing-system

    如果您作为 Service Mesh 的一部分进行安装,则分布式追踪平台资源必须安装在与ServiceMeshControlPlane资源相同的命名空间中,例如istio-system

    1. 转到主页项目

    2. 点击创建项目

    3. 名称字段中输入tracing-system

    4. 点击创建

  3. 导航到运算符已安装的运算符

  4. 如有必要,从项目菜单中选择tracing-system。您可能需要等待几分钟才能将运算符复制到新项目。

  5. 点击 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符。在概述选项卡下的提供的 API中,运算符提供单个链接。

  6. Jaeger下,点击创建实例

  7. 创建 Jaeger页面上,将默认的all-in-one YAML 文本替换为您的 production YAML 配置,例如

    带有 Elasticsearch 的 jaeger-production.yaml 文件示例
    apiVersion: jaegertracing.io/v1
    kind: Jaeger
    metadata:
      name: jaeger-production
      namespace:
    spec:
      strategy: production
      ingress:
        security: oauth-proxy
      storage:
        type: elasticsearch
        elasticsearch:
          nodeCount: 3
          redundancyPolicy: SingleRedundancy
        esIndexCleaner:
          enabled: true
          numberOfDays: 7
          schedule: 55 23 * * *
        esRollover:
          schedule: '*/30 * * * *'
  8. 点击创建以创建分布式追踪平台 (Jaeger) 实例。

  9. Jaegers页面上,点击分布式追踪平台 (Jaeger) 实例的名称,例如jaeger-prod-elasticsearch

  10. Jaeger 详情页面上,点击资源选项卡。等待所有 Pod 状态变为“运行”后再继续。

从命令行部署分布式追踪平台 production 策略

请按照此步骤从命令行创建分布式追踪平台 (Jaeger) 实例。

先决条件
  • OpenShift Elasticsearch 运算符已安装。

  • Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符已安装。

  • 您已查看有关如何自定义部署的说明。

  • 您可以访问与您的 OpenShift Container Platform 版本匹配的 OpenShift CLI (oc)。

  • 您可以作为具有cluster-admin角色的用户访问集群。

步骤
  1. 通过运行以下命令,以具有cluster-admin角色的用户身份登录 OpenShift CLI (oc)

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:8443
  2. 通过运行以下命令创建一个名为tracing-system的新项目

    $ oc new-project tracing-system
  3. 创建一个名为jaeger-production.yaml的自定义资源文件,其中包含前面步骤中示例文件的内容。

  4. 运行以下命令来部署分布式追踪平台 (Jaeger)

    $ oc create -n tracing-system -f jaeger-production.yaml
  5. 运行以下命令以在安装过程中观察 Pod 的进度

    $ oc get pods -n tracing-system -w

    安装过程完成后,您将看到类似于以下示例的输出

    NAME                                                              READY   STATUS    RESTARTS   AGE
    elasticsearch-cdm-jaegersystemjaegerproduction-1-6676cf568gwhlw   2/2     Running   0          10m
    elasticsearch-cdm-jaegersystemjaegerproduction-2-bcd4c8bf5l6g6w   2/2     Running   0          10m
    elasticsearch-cdm-jaegersystemjaegerproduction-3-844d6d9694hhst   2/2     Running   0          10m
    jaeger-production-collector-94cd847d-jwjlj                        1/1     Running   3          8m32s
    jaeger-production-query-5cbfbd499d-tv8zf                          3/3     Running   3          8m32s

从 Web 控制台部署分布式追踪平台流式策略

streaming部署策略适用于需要更具可扩展性和高可用性架构的生产环境,并且需要长期存储追踪数据。

streaming策略提供了一种位于收集器和 Elasticsearch 存储之间的流式功能。这减少了高负载情况下对存储的压力,并使其他追踪后处理功能能够直接从 Kafka 流式平台获取实时跨度数据。

流式策略需要额外的 Red Hat AMQ Streams 订阅。如果您没有 AMQ Streams 订阅,请联系您的销售代表了解更多信息。

目前在 IBM Z® 上不支持 streaming 部署策略。

先决条件
  • AMQ Streams 算子已安装。如果使用 1.4.0 或更高版本,您可以使用自配置功能。否则,您必须创建 Kafka 实例。

  • Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符已安装。

  • 您已查看有关如何自定义部署的说明。

  • 您可以作为具有cluster-admin角色的用户访问集群。

步骤
  1. 以具有cluster-admin角色的用户身份登录 OpenShift Container Platform Web 控制台。

  2. 创建一个新项目,例如tracing-system

    如果您作为 Service Mesh 的一部分进行安装,则分布式追踪平台资源必须安装在与ServiceMeshControlPlane资源相同的命名空间中,例如istio-system

    1. 转到主页项目

    2. 点击创建项目

    3. 名称字段中输入tracing-system

    4. 点击创建

  3. 导航到运算符已安装的运算符

  4. 如有必要,从项目菜单中选择tracing-system。您可能需要等待几分钟才能将运算符复制到新项目。

  5. 点击 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符。在概述选项卡下的提供的 API中,运算符提供单个链接。

  6. Jaeger下,点击创建实例

  7. 在**创建 Jaeger**页面上,将默认的all-in-one YAML 文本替换为您自己的流式 YAML 配置,例如

    jaeger-streaming.yaml 文件示例
    apiVersion: jaegertracing.io/v1
    kind: Jaeger
    metadata:
      name: jaeger-streaming
    spec:
      strategy: streaming
      collector:
        options:
          kafka:
            producer:
              topic: jaeger-spans
              brokers: my-cluster-kafka-brokers.kafka:9092 (1)
      storage:
        type: elasticsearch
      ingester:
        options:
          kafka:
            consumer:
              topic: jaeger-spans
              brokers: my-cluster-kafka-brokers.kafka:9092
    1 如果未定义代理,AMQStreams 1.4.0+ 将自动配置 Kafka。
  8. 点击创建以创建分布式追踪平台 (Jaeger) 实例。

  9. 在**Jaegers**页面上,点击分布式追踪平台 (Jaeger) 实例的名称,例如jaeger-streaming

  10. Jaeger 详情页面上,点击资源选项卡。等待所有 Pod 状态变为“运行”后再继续。

从 CLI 部署分布式追踪平台流式策略

请按照此步骤从命令行创建分布式追踪平台 (Jaeger) 实例。

先决条件
  • AMQ Streams 算子已安装。如果使用 1.4.0 或更高版本,您可以使用自配置功能。否则,您必须创建 Kafka 实例。

  • Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符已安装。

  • 您已查看有关如何自定义部署的说明。

  • 您可以访问与您的 OpenShift Container Platform 版本匹配的 OpenShift CLI (oc)。

  • 您可以作为具有cluster-admin角色的用户访问集群。

步骤

  1. 通过运行以下命令,以具有cluster-admin角色的用户身份登录 OpenShift CLI (oc)

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:8443
  2. 通过运行以下命令创建一个名为tracing-system的新项目

    $ oc new-project tracing-system
  3. 创建一个名为jaeger-streaming.yaml的自定义资源文件,其中包含前面步骤中示例文件的内容。

  4. 运行以下命令来部署 Jaeger:

    $ oc create -n tracing-system -f jaeger-streaming.yaml
  5. 运行以下命令以在安装过程中观察 Pod 的进度

    $ oc get pods -n tracing-system -w

    安装过程完成后,您应该看到类似于以下示例的输出

    NAME                                                              READY   STATUS    RESTARTS   AGE
    elasticsearch-cdm-jaegersystemjaegerstreaming-1-697b66d6fcztcnn   2/2     Running   0          5m40s
    elasticsearch-cdm-jaegersystemjaegerstreaming-2-5f4b95c78b9gckz   2/2     Running   0          5m37s
    elasticsearch-cdm-jaegersystemjaegerstreaming-3-7b6d964576nnz97   2/2     Running   0          5m5s
    jaeger-streaming-collector-6f6db7f99f-rtcfm                       1/1     Running   0          80s
    jaeger-streaming-entity-operator-6b6d67cc99-4lm9q                 3/3     Running   2          2m18s
    jaeger-streaming-ingester-7d479847f8-5h8kc                        1/1     Running   0          80s
    jaeger-streaming-kafka-0                                          2/2     Running   0          3m1s
    jaeger-streaming-query-65bf5bb854-ncnc7                           3/3     Running   0          80s
    jaeger-streaming-zookeeper-0                                      2/2     Running   0          3m39s

验证您的部署

访问 Jaeger 控制台

要访问 Jaeger 控制台,您必须已安装 Red Hat OpenShift Service Mesh 或 Red Hat OpenShift 分布式追踪平台,并且已安装、配置和部署 Red Hat OpenShift 分布式追踪平台 (Jaeger)。

安装过程会创建一个用于访问 Jaeger 控制台的路由。

如果您知道 Jaeger 控制台的 URL,可以直接访问它。如果您不知道 URL,请按照以下说明操作。

Web 控制台操作步骤
  1. 以具有集群管理员权限的用户身份登录 OpenShift Container Platform Web 控制台。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有dedicated-admin角色的帐户。

  2. 导航到**网络**→**路由**。

  3. 在**路由**页面上,从**命名空间**菜单中选择控制平面项目,例如tracing-system

    **位置**列显示每个路由的链接地址。

  4. 如有必要,使用过滤器查找jaeger路由。点击路由的**位置**以启动控制台。

  5. 点击**使用 OpenShift 登录**。

CLI 操作步骤
  1. 通过运行以下命令,以具有cluster-admin角色的用户身份登录 OpenShift Container Platform CLI。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有dedicated-admin角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 要使用命令行查询路由的详细信息,请输入以下命令。在此示例中,tracing-system是控制平面命名空间。

    $ export JAEGER_URL=$(oc get route -n tracing-system jaeger -o jsonpath='{.spec.host}')
  3. 启动浏览器并导航到https://<JAEGER_URL>,其中<JAEGER_URL>是您在上一步中发现的路由。

  4. 使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录。

  5. 如果您已将服务添加到服务网格并生成了跟踪数据,则可以使用过滤器和**查找跟踪**按钮搜索您的跟踪数据。

    如果您正在验证控制台安装,则没有跟踪数据显示。

自定义您的部署

部署最佳实践

  • Red Hat OpenShift 分布式追踪平台实例名称必须唯一。如果您想要多个 Red Hat OpenShift 分布式追踪平台 (Jaeger) 实例并使用 sidecar 注入代理,则 Red Hat OpenShift 分布式追踪平台 (Jaeger) 实例应该具有唯一名称,并且注入注释应该明确指定应将追踪数据报告到的 Red Hat OpenShift 分布式追踪平台 (Jaeger) 实例名称。

  • 如果您有多租户实现并且租户通过命名空间分开,请将 Red Hat OpenShift 分布式追踪平台 (Jaeger) 实例部署到每个租户命名空间。

有关配置持久性存储的信息,请参阅了解持久性存储以及您选择的存储选项的相应配置主题。

分布式追踪默认配置选项

Jaeger 自定义资源 (CR) 定义了创建分布式追踪平台 (Jaeger) 资源时要使用的架构和设置。您可以修改这些参数以根据您的业务需求自定义您的分布式追踪平台 (Jaeger) 实现。

Jaeger CR 的通用 YAML 示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: name
spec:
  strategy: <deployment_strategy>
  allInOne:
    options: {}
    resources: {}
  agent:
    options: {}
    resources: {}
  collector:
    options: {}
    resources: {}
  sampling:
    options: {}
  storage:
    type:
    options: {}
  query:
    options: {}
    resources: {}
  ingester:
    options: {}
    resources: {}
  options: {}
表 1. Jaeger 参数
参数 描述 默认值

apiVersion

创建对象时使用的 API 版本。

jaegertracing.io/v1

jaegertracing.io/v1

kind

定义要创建的 Kubernetes 对象的类型。

jaeger

metadata

有助于唯一标识对象的数据,包括name字符串、UID和可选的namespace

OpenShift Container Platform 会自动生成UID并使用创建对象的项目的名称完成namespace

name

对象的名称。

您的分布式追踪平台 (Jaeger) 实例的名称。

jaeger-all-in-one-inmemory

spec

要创建的对象的规范。

包含您的分布式追踪平台 (Jaeger) 实例的所有配置参数。当需要所有 Jaeger 组件的通用定义时,它定义在spec节点下。当定义与单个组件相关时,它将放置在spec/<component>节点下。

N/A

strategy

Jaeger 部署策略

allInOneproductionstreaming

allInOne

allInOne

因为allInOne镜像在一个 pod 中部署 Agent、Collector、Query、Ingester 和 Jaeger UI,所以此部署的配置必须将组件配置嵌套在allInOne参数下。

agent

定义 Agent 的配置选项。

collector

定义 Jaeger Collector 的配置选项。

sampling

定义追踪采样策略的配置选项。

storage

定义存储的配置选项。所有与存储相关的选项都必须放置在storage下,而不是allInOne或其他组件选项下。

query

定义 Query 服务的配置选项。

ingester

定义 Ingester 服务的配置选项。

以下 YAML 示例是使用默认设置创建 Red Hat OpenShift 分布式追踪平台 (Jaeger) 部署所需的最低限度。

dist-tracing-all-in-one.yaml 示例 (最低要求)
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: jaeger-all-in-one-inmemory

使用污点和容忍

要将 Jaeger 和 Elasticsearch Pod 调度到专用节点上,请参阅如何在 OpenShift 4 中使用 nodeSelector 和容忍度在基础设施节点上部署不同的 Jaeger 组件

Jaeger Collector 配置选项

Jaeger Collector 是负责接收跟踪器捕获的跨度并将它们写入持久性 Elasticsearch 存储(使用production策略时)或写入 AMQ Streams(使用streaming策略时)的组件。

Collector 是无状态的,因此可以并行运行多个 Jaeger Collector 实例。Collector 几乎不需要配置,除了 Elasticsearch 集群的位置。

表 2. Operator 用于定义 Jaeger Collector 的参数
参数 描述
collector:
  replicas:

指定要创建的 Collector 副本数量。

整数,例如5

表 3. 传递给 Collector 的配置参数
参数 描述
spec:
 collector:
  options: {}

定义 Jaeger Collector 的配置选项。

options:
  collector:
    num-workers:

从队列中拉取数据的 worker 数量。

整数,例如50

options:
  collector:
    queue-size:

Collector 队列的大小。

整数,例如2000

options:
  kafka:
    producer:
      topic: jaeger-spans

topic参数标识 Collector 用于生成消息以及 Ingester 用于使用消息的 Kafka 配置。

生产者的标签。

options:
  kafka:
    producer:
      brokers: my-cluster-kafka-brokers.kafka:9092

标识 Collector 用于生成消息的 Kafka 配置。如果未指定代理,并且已安装 AMQ Streams 1.4.0+,则 Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 将自动配置 Kafka。

options:
  log-level:

Collector 的日志级别。

可能的值:debuginfowarnerrorfatalpanic

options:
  otlp:
    enabled: true
    grpc:
      host-port: 4317
      max-connection-age: 0s
      max-connection-age-grace: 0s
      max-message-size: 4194304
      tls:
        enabled: false
        cert: /path/to/cert.crt
        cipher-suites: "TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256"
        client-ca: /path/to/cert.ca
        reload-interval: 0s
        min-version: 1.2
        max-version: 1.3

要接受 OTLP/gRPC,请显式启用otlp。所有其他选项都是可选的。

options:
  otlp:
    enabled: true
    http:
      cors:
        allowed-headers: [<header-name>[, <header-name>]*]
        allowed-origins: *
      host-port: 4318
      max-connection-age: 0s
      max-connection-age-grace: 0s
      max-message-size: 4194304
      read-timeout: 0s
      read-header-timeout: 2s
      idle-timeout: 0s
      tls:
        enabled: false
        cert: /path/to/cert.crt
        cipher-suites: "TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256"
        client-ca: /path/to/cert.ca
        reload-interval: 0s
        min-version: 1.2
        max-version: 1.3

要接受 OTLP/HTTP,请显式启用otlp。所有其他选项都是可选的。

分布式跟踪采样配置选项

Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 可用于定义将提供给已配置为使用远程采样器的跟踪器的采样策略。

虽然会生成所有跟踪,但只对其中一部分进行采样。对跟踪进行采样会将跟踪标记为进一步处理和存储。

如果跟踪是由 Envoy 代理启动的,则此项与之无关,因为采样决策是在那里做出的。Jaeger 采样决策仅与使用客户端启动跟踪时相关。

当服务接收到不包含跟踪上下文的请求时,客户端会启动一个新的跟踪,为其分配一个随机跟踪 ID,并根据当前安装的采样策略做出采样决策。采样决策会传播到跟踪中的所有后续请求,以便其他服务不会再次做出采样决策。

分布式跟踪平台 (Jaeger) 库支持以下采样器

  • **概率型** - 采样器会根据概率进行随机采样决策,采样概率等于sampling.param属性的值。例如,使用sampling.param=0.1大约会采样十分之一的跟踪。

  • **速率限制** - 采样器使用漏桶速率限制器来确保以一定的恒定速率采样跟踪。例如,使用sampling.param=2.0以每秒 2 个跟踪的速率采样请求。

表 4. Jaeger 采样选项
参数 描述 默认值
spec:
 sampling:
  options: {}
    default_strategy:
    service_strategy:

定义追踪采样策略的配置选项。

如果您不提供配置,则 Collector 将返回针对所有服务的默认概率采样策略,概率为 0.001 (0.1%)。

default_strategy:
  type:
service_strategy:
  type:

要使用的采样策略。请参见上面的描述。

有效值为probabilisticratelimiting

概率型

default_strategy:
  param:
service_strategy:
  param:

所选采样策略的参数。

十进制和整数值 (0, .1, 1, 10)

1

此示例定义了一个默认采样策略,该策略是概率型的,跟踪实例被采样的可能性为 50%。

概率采样示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: with-sampling
spec:
  sampling:
    options:
      default_strategy:
        type: probabilistic
        param: 0.5
      service_strategies:
        - service: alpha
          type: probabilistic
          param: 0.8
          operation_strategies:
            - operation: op1
              type: probabilistic
              param: 0.2
            - operation: op2
              type: probabilistic
              param: 0.4
        - service: beta
          type: ratelimiting
          param: 5

如果没有用户提供的配置,分布式跟踪平台 (Jaeger) 将使用以下设置

默认采样
spec:
  sampling:
    options:
      default_strategy:
        type: probabilistic
        param: 1

分布式跟踪存储配置选项

您可以在spec.storage下为 Collector、Ingester 和 Query 服务配置存储。可以根据性能和弹性要求配置多个这些组件的实例。

表 5. Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 用于定义分布式跟踪存储的通用存储参数
参数 描述 默认值
spec:
  storage:
    type:

要用于部署的存储类型。

memoryelasticsearch。内存存储仅适用于开发、测试、演示和概念验证环境,因为如果 Pod 关闭,数据不会持久化。对于生产环境,分布式跟踪平台 (Jaeger) 支持 Elasticsearch 用于持久性存储。

memory

storage:
  secretname:

密钥的名称,例如tracing-secret

N/A

storage:
  options: {}

定义存储的配置选项。

表 6. Elasticsearch 索引清理器参数
参数 描述 默认值
storage:
  esIndexCleaner:
    enabled:

使用 Elasticsearch 存储时,默认情况下会创建一个作业来清理索引中的旧跟踪。此参数启用或禁用索引清理器作业。

true/false

true

storage:
  esIndexCleaner:
    numberOfDays:

删除索引之前要等待的天数。

整数值

7

storage:
  esIndexCleaner:
    schedule:

定义清理 Elasticsearch 索引的频率。

Cron 表达式

"55 23 * * *"

自动配置 Elasticsearch 实例

部署 Jaeger 自定义资源时,Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 使用 OpenShift Elasticsearch Operator 根据自定义资源文件中storage部分中提供的配置创建 Elasticsearch 集群。如果设置以下配置,Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 将配置 Elasticsearch

  • spec.storage:type设置为elasticsearch

  • spec.storage.elasticsearch.doNotProvision设置为false

  • spec.storage.options.es.server-urls未定义,即,没有连接到未由 OpenShift Elasticsearch Operator 配置的 Elasticsearch 实例。

配置 Elasticsearch 时,Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 将 Elasticsearch 自定义资源的name设置为 Jaeger 自定义资源中spec.storage.elasticsearch.name的值。如果未为spec.storage.elasticsearch.name指定值,则 Operator 使用elasticsearch

限制
  • 每个命名空间只能有一个具有自配置 Elasticsearch 实例的分布式跟踪平台 (Jaeger)。Elasticsearch 集群旨在专用于单个分布式跟踪平台 (Jaeger) 实例。

  • 每个命名空间只能有一个 Elasticsearch。

如果您已将 Elasticsearch 安装为 OpenShift 日志的一部分,则 Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 可以使用已安装的 OpenShift Elasticsearch Operator 来配置存储。

以下配置参数适用于自配置的 Elasticsearch 实例,即由 Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 使用 OpenShift Elasticsearch Operator 创建的实例。您可以在配置文件中的spec:storage:elasticsearch下指定自配置 Elasticsearch 的配置选项。

表 7. Elasticsearch 资源配置参数
参数 描述 默认值
elasticsearch:
  properties:
    doNotProvision:

用于指定是否应由 Red Hat OpenShift 分布式跟踪平台 (Jaeger) Operator 配置 Elasticsearch 实例。

true/false

true

elasticsearch:
  properties:
    name:

Elasticsearch 实例名称。Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符使用此参数中指定的 Elasticsearch 实例连接到 Elasticsearch。

字符串

elasticsearch

elasticsearch:
  nodeCount:

Elasticsearch 节点数。为确保高可用性,至少使用 3 个节点。不要使用 2 个节点,因为可能会出现“脑裂”问题。

整数。例如,概念验证 = 1,最小部署 = 3

3

elasticsearch:
  resources:
    requests:
      cpu:

基于您的环境配置,请求的中央处理器数量。

以核心或毫核指定,例如 200m、0.5、1。例如,概念验证 = 500m,最小部署 = 1

1

elasticsearch:
  resources:
    requests:
      memory:

基于您的环境配置,请求的可用内存。

以字节为单位指定,例如 200Ki、50Mi、5Gi。例如,概念验证 = 1Gi,最小部署 = 16Gi*

16Gi

elasticsearch:
  resources:
    limits:
      cpu:

基于您的环境配置,中央处理器数量限制。

以核心或毫核指定,例如 200m、0.5、1。例如,概念验证 = 500m,最小部署 = 1

elasticsearch:
  resources:
    limits:
      memory:

基于您的环境配置,可用内存限制。

以字节为单位指定,例如 200Ki、50Mi、5Gi。例如,概念验证 = 1Gi,最小部署 = 16Gi*

elasticsearch:
  redundancyPolicy:

数据复制策略定义了如何在集群中的数据节点之间复制 Elasticsearch 分片。如果未指定,Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符会根据节点数自动确定最合适的复制方式。

ZeroRedundancy(无副本分片)、SingleRedundancy(一个副本分片)、MultipleRedundancy(每个索引分布在半数数据节点上)、FullRedundancy(每个索引在集群中的每个数据节点上完全复制)。

elasticsearch:
  useCertManagement:

用于指定分布式追踪平台 (Jaeger) 是否应使用 OpenShift Elasticsearch 运算符的证书管理功能。此功能已添加到 OpenShift Container Platform 4.7 中的 {logging-title} 5.2,是新 Jaeger 部署的首选设置。

true/false

true

每个 Elasticsearch 节点都可以使用较低的内存设置运行,但这不推荐用于生产部署。对于生产用途,默认情况下,您必须为每个 Pod 分配不少于 16 Gi 的内存,但最好尽可能多地分配,每个 Pod 最多可分配 64 Gi。

生产存储示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-prod
spec:
  strategy: production
  storage:
    type: elasticsearch
    elasticsearch:
      nodeCount: 3
      resources:
        requests:
          cpu: 1
          memory: 16Gi
        limits:
          memory: 16Gi
使用持久性存储的存储示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-prod
spec:
  strategy: production
  storage:
    type: elasticsearch
    elasticsearch:
      nodeCount: 1
      storage: (1)
        storageClassName: gp2
        size: 5Gi
      resources:
        requests:
          cpu: 200m
          memory: 4Gi
        limits:
          memory: 4Gi
      redundancyPolicy: ZeroRedundancy
1 持久性存储配置。在本例中,AWS gp2 大小为 5Gi。如果未指定值,分布式追踪平台 (Jaeger) 将使用 emptyDir。OpenShift Elasticsearch 运算符会预配 PersistentVolumeClaimPersistentVolume,这些不会随着分布式追踪平台 (Jaeger) 实例一起删除。如果您使用相同的名称和命名空间创建分布式追踪平台 (Jaeger) 实例,则可以挂载相同的卷。

连接到现有的 Elasticsearch 实例

您可以使用现有的 Elasticsearch 集群进行分布式追踪平台的存储。现有的 Elasticsearch 集群,也称为外部 Elasticsearch 实例,是由 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符或 OpenShift Elasticsearch 运算符安装的实例。

部署 Jaeger 自定义资源时,如果设置以下配置,Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符将不会预配 Elasticsearch

  • spec.storage.elasticsearch.doNotProvision 设置为 true

  • spec.storage.options.es.server-urls 有值

  • spec.storage.elasticsearch.name 有值,或者 Elasticsearch 实例名称为 elasticsearch

Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符使用 spec.storage.elasticsearch.name 中指定的 Elasticsearch 实例连接到 Elasticsearch。

限制
  • 您不能与分布式追踪平台 (Jaeger) 共享或重用 OpenShift Container Platform 日志 Elasticsearch 实例。Elasticsearch 集群旨在专用于单个分布式追踪平台 (Jaeger) 实例。

以下配置参数适用于已存在的 Elasticsearch 实例,也称为外部 Elasticsearch 实例。在这种情况下,您在自定义资源文件中 spec:storage:options:es 下指定 Elasticsearch 的配置选项。

表 8. 常规 ES 配置参数
参数 描述 默认值
es:
  server-urls:

Elasticsearch 实例的 URL。

Elasticsearch 服务器的完全限定域名。

es:
  max-doc-count:

从 Elasticsearch 查询返回的最大文档计数。这也将应用于聚合。如果同时设置 es.max-doc-countes.max-num-spans,Elasticsearch 将使用两者中较小的值。

10000

es:
  max-num-spans:

[已弃用 - 将在未来版本中删除,请改用 es.max-doc-count] 每次查询在 Elasticsearch 中一次性获取的最大跨度数。如果同时设置 es.max-num-spanses.max-doc-count,Elasticsearch 将使用两者中较小的值。

10000

es:
  max-span-age:

Elasticsearch 中跨度的最大回溯时间。

72h0m0s

es:
  sniffer:

Elasticsearch 的嗅探器配置。客户端使用嗅探过程自动查找所有节点。默认情况下禁用。

true/false

false

es:
  sniffer-tls-enabled:

嗅探 Elasticsearch 集群时启用 TLS 的选项。客户端使用嗅探过程自动查找所有节点。默认情况下禁用

true/false

false

es:
  timeout:

查询使用的超时时间。设置为零时,没有超时。

0s

es:
  username:

Elasticsearch 需要的用户名。基本身份验证也加载 CA(如果已指定)。另请参见 es.password

es:
  password:

Elasticsearch 需要的密码。另请参见 es.username

es:
  version:

主要的 Elasticsearch 版本。如果未指定,则将从 Elasticsearch 自动检测该值。

0

表 9. ES 数据复制参数
参数 描述 默认值
es:
  num-replicas:

Elasticsearch 中每个索引的副本数。

1

es:
  num-shards:

Elasticsearch 中每个索引的分片数。

5

表 10. ES 索引配置参数
参数 描述 默认值
es:
  create-index-templates:

设置为 true 时,在应用程序启动时自动创建索引模板。手动安装模板时,设置为 false

true/false

true

es:
  index-prefix:

分布式追踪平台 (Jaeger) 索引的可选前缀。例如,将其设置为“production”会创建名为“production-tracing-*”的索引。

表 11. ES 批量处理器配置参数
参数 描述 默认值
es:
  bulk:
    actions:

在批量处理器决定将更新提交到磁盘之前,可以添加到队列中的请求数。

1000

es:
  bulk:
    flush-interval:

批量请求提交后的time.Duration,无论其他阈值如何。要禁用批量处理器刷新间隔,请将其设置为零。

200ms

es:
  bulk:
    size:

批量请求可以占用的字节数,之后批量处理器将决定将更新提交到磁盘。

5000000

es:
  bulk:
    workers:

能够接收和提交批量请求到 Elasticsearch 的工作程序数量。

1

表 12. ES TLS 配置参数
参数 描述 默认值
es:
  tls:
    ca:

用于验证远程服务器的 TLS 证书颁发机构 (CA) 文件的路径。

默认情况下将使用系统信任库。

es:
  tls:
    cert:

TLS 证书文件的路径,用于将此进程标识给远程服务器。

es:
  tls:
    enabled:

与远程服务器通信时启用传输层安全 (TLS)。默认情况下禁用。

true/false

false

es:
  tls:
    key:

TLS 私钥文件的路径,用于将此进程标识给远程服务器。

es:
  tls:
    server-name:

覆盖远程服务器证书中预期的 TLS 服务器名称。

es:
  token-file:

包含承载令牌的文件的路径。如果指定了此标志,它还会加载证书颁发机构 (CA) 文件。

表 13. ES 归档配置参数
参数 描述 默认值
es-archive:
  bulk:
    actions:

在批量处理器决定将更新提交到磁盘之前,可以添加到队列中的请求数。

0

es-archive:
  bulk:
    flush-interval:

批量请求提交后的time.Duration,无论其他阈值如何。要禁用批量处理器刷新间隔,请将其设置为零。

0s

es-archive:
  bulk:
    size:

批量请求可以占用的字节数,之后批量处理器将决定将更新提交到磁盘。

0

es-archive:
  bulk:
    workers:

能够接收和提交批量请求到 Elasticsearch 的工作程序数量。

0

es-archive:
  create-index-templates:

设置为 true 时,在应用程序启动时自动创建索引模板。手动安装模板时,设置为 false

true/false

false

es-archive:
  enabled:

启用额外存储。

true/false

false

es-archive:
  index-prefix:

分布式追踪平台 (Jaeger) 索引的可选前缀。例如,将其设置为“production”会创建名为“production-tracing-*”的索引。

es-archive:
  max-doc-count:

从 Elasticsearch 查询返回的最大文档计数。这也将应用于聚合。

0

es-archive:
  max-num-spans:

[已弃用 - 将在未来版本中删除,请改用 es-archive.max-doc-count] 每次查询在 Elasticsearch 中一次性获取的最大跨度数。

0

es-archive:
  max-span-age:

Elasticsearch 中跨度的最大回溯时间。

0s

es-archive:
  num-replicas:

Elasticsearch 中每个索引的副本数。

0

es-archive:
  num-shards:

Elasticsearch 中每个索引的分片数。

0

es-archive:
  password:

Elasticsearch 需要的密码。另请参见 es.username

es-archive:
  server-urls:

Elasticsearch 服务器的逗号分隔列表。必须指定为完全限定的 URL,例如 https://127.0.0.1:9200

es-archive:
  sniffer:

Elasticsearch 的嗅探器配置。客户端使用嗅探过程自动查找所有节点。默认情况下禁用。

true/false

false

es-archive:
  sniffer-tls-enabled:

嗅探 Elasticsearch 集群时启用 TLS 的选项。客户端使用嗅探过程自动查找所有节点。默认情况下禁用。

true/false

false

es-archive:
  timeout:

查询使用的超时时间。设置为零时,没有超时。

0s

es-archive:
  tls:
    ca:

用于验证远程服务器的 TLS 证书颁发机构 (CA) 文件的路径。

默认情况下将使用系统信任库。

es-archive:
  tls:
    cert:

TLS 证书文件的路径,用于将此进程标识给远程服务器。

es-archive:
  tls:
    enabled:

与远程服务器通信时启用传输层安全 (TLS)。默认情况下禁用。

true/false

false

es-archive:
  tls:
    key:

TLS 私钥文件的路径,用于将此进程标识给远程服务器。

es-archive:
  tls:
    server-name:

覆盖远程服务器证书中预期的 TLS 服务器名称。

es-archive:
  token-file:

包含承载令牌的文件的路径。如果指定了此标志,它还会加载证书颁发机构 (CA) 文件。

es-archive:
  username:

Elasticsearch 需要的用户名。基本身份验证也加载 CA(如果已指定)。另请参见 es-archive.password

es-archive:
  version:

主要的 Elasticsearch 版本。如果未指定,则将从 Elasticsearch 自动检测该值。

0

使用卷挂载的存储示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-prod
spec:
  strategy: production
  storage:
    type: elasticsearch
    options:
      es:
        server-urls: https://quickstart-es-http.default.svc:9200
        index-prefix: my-prefix
        tls:
          ca: /es/certificates/ca.crt
    secretName: tracing-secret
  volumeMounts:
    - name: certificates
      mountPath: /es/certificates/
      readOnly: true
  volumes:
    - name: certificates
      secret:
        secretName: quickstart-es-http-certs-public

以下示例展示了一个 Jaeger CR,它使用带有从卷挂载的 TLS CA 证书的外部 Elasticsearch 集群,以及存储在密钥中的用户名/密码。

外部 Elasticsearch 示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-prod
spec:
  strategy: production
  storage:
    type: elasticsearch
    options:
      es:
        server-urls: https://quickstart-es-http.default.svc:9200 (1)
        index-prefix: my-prefix
        tls: (2)
          ca: /es/certificates/ca.crt
    secretName: tracing-secret (3)
  volumeMounts: (4)
    - name: certificates
      mountPath: /es/certificates/
      readOnly: true
  volumes:
    - name: certificates
      secret:
        secretName: quickstart-es-http-certs-public
1 在默认命名空间中运行的 Elasticsearch 服务的 URL。
2 TLS 配置。在本例中仅包含 CA 证书,但在使用双向 TLS 时,也可以包含 es.tls.key 和 es.tls.cert。
3 定义环境变量 ES_PASSWORD 和 ES_USERNAME 的密钥。通过 kubectl create secret generic tracing-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic 创建。
4 挂载到所有存储组件的卷挂载和卷。

使用 Elasticsearch 管理证书

您可以使用 OpenShift Elasticsearch Operator 创建和管理证书。使用 OpenShift Elasticsearch Operator 管理证书还可以让您使用单个 Elasticsearch 集群与多个 Jaeger Collector。

使用 Elasticsearch 管理证书仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

从 2.4 版本开始,Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 通过在 Elasticsearch 自定义资源中使用以下注释来委托证书创建

  • logging.openshift.io/elasticsearch-cert-management: "true"

  • logging.openshift.io/elasticsearch-cert.jaeger-<shared-es-node-name>: "user.jaeger"

  • logging.openshift.io/elasticsearch-cert.curator-<shared-es-node-name>: "system.logging.curator"

其中 <shared-es-node-name> 是 Elasticsearch 节点的名称。例如,如果您创建了一个名为 custom-es 的 Elasticsearch 节点,您的自定义资源可能如下例所示。

显示注释的 Elasticsearch CR 示例
apiVersion: logging.openshift.io/v1
kind: Elasticsearch
metadata:
  annotations:
    logging.openshift.io/elasticsearch-cert-management: "true"
    logging.openshift.io/elasticsearch-cert.jaeger-custom-es: "user.jaeger"
    logging.openshift.io/elasticsearch-cert.curator-custom-es: "system.logging.curator"
  name: custom-es
spec:
  managementState: Managed
  nodeSpec:
    resources:
      limits:
        memory: 16Gi
      requests:
        cpu: 1
        memory: 16Gi
  nodes:
    - nodeCount: 3
      proxyResources: {}
      resources: {}
      roles:
        - master
        - client
        - data
      storage: {}
  redundancyPolicy: ZeroRedundancy
先决条件
  • 已安装 Red Hat OpenShift Service Mesh Operator。

  • 已在您的集群中使用默认配置安装了 {logging-title}。

  • Elasticsearch 节点和 Jaeger 实例必须部署在同一命名空间中。例如,tracing-system

您可以通过在 Jaeger 自定义资源中将 spec.storage.elasticsearch.useCertManagement 设置为 true 来启用证书管理。

显示 useCertManagement 的示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: jaeger-prod
spec:
  strategy: production
  storage:
    type: elasticsearch
    elasticsearch:
      name: custom-es
      doNotProvision: true
      useCertManagement: true

在配置 Elasticsearch 时,Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 将 Elasticsearch 自定义资源的 name 设置为 Jaeger 自定义资源中 spec.storage.elasticsearch.name 的值。

证书由 OpenShift Elasticsearch Operator 配置,Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 注入证书。

查询配置选项

Query 是一种从存储中检索跟踪并托管用户界面以显示跟踪的服务。

表 14. Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 用于定义 Query 的参数
参数 描述 默认值
spec:
  query:
    replicas:

指定要创建的 Query 副本数量。

整数,例如,2

表 15. 传递给 Query 的配置参数
参数 描述 默认值
spec:
  query:
    options: {}

定义 Query 服务的配置选项。

options:
  log-level:

Query 的日志级别。

可能的值:debuginfowarnerrorfatalpanic

options:
  query:
    base-path:

所有 jaeger-query HTTP 路由的基本路径可以设置为非根值,例如,/jaeger 将导致所有 UI URL 以 /jaeger 开头。当在反向代理后面运行 jaeger-query 时,这非常有用。

/<path>

Query 配置示例
apiVersion: jaegertracing.io/v1
kind: "Jaeger"
metadata:
  name: "my-jaeger"
spec:
  strategy: allInOne
  allInOne:
    options:
      log-level: debug
      query:
        base-path: /jaeger

Ingester 配置选项

Ingester 是一种从 Kafka 主题读取并写入 Elasticsearch 存储后端的服务。如果您使用的是 allInOneproduction 部署策略,则无需配置 Ingester 服务。

表 16. 传递给 Ingester 的 Jaeger 参数
参数 描述
spec:
  ingester:
    options: {}

定义 Ingester 服务的配置选项。

options:
  deadlockInterval:

指定 Ingester 在终止前必须等待消息的间隔(以秒或分钟为单位)。默认情况下禁用死锁间隔(设置为 0),以避免在系统初始化期间没有消息到达时终止 Ingester。

分钟和秒,例如,1m0s。默认值为 0

options:
  kafka:
    consumer:
      topic:

topic 参数标识收集器用于生成消息以及 Ingester 用于使用消息的 Kafka 配置。

消费者的标签。例如,jaeger-spans

options:
  kafka:
    consumer:
      brokers:

标识 Ingester 用于使用消息的 Kafka 配置。

代理的标签,例如,my-cluster-kafka-brokers.kafka:9092

options:
  log-level:

Ingester 的日志级别。

可能的值:debuginfowarnerrorfataldpanicpanic

流式收集器和 Ingester 示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-streaming
spec:
  strategy: streaming
  collector:
    options:
      kafka:
        producer:
          topic: jaeger-spans
          brokers: my-cluster-kafka-brokers.kafka:9092
  ingester:
    options:
      kafka:
        consumer:
          topic: jaeger-spans
          brokers: my-cluster-kafka-brokers.kafka:9092
      ingester:
        deadlockInterval: 5
  storage:
    type: elasticsearch
    options:
      es:
        server-urls: http://elasticsearch:9200

注入 sidecar

Red Hat OpenShift 分布式追踪平台 (Jaeger) 依赖于应用程序 pod 中的代理 sidecar 来提供 Agent。Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 可以将 Agent sidecar 注入到部署工作负载中。您可以启用自动 sidecar 注入或手动管理它。

自动注入 sidecar

Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 可以将 Jaeger Agent sidecar 注入到部署工作负载中。要启用 sidecar 的自动注入,请添加设置为字符串 true 或通过运行 $ oc get jaegers 返回的分布式追踪平台 (Jaeger) 实例名称的 sidecar.jaegertracing.io/inject 注释。当您指定 true 时,必须只有一个与部署相同的命名空间的分布式追踪平台 (Jaeger) 实例。否则,Operator 将无法确定要使用哪个分布式追踪平台 (Jaeger) 实例。部署上的特定分布式追踪平台 (Jaeger) 实例名称比应用于其命名空间的 true 具有更高的优先级。

以下代码段显示了一个简单的应用程序,它将注入一个 sidecar,该 sidecar 指向同一命名空间中可用的单个分布式追踪平台 (Jaeger) 实例

自动 sidecar 注入示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  annotations:
    "sidecar.jaegertracing.io/inject": "true" (1)
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: acme/myapp:myversion
1 设置为字符串 true 或 Jaeger 实例名称。

注入 sidecar 后,agent 即可在其默认位置 localhost 上访问。

手动注入 sidecar

Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 只能自动将 Jaeger Agent sidecar 注入到 Deployment 工作负载中。对于除 Deployments 之外的其他控制器类型,例如 StatefulSetsDaemonSets,您可以在规范中手动定义 Jaeger agent sidecar。

以下代码段显示了您可以包含在容器部分中用于 Jaeger agent sidecar 的手动定义

StatefulSet 的 sidecar 定义示例
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: example-statefulset
  namespace: example-ns
  labels:
    app: example-app
spec:

    spec:
      containers:
        - name: example-app
          image: acme/myapp:myversion
          ports:
            - containerPort: 8080
              protocol: TCP
        - name: jaeger-agent
          image: registry.redhat.io/distributed-tracing/jaeger-agent-rhel7:<version>
           # The agent version must match the Operator version
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5775
              name: zk-compact-trft
              protocol: UDP
            - containerPort: 5778
              name: config-rest
              protocol: TCP
            - containerPort: 6831
              name: jg-compact-trft
              protocol: UDP
            - containerPort: 6832
              name: jg-binary-trft
              protocol: UDP
            - containerPort: 14271
              name: admin-http
              protocol: TCP
          args:
            - --reporter.grpc.host-port=dns:///jaeger-collector-headless.example-ns:14250
            - --reporter.type=grpc

然后可以在 localhost 上的默认位置访问 agent。