×

当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) Operator时,它将触发三种部署策略之一:allInOneproductionstreaming

部署分布式跟踪平台

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

Red Hat OpenShift分布式跟踪平台(Jaeger) Operator当前支持以下部署策略

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

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

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

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

流式策略需要额外的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

流式 Jaeger 部署

要使用streaming部署策略,您需要先创建并配置您的 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

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

您可以通过在 Jaeger 自定义资源 (CR) 中配置 Jaeger 来完全自定义您的 Jaeger 部署,而不是在ServiceMeshControlPlane (SMCP) 资源中配置。此配置有时被称为“外部 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 注入代理,则 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部署到集群。

  • 您可以访问 Red Hat OpenShift Service on AWS Web 控制台。

步骤
  1. 以具有cluster-admin角色的用户身份登录到 Red Hat OpenShift Service on AWS Web 控制台。

  2. 导航到**运算符** → **已安装的运算符**。

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

  4. 单击**Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符**。

  5. 在**运算符详细信息**页面上,单击**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部署到集群。

  • 您可以访问与您的 Red Hat OpenShift Service on AWS 版本匹配的 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

Red Hat OpenShift Service on AWS 自动生成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

定义查询服务的配置选项。

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 是负责接收追踪器捕获的跨度并将它们写入持久化 Elasticsearch 存储(使用production策略时)或写入 AMQ Streams(使用streaming策略时)的组件。

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

表 2. 运营商用于定义 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) 运营商将自动配置 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) 运营商可用于定义采样策略,这些策略将提供给已配置为使用远程采样器的追踪器。

虽然会生成所有追踪,但只对少数进行采样。对追踪进行采样表示将追踪标记为需要进一步处理和存储。

如果追踪是由 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 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) Operator 是否应置备 Elasticsearch 实例。

true/false

true

elasticsearch:
  properties:
    name:

Elasticsearch 实例的名称。Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 使用此参数中指定的 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) Operator 会根据节点数量自动确定最合适的复制方式。

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

elasticsearch:
  useCertManagement:

用于指定分布式追踪平台 (Jaeger) 是否应使用 OpenShift Elasticsearch Operator 的证书管理功能。此功能已添加到 Red Hat OpenShift Service on AWS 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 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) 共享或重用 Red Hat OpenShift Service on AWS 日志 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,例如 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:

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

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 挂载到所有存储组件的卷挂载和卷。

查询配置选项

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

表 14. Red Hat OpenShift 分布式跟踪平台 (Jaeger) 运算符用于定义查询的参数
参数 描述 默认值
spec:
  query:
    replicas:

指定要创建的查询副本数。

整数,例如 2

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

定义查询服务的配置选项。

options:
  log-level:

查询的日志级别。

可能的值:debuginfowarnerrorfatalpanic

options:
  query:
    base-path:

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

/<path>

示例查询配置
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