×

当服务网格操作符部署ServiceMeshControlPlane资源时,它还可以创建分布式追踪的资源。服务网格使用 Jaeger 进行分布式追踪。

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

  • 从 Red Hat OpenShift 服务网格 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 服务网格 2.6 中,追踪类型Jaeger已弃用,默认情况下已禁用。

在 Red Hat OpenShift 服务网格 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)访问实时span数据。您无法在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) 中而不是在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控制台配置服务网格的分布式追踪安全性

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

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

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

  • 已部署到集群的ServiceMeshControlPlane

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

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

  2. 导航到**Operators** → **Installed 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 Dedicated 版本匹配的 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 Dedicated 自动生成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:

从队列中拉取数据的 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

probabilistic

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) 运算符用于定义分布式追踪存储的常规存储参数
参数 描述 默认值
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 日志记录的一部分安装,则 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 Dedicated 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 运算符将配置不会随分布式追踪平台 (Jaeger) 实例一起删除的PersistentVolumeClaimPersistentVolume。如果使用相同的名称和命名空间创建分布式追踪平台 (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 Dedicated 日志记录 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中跨度的最大回溯时间。

72小时

es:
  sniffer:

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

true/ false

false

es:
  sniffer-tls-enabled:

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

true/ false

false

es:
  timeout:

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

0秒

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,在此时间之后,将提交批量请求,而不管其他阈值如何。要禁用批量处理器刷新间隔,请将其设置为零。

200毫秒

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:

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

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

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

0

es-archive:
  bulk:
    flush-interval:

一个time.Duration,在此时间之后,将提交批量请求,而不管其他阈值如何。要禁用批量处理器刷新间隔,请将其设置为零。

0秒

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中跨度的最大回溯时间。

0秒

es-archive:
  num-replicas:

Elasticsearch中每个索引的副本数量。

0

es-archive:
  num-shards:

Elasticsearch中每个索引的分片数量。

0

es-archive:
  password:

Elasticsearch所需的密码。另见es.username

es-archive:
  server-urls:

Elasticsearch服务器的逗号分隔列表。必须指定为完全限定的URL,例如http://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:

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

0秒

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:

包含bearer token的文件路径。如果指定了此标志,它还会加载证书颁发机构 (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 挂载到所有存储组件的卷挂载和卷。

查询配置选项

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