1.27. Jaeger 配置参考

当 Service Mesh Operator 部署 ServiceMeshControlPlane 资源时,它还可以为分布式追踪创建资源。Service Mesh 使用 Jaeger 进行分布式追踪。

重要
  • Jaeger 不使用经 FIPS 验证的加密模块。
  • 从 Red Hat OpenShift Service Mesh 2.5 开始,Red Hat OpenShift distributed tracing Platform (Jaeger)已被弃用,并将在以后的发行版本中删除。红帽将在当前发行生命周期中提供对这个功能的程序漏洞修复和支持,但这个功能将不再获得改进,并将被删除。作为 Red Hat OpenShift distributed tracing Platform (Jaeger)的替代选择,您可以使用 Red Hat OpenShift distributed tracing Platform (Tempo)。

1.27.1. 启用和禁用追踪

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

默认的 all-in-one Jaeger 参数

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.5
  tracing:
    sampling: 100
    type: Jaeger

目前,Jaeger 是唯一支持的追踪类型。

默认启用 Jaeger。要禁用追踪,将 type 设置为 None

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

注意

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

1.27.2. 在 SMCP 中指定 Jaeger 配置

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

当 SMCP 将配置信息传递给 Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 时,它会触发三种部署策略之一: allInOneproductionstreaming

1.27.3. 部署分布式追踪平台

分布式追踪平台 (Jaeger) 具有预定义的部署策略。您可以在 Jaeger 自定义资源 (CR) 文件中指定部署策略。当您创建分布式追踪平台 (Jaeger) 实例时,Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 会使用此配置文件创建部署所需的对象。

Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 目前支持以下部署策略:

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

    注意

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

  • production - production 策略主要用于生产环境,在生产环境中,对 trace 数据进行长期存储非常重要,同时需要更容易扩展和高度可用的构架。因此,每个后端组件都会单独部署。Agent 可以作为检测应用程序上的 sidecar 注入。Query 和 Collector 服务被配置为使用一个受支持的存储类型 - 当前为 Elasticsearch。可以根据性能和恢复能力的需要提供每个组件的多个实例。您可以在 SMCP 中配置此部署策略,但为了完全自定义,您必须在 Jaeger CR 中指定您的配置,并链接到 SMCP。
  • streaming - streaming 策略旨在通过提供 Collector 和 Elasticsearch 后端存储之间的流功能来增强 production 策略。这样做的好处是在高负载情况下降低后端存储压力,并允许其他 trace 后处理功能直接从流传输平台 (AMQ Streams/ Kafka) 中利用实时 span 数据。您无法在 SMCP 中配置此部署策略 ; 您必须配置 Jaeger CR 并链接到 SMCP。
注意

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

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

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

control plane 默认 Jaeger 参数(Memory)

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.5
  tracing:
    sampling: 10000
    type: Jaeger
  addons:
    jaeger:
      name: jaeger
      install:
        storage:
          type: Memory

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

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

control plane 默认 Jaeger 参数 (Elasticsearch)

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.5
  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: {}

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

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

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

带有链接 Jaeger production CR 的 control plane

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.5
  tracing:
    sampling: 1000
    type: Jaeger
  addons:
    jaeger:
      name: MyJaegerInstance #name of Jaeger CR
      install:
        storage:
          type: Elasticsearch
        ingress:
          enabled: true

1.27.3.4. 流 Jaeger 部署

要使用 streaming 部署策略,请首先创建和配置 Jaeger 实例,然后将 spec.addons.jaeger.name 设置为 Jaeger 实例的名称,在本例中为 MyJaegerInstance

带有链接 Jaeger streaming CR 的 control plane

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
spec:
  version: v2.5
  tracing:
    sampling: 1000
    type: Jaeger
  addons:
    jaeger:
      name: MyJaegerInstance  #name of Jaeger CR

1.27.4. 在 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,Service Mesh control plane 将使用现有安装。这种方法可让您完全自定义 Jaeger 配置。

1.27.4.1. 部署最佳实践

  • Red Hat OpenShift distributed tracing 平台实例名称必须是唯一的。如果您有多个 Red Hat OpenShift distributed tracing 平台 (Jaeger) 实例并使用 sidecar 注入的代理,则 Red Hat OpenShift distributed tracing 平台 (Jaeger) 实例应具有唯一的名称,注入注解应该明确指定追踪数据的名称。
  • 如果您有多租户实现,且租户由命名空间分开,请将 Red Hat OpenShift distributed tracing Platform (Jaeger)实例部署到每个租户命名空间中。

有关配置持久性存储的详情,请参考了解持久性存储以及您选择的存储选项的适当配置主题。

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

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

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

1.27.4.2.1. 从 web 控制台为服务网格配置分布式追踪安全性

您可以修改 Jaeger 资源来配置分布式追踪平台(Jaeger)安全性,以便在 web 控制台中用于 Service Mesh。

先决条件

  • 您可以使用具有 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 distributed tracing Platform (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. Save
1.27.4.2.2. 使用命令行为服务网格配置分布式追踪安全性

您可以通过运行 OpenShift CLI (oc)来修改 Jaeger 资源来配置分布式追踪平台(Jaeger)安全性,以便从命令行与 Service Mesh 一起使用。

先决条件

  • 您可以使用具有 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. 输入以下命令来更改安装 control plane 的项目,如 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

1.27.4.3. 分布式追踪默认配置选项

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.39. 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:

定义代理的配置选项。

  

collector:

定义 Jaeger Collector 的配置选项。

  

sampling:

定义用于追踪的抽样策略的配置选项。

  

storage:

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

  

query:

定义 Query 服务的配置选项。

  

ingester:

定义 Ingester 服务的配置选项。

  

以下示例 YAML 是使用默认设置创建 Red Hat OpenShift distributed tracing Platform (Jaeger)部署所需的最小 YAML。

最低要求示例 dist-tracing-all-in-one.yaml

apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: jaeger-all-in-one-inmemory

1.27.4.4. Jaeger Collector 配置选项

Jaeger Collector 组件负责接收 tracer 捕获的 span,在使用 production 策略时将其写入持久性 Elasticsearch 存储,或使用 streaming 策略时将其写入 AMQ Streams。

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

表 1.40. Operator 用来定义 Jaeger Collector 的参数

参数描述
collector:
  replicas:

指定要创建的 Collector 副本数。

整数,如 5

表 1.41. 传递给 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 参数标识收集器用来生成消息的 Kafka 配置以及要使用消息的 ingester。

producer 的标签。

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

标识 Collector 用来生成消息的 Kafka 配置。如果没有指定代理,并且安装了 AMQ Streams 1.4.0+,Red Hat OpenShift distributed tracing Platform (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。所有其他选项都是可选的。

 

1.27.4.5. 分布式追踪抽样配置选项

Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 可用于定义抽样策略,以提供给配置为使用远程 sampler 的 tracer。

虽然生成了所有 trace,但只有几个会被抽样。对某个 trace 进行抽样会标记该 trace 用于进一步处理和存储。

注意

如果一个 trace 由 Envoy 代理启动,则不会相关,因为抽样决定是在那里做出的。只有在应用程序使用客户端启动 trace 时,Jaeger 抽样决定才相关。

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

分布式追踪平台(Jaeger)库支持以下抽样:

  • Probabilistic(概率) - sampler 做出一个随机抽样决定,其抽样的概率等于 sampling.param 属性的值。例如,使用 sampling.param=0.1 代表大约为 10 个 trace 抽样 1 次。
  • Rate Limiting(速率限制) - sampler 使用泄漏存储桶速率限制器来确保 trace 使用某种恒定速率进行抽样。例如,使用 sampling.param=2.0 抽样请求,速率为每秒 2 个 trace。

表 1.42. 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

这个示例定义了一种概率性的默认抽样策略,trace 实例被抽样的几率为 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

1.27.4.6. 分布式追踪存储配置选项

您可以在 spec.storage 下为 Collector、Ingester 和 Query 服务配置存储。可以根据性能和恢复能力的需要提供每个组件的多个实例。

表 1.43. Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 用来定义分布式追踪存储的一般存储参数

参数描述默认值
spec:
  storage:
    type:

要在部署中使用的存储类型。

memoryelasticsearch。内存存储仅适用于开发、测试、演示和验证概念环境,因在关闭 pod 时,数据不会保留。对于生产环境,分布式追踪平台(Jaeger)支持 Elasticsearch 进行持久性存储。

内存

storage:
  secretname:

secret 名称,例如 tracing-secret

 

N/A

storage:
  options: {}

定义存储的配置选项。

  

表 1.44. Elasticsearch 索引清理参数

参数描述默认值
storage:
  esIndexCleaner:
    enabled:

当使用 Elasticsearch 存储时,默认会创建一个任务来清理索引中的旧 trace。这个参数用于启用或禁用索引清理任务。

true/ false

true

storage:
  esIndexCleaner:
    numberOfDays:

删除索引前等待的天数。

整数值

7

storage:
  esIndexCleaner:
    schedule:

为 Elasticsearch 索引的清理频率定义调度。

Cron 表达式

"55 23 * * *"

1.27.4.6.1. 自动置备 Elasticsearch 实例

当您部署 Jaeger 自定义资源时,Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 会使用 OpenShift Elasticsearch Operator 根据自定义资源文件的 storage 部分中提供的配置创建 Elasticsearch 集群。如果设置了以下配置,Red Hat OpenShift distributed tracing Platform (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 distributed tracing platform (Jaeger) Operator 会将 Elasticsearch 自定义资源名称设置为 Jaeger 自定义资源的 spec.storage.elasticsearch.namename 值。如果没有为 spec.storage.elasticsearch.name 指定一个值,Operator 会使用 elasticsearch

限制

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

如果您已经安装了 Elasticsearch 作为 OpenShift Logging 的一部分,Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 可使用已安装的 OpenShift Elasticsearch Operator 来置备存储。

以下配置参数用于一个 自置备的 Elasticsearch 实例,这是由 Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 使用 OpenShift Elasticsearch Operator 创建的实例。在配置文件中,您可以在 spec:storage:elasticsearch 下为自助置备 Elasticsearch 指定配置选项。

表 1.45. Elasticsearch 资源配置参数

参数描述默认值
elasticsearch:
  properties:
    doNotProvision:

用于指定 Red Hat OpenShift distributed tracing platform (Jaeger) Operator 是否应该置备 Elasticsearch 实例。

true/false

true

elasticsearch:
  properties:
    name:

Elasticsearch 实例的名称。Red Hat OpenShift distributed tracing platform (Jaeger) Operator 使用此参数中指定的 Elasticsearch 实例连接到 Elasticsearch。

string

elasticsearch

elasticsearch:
  nodeCount:

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

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

3

elasticsearch:
  resources:
    requests:
      cpu:

根据您的环境配置,请求的 CPU 数量。

以内核数或 millicores 指定,例如 200m, 0.5, 1。例如,概念证明 = 500m,最小部署 =1

1

elasticsearch:
  resources:
    requests:
      memory:

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

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

16Gi

elasticsearch:
  resources:
    limits:
      cpu:

根据您的环境配置,CPU 数量的限值。

以内核数或 millicores 指定,例如 200m, 0.5, 1。例如,概念证明 = 500m,最小部署 =1

 
elasticsearch:
  resources:
    limits:
      memory:

根据您的环境配置,可用的内存限值。

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

 
elasticsearch:
  redundancyPolicy:

数据复制策略定义如何在集群中的数据节点之间复制 Elasticsearch 分片:如果没有指定,Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 会自动根据节点数量决定最合适的复制。

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

 
elasticsearch:
  useCertManagement:

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

true/false

true

通过这个设置可以使每个 Elasticsearch 节点使用较低内存进行操作,但对于生产环境部署,不建议这样做。对于生产环境,您应该默认为每个 pod 分配不少于 16Gi 内存,但最好为每个 pod 最多分配 64Gi 内存。

生产环境存储示例

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 Operator 置备 PersistentVolumeClaimPersistentVolume,它们不会在分布式追踪平台(Jaeger)实例中删除。如果创建具有相同名称和命名空间的分布式追踪平台(Jaeger)实例,则可以挂载同一卷。
1.27.4.6.2. 连接到现有 Elasticsearch 实例

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

当您部署 Jaeger 自定义资源时,如果设置了以下配置,Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 将不会置备 Elasticsearch:

  • spec.storage.elasticsearch.doNotProvision 设置为 true
  • spec.storage.options.es.server-urls 有一个值
  • spec.storage.elasticsearch.name 具有一个值,或者 Elasticsearch 实例名称是 elasticsearch

Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 使用 spec.storage.elasticsearch.name 中指定的 Elasticsearch 实例连接到 Elasticsearch。

限制

  • 您无法将 OpenShift Container Platform 日志记录 Elasticsearch 实例与分布式追踪平台(Jaeger)共享或重复使用。Elasticsearch 集群旨在专用于单个分布式追踪平台(Jaeger)实例。

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

表 1.46. 常规 ES 配置参数

参数描述默认值
es:
  server-urls:

Elasticsearch 实例的 URL。

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

http://elasticsearch.<namespace>.svc:9200

es:
  max-doc-count:

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

 

10000

es:
  max-num-spans:

[已弃用 - 将在以后的版本中删除,使用 es.max-doc-count 代替。] 在 Elasticsearch 中每个查询每次抓取的最大 span 数量。如果同时设置了 es.max-num-spanses.max-doc-count,Elasticsearch 将使用两者中的较小的值。

 

10000

es:
  max-span-age:

Elasticsearch 中 span 的最大查询。

 

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

表 1.47. ES 数据复制参数

参数描述默认值
es:
  num-replicas:

Elasticsearch 中每个索引的副本数。

 

1

es:
  num-shards:

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

 

5

表 1.48. ES 索引配置参数

参数描述默认值
es:
  create-index-templates:

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

true/ false

true

es:
  index-prefix:

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

  

表 1.49. ES 批量处理器配置参数

参数描述默认值
es:
  bulk:
    actions:

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

 

1000

es:
  bulk:
    flush-interval:

提交批量请求的时间.要禁用批量处理器清除间隔,请将其设置为零。

 

200ms

es:
  bulk:
    size:

在批量处理器决定提交更新之前,批量请求可以处理的字节数。

 

5000000

es:
  bulk:
    workers:

可以接收并将批量请求提交 Elasticsearch 的 worker 数量。

 

1

表 1.50. 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 令牌的文件的路径。如果指定该标志,该标志也会载入认证机构(CA)文件。

  

表 1.51. ES 归档配置参数

参数描述默认值
es-archive:
  bulk:
    actions:

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

 

0

es-archive:
  bulk:
    flush-interval:

提交批量请求的时间.要禁用批量处理器清除间隔,请将其设置为零。

 

0s

es-archive:
  bulk:
    size:

在批量处理器决定提交更新之前,批量请求可以处理的字节数。

 

0

es-archive:
  bulk:
    workers:

可以接收并将批量请求提交 Elasticsearch 的 worker 数量。

 

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 中的每个查询一次获取的最大 span 数量。

 

0

es-archive:
  max-span-age:

Elasticsearch 中 span 的最大查询。

 

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,例如 http://localhost: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:

包含 bearer 令牌的文件的路径。如果指定该标志,该标志也会载入认证机构(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

以下示例显示了使用从存储在 secret 中的卷和用户/密码挂载了 TLS CA 证书的外部 Elasticsearch 集群的 Jaeger CR。

外部 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 证书,但在使用 mutual TLS 时,它也可以包含 es.tls.key 和 es.tls.cert。
3
定义环境变量 ES_PASSWORD 和 ES_USERNAME 的 Secret。由 kubectl create secret generic tracing-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic 创建
4
被挂载到所有存储组件的卷挂载和卷。

1.27.4.7. 使用 Elasticsearch 管理证书

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

重要

使用 Elasticsearch 管理证书只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

从版本 2.4 开始,Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 使用 Elasticsearch 自定义资源中的以下注解将证书创建委派给 OpenShift Elasticsearch Operator:

  • 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 distributed tracing Platform (Jaeger) Operator 将 Elasticsearch 自定义资源的 name 设置为 Jaeger 自定义资源的 spec.storage.elasticsearch.name 的值。

证书由 OpenShift Elasticsearch Operator 和 Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 注入证书。

有关在 OpenShift Container Platform 中配置 Elasticsearch 的更多信息,请参阅配置 Elasticsearch 日志存储配置和部署分布式追踪

1.27.4.8. 查询配置选项

Query 是一个从存储中检索 trace 并托管用户界面来显示它们的服务。

表 1.52. Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 用来定义 Query 的参数

参数描述默认值
spec:
  query:
    replicas:

指定要创建的 Query 副本数。

整数,如 2

 

表 1.53. 传递给 Query 的配置参数

参数描述默认值
spec:
  query:
    options: {}

定义 Query 服务的配置选项。

  
options:
  log-level:

Query 的日志记录级别。

可能的值有: debuginfowarnerrorfatalpanic

 
options:
  query:
    base-path:

所有 jaeger-query HTTP 路由的基本路径都可设置为非 root 值,例如,/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

1.27.4.9. Ingester 配置选项

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

表 1.54. 传递给 Ingester 的 Jaeger 参数

参数描述
spec:
  ingester:
    options: {}

定义 Ingester 服务的配置选项。

 
options:
  deadlockInterval:

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

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

options:
  kafka:
    consumer:
      topic:

topic 参数标识收集器用来生成消息的 Kafka 配置,并使用 Ingester。

consumer 的标签例如,jaeger-spans.

options:
  kafka:
    consumer:
      brokers:

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

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

options:
  log-level:

Ingester 的日志记录级别。

可能的值有: debug,info,warn,error,fatal,dpanic,panic.

流传输 Collector 和 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