×

当 Service Mesh Operator 部署ServiceMeshControlPlane资源时,它还可以创建分布式跟踪的资源。服务网格使用 Jaeger 进行分布式跟踪。

  • Jaeger 不使用 FIPS 验证的加密模块。

  • 从 Red Hat OpenShift Service Mesh 2.5 开始,Red Hat OpenShift 分布式跟踪平台 (Jaeger) 已弃用,将在以后的版本中删除。Red Hat 将在此版本的生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将被删除。作为 Red Hat OpenShift 分布式跟踪平台 (Jaeger) 的替代方案,您可以改用 Red Hat OpenShift 分布式跟踪平台 (Tempo)。

启用和禁用跟踪

您可以通过在ServiceMeshControlPlane资源中指定跟踪类型和采样率来启用分布式跟踪。

默认all-in-one Jaeger 参数
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.6
  tracing:
    sampling: 100
    type: Jaeger

在 Red Hat OpenShift Service Mesh 2.6 中,跟踪类型Jaeger已弃用,默认情况下已禁用。

在 Red Hat OpenShift Service Mesh 2.5 及更早版本中,跟踪类型Jaeger默认情况下已启用。要禁用Jaeger跟踪,请将ServiceMeshControlPlane资源的spec.tracing.type参数设置为None

采样率决定了 Envoy 代理生成跟踪的频率。您可以使用采样率选项来控制向跟踪系统报告的请求百分比。您可以根据网格中的流量和要收集的跟踪数据量来配置此设置。您可以将sampling配置为表示 0.01% 增量的比例整数。例如,将值设置为10会采样 0.1% 的跟踪,将值设置为500会采样 5% 的跟踪,而设置为10000则会采样 100% 的跟踪。

SMCP 采样配置选项控制 Envoy 采样率。您可以在 Jaeger 自定义资源中配置 Jaeger 跟踪采样率。

在 SMCP 中指定 Jaeger 配置

您可以在ServiceMeshControlPlane资源的addons部分配置 Jaeger。但是,您可以在 SMCP 中配置的内容有一些限制。

当 SMCP 将配置信息传递给 Red Hat OpenShift 分布式跟踪平台 (Jaeger) 运算符时,它将触发三种部署策略之一:allInOneproductionstreaming

部署分布式跟踪平台

分布式追踪平台 (Jaeger) 预定义了多种部署策略。您需要在 Jaeger 自定义资源 (CR) 文件中指定部署策略。当您创建分布式追踪平台 (Jaeger) 实例时,Red Hat OpenShift 分布式追踪平台 (Jaeger) 算子将使用此配置文件创建部署所需的资源。

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

  • allInOne (默认) - 此策略适用于开发、测试和演示目的,不适用于生产环境。主要的后台组件,Agent、Collector 和 Query 服务,都打包在一个可执行文件中,默认配置为使用内存存储。您可以在 SMCP 中配置此部署策略。

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

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

  • streaming - streaming 策略旨在通过提供位于 Collector 和 Elasticsearch 后端存储之间的流式处理功能来增强 production 策略。这在高负载情况下可以减轻后端存储的压力,并使其他追踪后处理功能能够直接从流式平台 (AMQ Streams/ Kafka) 获取实时跨度数据。您不能在 SMCP 中配置此部署策略;您必须配置 Jaeger CR 并将其链接到 SMCP。

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

默认分布式追踪平台 (Jaeger) 部署

如果您没有指定 Jaeger 配置选项,ServiceMeshControlPlane 资源将默认使用allInOne Jaeger 部署策略。使用默认的allInOne部署策略时,请将spec.addons.jaeger.install.storage.type设置为Memory。您可以接受默认值或在install下指定其他配置选项。

控制平面默认 Jaeger 参数 (内存)
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.6
  tracing:
    sampling: 10000
    type: Jaeger
  addons:
    jaeger:
      name: jaeger
      install:
        storage:
          type: Memory

生产环境分布式追踪平台 (Jaeger) 部署 (最小化)

要使用production部署策略的默认设置,请将spec.addons.jaeger.install.storage.type设置为Elasticsearch,并在install下指定其他配置选项。请注意,SMCP 只支持配置 Elasticsearch 资源和镜像名称。

控制平面默认 Jaeger 参数 (Elasticsearch)
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.6
  tracing:
    sampling: 10000
    type: Jaeger
  addons:
    jaeger:
      name: jaeger  #name of Jaeger CR
      install:
        storage:
          type: Elasticsearch
        ingress:
          enabled: true
  runtime:
    components:
      tracing.jaeger.elasticsearch: # only supports resources and image name
        container:
          resources: {}

生产环境分布式追踪平台 (Jaeger) 部署 (完全自定义)

SMCP 只支持最小的 Elasticsearch 参数。要完全自定义您的生产环境并访问所有 Elasticsearch 配置参数,请使用 Jaeger 自定义资源 (CR) 来配置 Jaeger。

创建并配置您的 Jaeger 实例,并将spec.addons.jaeger.name设置为 Jaeger 实例的名称,在此示例中为:MyJaegerInstance

链接了 Jaeger 生产 CR 的控制平面
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.6
  tracing:
    sampling: 1000
    type: Jaeger
  addons:
    jaeger:
      name: MyJaegerInstance #name of Jaeger CR
      install:
        storage:
          type: Elasticsearch
        ingress:
          enabled: true

Streaming Jaeger 部署

要使用streaming部署策略,您需要先创建并配置您的 Jaeger 实例,然后将spec.addons.jaeger.name设置为 Jaeger 实例的名称,在此示例中为:MyJaegerInstance

链接了 Jaeger streaming CR 的控制平面
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.6
  tracing:
    sampling: 1000
    type: Jaeger
  addons:
    jaeger:
      name: MyJaegerInstance  #name of Jaeger CR

在 Jaeger 自定义资源中指定 Jaeger 配置

您可以通过在 Jaeger 自定义资源 (CR) 中配置 Jaeger 而不是在ServiceMeshControlPlane (SMCP) 资源中配置 Jaeger 来完全自定义您的 Jaeger 部署。此配置有时被称为“外部 Jaeger”,因为配置是在 SMCP 之外指定的。

您必须在相同的命名空间中部署 SMCP 和 Jaeger CR。例如,istio-system

您可以配置和部署一个独立的 Jaeger 实例,然后将 Jaeger 资源的name指定为 SMCP 资源中spec.addons.jaeger.name的值。如果存在与name值匹配的 Jaeger CR,服务网格控制平面将使用现有的安装。这种方法可以让您完全自定义您的 Jaeger 配置。

部署最佳实践

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

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

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

为服务网格配置分布式追踪安全性

分布式追踪平台 (Jaeger) 使用 OAuth 进行默认身份验证。但是 Red Hat OpenShift Service Mesh 使用名为htpasswd的密钥来促进依赖服务(如 Grafana、Kiali 和分布式追踪平台 (Jaeger))之间的通信。当您在ServiceMeshControlPlane中配置分布式追踪平台 (Jaeger) 时,服务网格会自动配置安全设置以使用htpasswd

如果您在 Jaeger 自定义资源中指定分布式追踪平台 (Jaeger) 配置,则必须手动配置htpasswd设置并确保htpasswd密钥已挂载到您的 Jaeger 实例中,以便 Kiali 可以与其通信。

从 Web 控制台配置服务网格的分布式追踪安全

您可以在 Web 控制台中修改 Jaeger 资源以配置分布式追踪平台 (Jaeger) 安全性,以便与服务网格一起使用。

先决条件
  • 您可以作为具有cluster-admin角色的用户访问集群。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有dedicated-admin角色的帐户。

  • 必须安装 Red Hat OpenShift Service Mesh Operator。

  • 已将ServiceMeshControlPlane部署到集群。

  • 您可以访问 OpenShift Container Platform Web 控制台。

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

  2. 导航到OperatorsInstalled Operators

  3. 单击Project菜单,然后从列表中选择已部署ServiceMeshControlPlane资源的项目,例如istio-system

  4. 单击Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator

  5. Operator Details页面上,单击Jaeger选项卡。

  6. 单击您的 Jaeger 实例的名称。

  7. 在 Jaeger 详情页面上,单击YAML选项卡以修改您的配置。

  8. 编辑Jaeger自定义资源文件以添加htpasswd配置,如下例所示。

    • spec.ingress.openshift.htpasswdFile

    • spec.volumes

    • spec.volumeMounts

      显示htpasswd配置的 Jaeger 资源示例
      apiVersion: jaegertracing.io/v1
      kind: Jaeger
      spec:
        ingress:
          enabled: true
          openshift:
            htpasswdFile: /etc/proxy/htpasswd/auth
            sar: '{"namespace": "istio-system", "resource": "pods", "verb": "get"}'
          options: {}
          resources: {}
          security: oauth-proxy
        volumes:
          - name: secret-htpasswd
            secret:
              secretName: htpasswd
          - configMap:
              defaultMode: 420
              items:
                - key: ca-bundle.crt
                  path: tls-ca-bundle.pem
              name: trusted-ca-bundle
              optional: true
            name: trusted-ca-bundle
        volumeMounts:
          - mountPath: /etc/proxy/htpasswd
            name: secret-htpasswd
          - mountPath: /etc/pki/ca-trust/extracted/pem/
            name: trusted-ca-bundle
            readOnly: true
      # ...
  9. 单击保存

从命令行配置服务网格的分布式追踪安全

您可以通过运行 OpenShift CLI (oc) 来修改 Jaeger 资源,以配置用于服务网格的分布式追踪平台 (Jaeger) 安全性。

先决条件
  • 您可以作为具有cluster-admin角色的用户访问集群。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有dedicated-admin角色的帐户。

  • 必须安装 Red Hat OpenShift Service Mesh Operator。

  • 已将ServiceMeshControlPlane部署到集群。

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

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

    $ oc login https://<HOSTNAME>:6443
  2. 通过输入以下命令,更改到您安装控制平面的项目,例如istio-system

    $ oc project istio-system
  3. 运行以下命令以编辑 Jaeger 自定义资源文件。

    $ oc edit -n openshift-distributed-tracing -f jaeger.yaml
  4. 编辑Jaeger自定义资源文件以添加htpasswd配置,如下例所示。

    • spec.ingress.openshift.htpasswdFile

    • spec.volumes

    • spec.volumeMounts

      显示htpasswd配置的 Jaeger 资源示例
      apiVersion: jaegertracing.io/v1
      kind: Jaeger
      spec:
        ingress:
          enabled: true
          openshift:
            htpasswdFile: /etc/proxy/htpasswd/auth
            sar: '{"namespace": "istio-system", "resource": "pods", "verb": "get"}'
          options: {}
          resources: {}
          security: oauth-proxy
        volumes:
          - name: secret-htpasswd
            secret:
              secretName: htpasswd
          - configMap:
              defaultMode: 420
              items:
                - key: ca-bundle.crt
                  path: tls-ca-bundle.pem
              name: trusted-ca-bundle
              optional: true
            name: trusted-ca-bundle
        volumeMounts:
          - mountPath: /etc/proxy/htpasswd
            name: secret-htpasswd
          - mountPath: /etc/pki/ca-trust/extracted/pem/
            name: trusted-ca-bundle
            readOnly: true
  5. 运行以下命令以监视 pod 部署的进度。

    $ oc get pods -n openshift-distributed-tracing

分布式追踪默认配置选项

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/节点下。

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 Collector 配置选项

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

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

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

指定要创建的 Collector 副本数。

整数,例如5

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

定义 Jaeger Collector 的配置选项。

options:
  collector:
    num-workers:

从队列中拉取的工作人员数量。

整数,例如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:

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

如果未提供配置,收集器将返回默认的概率采样策略,所有服务的概率为 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下配置收集器、摄取器和查询服务的存储。可以根据性能和弹性要求配置多个这些组件的实例。

表 5. Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符用于定义分布式追踪存储的通用存储参数
参数 描述 默认值
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) 运算符将使用 OpenShift Elasticsearch 运算符根据自定义资源文件storage部分中提供的配置创建 Elasticsearch 集群。如果设置以下配置,Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符将配置 Elasticsearch

  • spec.storage:type设置为elasticsearch

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

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

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

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

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

如果已将 Elasticsearch 安装为 OpenShift Logging 的一部分,则 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符可以使用已安装的 OpenShift Elasticsearch 运算符来配置存储。

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

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

用于指定是否应由 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符配置 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 持久化存储配置。在本例中,使用大小为 5Gi 的 AWS gp2 卷。如果未指定值,分布式追踪平台 (Jaeger) 将使用 emptyDir。OpenShift Elasticsearch Operator 会配置 PersistentVolumeClaimPersistentVolume,这些不会随着分布式追踪平台 (Jaeger) 实例的删除而被删除。如果您创建具有相同名称和命名空间的分布式追踪平台 (Jaeger) 实例,则可以挂载相同的卷。

连接到现有的 Elasticsearch 实例

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

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

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

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

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

Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 使用 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

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

外部 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 收集器。

使用 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 注入证书。

有关使用 OpenShift Container Platform 配置 Elasticsearch 的更多信息,请参见 xref :../../observability/logging/log_storage/logging-config-es-store.adoc#logging-config-es-store[配置 Elasticsearch 日志存储] 或 配置和部署分布式追踪

查询配置选项

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

表 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 存储后端的 service。如果您使用的是 allInOneproduction 部署策略,则无需配置 Ingester service。

表 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