5.2. 自定义 Jaeger 部署

5.2.1. Jaeger 默认配置选项

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

Jaeger 通用 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: {}

表 5.1. Jaeger 参数

参数描述默认值

apiVersion:

创建对象时使用的应用程序接口版本。

jaegertracing.io/v1

jaegertracing.io/v1

kind:

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

jaeger

 

metadata:

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

 

OpenShift 会自动生成 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:

定义 Jaeger 代理的配置选项。

  

collector:

定义 Jaeger Collector 的配置选项。

  

sampling:

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

  

storage:

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

  

query:

定义 Query 服务的配置选项。

  

ingester:

定义 Ingester 服务的配置选项。

  

以下示例 YAML 是使用默认设置创建 Jaeger 实例的最低要求。

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

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

5.2.2. Jaeger Collector 配置选项

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

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

表 5.2. Jaeger 收集器参数

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

定义 Jaeger Collector 的配置选项。

 
autoscale:

此参数用来控制是否为 Collector 启用/禁用自动扩展。设置为 false 以明确禁用自动扩展。

true/false

kafka:
  producer:
    topic: jaeger-spans

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

producer 的标签

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

标识 Collector 用来生成消息的 Kafka 配置。如果没有指定代理,并且安装了 AMQ Streams 1.4.0+,Jaeger 将自助置备 Kafka。

 
log-level:

收集器的日志记录级别。

tracedebuginfowarningerrorfatalpanic

maxReplicas:

指定在自动扩展 Collector 时创建的最大副本数。

整数,如 100

num-workers:

从队列中拉取的 worker 数量。

整数,如 50

queue-size:

Collector 队列的大小。

整数,如 2000

replicas:

指定要创建的 Collector 副本数。

整数,如 5

5.2.2.1. 配置 Collector 进行自动扩展

您可以将 Collector 配置为自动扩展,Collector 将根据 CPU 和/或内存的使用情况进行扩展或缩减。将 Collector 配置为自动扩展可帮助您确保在负载增加时扩展 Jaeger 环境,并在需要较少资源时缩减资源以节约成本。您可以通过将 autoscale 参数设置为 true 来配置自动扩展,并为您希望 Collector 的 pod 使用的资源指定一个 .spec.collector.maxReplicas 的值。如果没有为 .spec.collector.maxReplicas 设置值,Operator 将把它设置为 100

默认情况下,当没有为 .spec.collector.replicas 提供值时,Jaeger Operator 会为 Collector 创建 Horizontal Pod Autoscaler(HPA)配置。如需有关 HPA 的更多信息,请参阅 Kubernetes 文档

以下是一个自动扩展配置示例,设置 Collector 的限制以及最大副本数:

Collector 自动扩展示例

apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-prod
spec:
  strategy: production
  collector:
    maxReplicas: 5
    resources:
      limits:
        cpu: 100m
        memory: 128Mi

5.2.3. Jaeger 抽样配置选项

Operator 可用于定义抽样策略,以提供给已经被配置为使用远程 sampler 的 tracer。

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

注意

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

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

Jaeger 库支持以下 sampler:

  • Constant(恒定) - sampler 总是对所有 trace 做出相同的决定。它要么对所有 trace 进行抽样 (samping.param=1),要么不对任何 trace 进行抽样 (samping.param=0)。
  • Probabilistic(概率) - sampler 做出一个随机抽样决定,其抽样的概率等于 sampling.param 属性的值。例如:如果 sample.param=0.1,则会对十分之一的 trace 进行抽样。
  • Rate Limiting(速率限制) - sampler 使用泄漏存储桶速率限制器来确保 trace 使用某种恒定速率进行抽样。例如,当 sample.param=2.0 时,它将对请求进行抽样,速率是每秒 2 个 trace。
  • Remote(远程) - sampler 会参考 Jaeger 代理来获取要在当前服务中使用的适当抽样策略。这样便可以通过 Jaeger 后端中的集中配置来控制服务中的抽样策略。

表 5.3. Jaeger 抽样参数

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

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

  
sampling:
  type:

要使用的抽样策略。(请参阅上述描述。)

有效值为 constprobabilisticratelimitingremote

remote

sampling:
  options:
    type:
    param:

所选抽样策略的参数。(请参阅上述示例。)

小数值和整数值 (0, .1, 1, 10)

N/A

这个示例定义了一种概率性的默认抽样策略,trace 实例被抽样的几率为 50%。

概率抽样示例

apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: with-sampling
spec:
  strategy: allInOne
  sampling:
    options:
      default_strategy:
        type: probabilistic
        param: 50

5.2.4. Jaeger 存储配置选项

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

限制

  • 每个命名空间只能有一个具有自助置备 Elasticsearch 实例的 Jaeger。
  • 每个命名空间只能有一个 Elasticsearch。
  • 您无法将 OpenShift Jaeger 日志记录 Elasticsearch 实例和 Jaeger 共享,或重复用于 Jaeger。Elasticsearch 集群意在专用于单个 Jaeger 实例。
注意

如果您已经安装了 Elasticsearch 作为 OpenShift 日志记录的一部分,Jaeger Operator 可以使用已安装的 Elasticsearch Operator 来置备存储。

表 5.4. Jaeger 常规存储参数

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

定义存储的配置选项。

  
storage:
  type:

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

memoryelasticsearch。内存存储仅适用于开发、测试、演示和验证概念环境,因在关闭 pod 时,数据不会保留。对于生产环境,Jaeger 支持 Elasticsearch 的持久性存储。

memory

表 5.5. Elasticsearch 配置参数

参数描述默认值
General Elasticsearch configuration settings
elasticsearch:
  server-urls:

Elasticsearch 实例的 URL。

Elasticsearch 服务器的完全限定域名。如果您指定了 spec:storage:type= elasticsearch,但没有为 server-urls 参数指定值,Jaeger Operator 将使用自定义资源文件的 spec:storage:elasticsearch 部分中的配置创建一个 Elasticsearch 集群。

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

es:
  max-num-spans:

在 Elasticsearch 中每个查询一次获取的最大 span 数量。

 

10000

es:
  max-span-age:

Elasticsearch 中 span 的最大查询。

 

72h0m0s

elasticsearch:
  secretname:

secret 的名称,如 jaeger-secret

 

N/A

es:
  sniffer:

Elasticsearch 的侦察器配置。客户端使用侦察过程自动查找所有节点。默认禁用此选项。

true/ false

false

es:
  timeout:

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

 

0s

es:
  username:

Elasticsearch 所需的用户名。如果指定,基本身份验证也会加载 CA。另请参阅 es.password

  
es:
  password:

Elasticsearch 所需的密码。另请参阅 es.username

  
es:
  version:

主要的 Elasticsearch 版本。如果没有指定,则该值将从 Elasticsearch 中自动探测到。

 

0

Elasticsearch resource configuration settings
elasticsearch:
  nodeCount:

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

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

1

elasticsearch:
  resources:
    requests:
      cpu:

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

以 core 或者 millicores 指定(例如: 200m, 0.5, 1)。例如,概念证明 = 500m,最小部署 =1

1Gi

elasticsearch:
  resources:
    requests:
      memory:

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

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

500m

elasticsearch:
  resources:
    limits:
      cpu:

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

以 core 或者 millicores 指定(例如: 200m, 0.5, 1)。例如,概念证明 = 500m,最小部署 =1

 
elasticsearch:
  resources:
    limits:
      memory:

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

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

 

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

Elasticsearch data replication options
elasticsearch:
  redundancyPolicy:

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

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

 
es:
  num-replicas:

Elasticsearch 中每个索引的副本数。

 

1

es:
  num-shards:

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

 

5

Elasticsearch index and index cleaner configuration options
es:
  create-index-templates:

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

true/ false

true

es:
  index-prefix:

Jaeger 索引的可选前缀。例如,将它设置为 "production" 会创建名为 "production-jaeger-*" 的索引。

  
esIndexCleaner:
  enabled:

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

true/ false

true

esIndexCleaner:
  numberOfDays:

删除索引前等待的天数。

整数值

7

esIndexCleaner:
  schedule:

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

Cron 表达式

"55 23 * * *"

esRollover:
  schedule:

为滚动到新的 Elasticsearch 索引的频率定义调度

Cron 表达式

'*/30 * * * *'

Configuration settings for Elasticsearch bulk processor
es:
  bulk:
    actions:

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

 

1000

es:
  bulk:
    flush-interval:

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

 

200ms

es:
  bulk:
    size:

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

 

5000000

es:
  bulk:
    workers:

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

 

1

Elasticsearch TLS configuration settings
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)文件。

  
Elasticsearch archive configuration settings
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-jaeger-*" 的索引。

  
es-archive:
  max-num-spans:

在 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:
  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
    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
    options:
      es:
        server-urls: https://quickstart-es-http.default.svc:9200
        index-prefix: my-prefix
        tls:
          ca: /es/certificates/ca.crt
    secretName: jaeger-secret
  volumeMounts:
    - name: certificates
      mountPath: /es/certificates/
      readOnly: true
  volumes:
    - name: certificates
      secret:
        secretName: quickstart-es-http-certs-public

具有持久性存储的存储示例:

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。Elasticsearch Operator 置备 PersistentVolumeClaimPersistentVolume,它们不会在 Jaeger 实例中删除。如果创建具有相同名称和命名空间的 Jaeger 实例,则可以挂载同一卷。

5.2.5. Jaeger Query 配置选项

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

表 5.6. Jaeger Query 参数

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

定义 Query 服务的配置选项。

  
query:
  additional-headers:

其他 HTTP 响应标头。可多次指定。

格式:“键: 值”

 
query:
  base-path:

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

/{path}

 
query:
  port:

查询服务的端口。

 

16686

options:
  log-level:

Query 的日志记录级别。

可能的值有:tracedebuginfowarningerrorfatalpanic

 

示例 Query 配置

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

5.2.6. Jaeger Ingester 配置选项

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

表 5.7. Jaeger Ingester 参数

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

定义 Ingester 服务的配置选项。

 
autoscale:

此参数控制是否为 Ingester 启用/禁用自动扩展。autoscaling 默认启用。设置为 false 以明确禁用自动扩展。

true/false

kafka:
  consumer:
    topic:

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

consumer 的标签例如,jaeger-spans.

kafka:
  consumer:
    brokers:

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

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

ingester:
  deadlockInterval:

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

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

log-level:

Ingester 的日志记录级别。

可能的值有:tracedebuginfowarningerrorfatalpanic

maxReplicas:

指定在自动扩展 Ingester 时创建的最大副本数。

整数,如 100

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

5.2.6.1. 配置 Ingester 进行自动扩展

您可以将 Ingester 配置为自动扩展,Ingester 将根据 CPU 和/或内存的使用情况进行扩展或缩减。将 Ingester 配置为自动扩展可帮助您确保在负载增加时扩展 Jaeger 环境,并在需要较少资源时缩减资源以节约成本。您可以通过将 autoscale 参数设置为 true 来配置自动扩展,并为您希望 Ingester 的 pod 使用的资源指定一个 .spec.ingester.maxReplicas 的值。如果没有为 .spec.ingester.maxReplicas 设置值,Operator 将把它设置为 100

默认情况下,当没有为 .spec.ingester.replicas 提供值时,Jaeger Operator 会为 Ingester 创建 Horizontal Pod Autoscaler(HPA)配置。如需有关 HPA 的更多信息,请参阅 Kubernetes 文档

以下是一个自动扩展配置示例,设置 Ingester 的限制以及最大副本数:

Ingester 自动扩展示例

apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simple-streaming
spec:
  strategy: streaming
  ingester:
    maxReplicas: 8
    resources:
      limits:
        cpu: 100m
        memory: 128Mi