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: {}
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
| 创建对象时使用的应用程序接口版本。 |
|
|
| 定义要创建的 Kubernetes 对象的种类。 |
| |
|
有助于唯一标识对象的数据,包括 |
OpenShift 会自动生成 | |
| 对象的名称。 | Jaeger 实例的名称。 |
|
| 要创建的对象的规格。 | 包含 Jaeger 实例的所有配置参数。当需要一个通用定义(用于所有 Jaeger 组件)时,会在 spec 节点下定义它。当该定义与单个组件相关时,会将它放置在 spec/<component> 节点下。 | N/A |
| Jaeger 部署策略 |
|
|
| 由于 allInOne 镜像在单个 Pod 中部署了 agent、collector、query、ingester 和 Jaeger UI,因此该部署的配置应该在 allInOne 参数下嵌套组件配置。 | ||
| 定义 Jaeger 代理的配置选项。 | ||
| 定义 Jaeger Collector 的配置选项。 | ||
| 定义用于追踪的抽样策略的配置选项。 | ||
|
定义存储的配置选项。所有与存储相关的选项都应放在 | ||
| 定义 Query 服务的配置选项。 | ||
| 定义 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 集群的位置,收集器几乎不需要任何配置。
参数 | 描述 | 值 |
---|---|---|
spec: collector: options: {} | 定义 Jaeger Collector 的配置选项。 | |
autoscale: |
此参数用来控制是否为 Collector 启用/禁用自动扩展。设置为 |
|
kafka: producer: topic: jaeger-spans |
| producer 的标签 |
kafka: producer: brokers: my-cluster-kafka-brokers.kafka:9092 | 标识 Collector 用来生成消息的 Kafka 配置。如果没有指定代理,并且安装了 AMQ Streams 1.4.0+,Jaeger 将自助置备 Kafka。 | |
log-level: | 收集器的日志记录级别。 |
|
maxReplicas: | 指定在自动扩展 Collector 时创建的最大副本数。 |
整数,如 |
num-workers: | 从队列中拉取的 worker 数量。 |
整数,如 |
queue-size: | Collector 队列的大小。 |
整数,如 |
replicas: | 指定要创建的 Collector 副本数。 |
整数,如 |
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 后端中的集中配置来控制服务中的抽样策略。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: sampling: options: {} | 定义用于追踪的抽样策略的配置选项。 | ||
sampling: type: | 要使用的抽样策略。(请参阅上述描述。) |
有效值为 |
|
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 来置备存储。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: storage: options: {} | 定义存储的配置选项。 | ||
storage: type: | 要在部署中使用的存储类型。 |
|
|
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
General Elasticsearch configuration settings | |||
elasticsearch: server-urls: | Elasticsearch 实例的 URL。 |
Elasticsearch 服务器的完全限定域名。如果您指定了 | |
es: max-num-spans: | 在 Elasticsearch 中每个查询一次获取的最大 span 数量。 | 10000 | |
es: max-span-age: | Elasticsearch 中 span 的最大查询。 | 72h0m0s | |
elasticsearch: secretname: |
secret 的名称,如 | N/A | |
es: sniffer: | Elasticsearch 的侦察器配置。客户端使用侦察过程自动查找所有节点。默认禁用此选项。 |
|
|
es: timeout: | 用于查询的超时。当设为零时,则没有超时。 | 0s | |
es: username: |
Elasticsearch 所需的用户名。如果指定,基本身份验证也会加载 CA。另请参阅 | ||
es: password: |
Elasticsearch 所需的密码。另请参阅 | ||
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 会自动根据节点数量决定最合适的复制。 |
| |
es: num-replicas: | Elasticsearch 中每个索引的副本数。 | 1 | |
es: num-shards: | Elasticsearch 中每个索引的分片数量。 | 5 | |
Elasticsearch index and index cleaner configuration options | |||
es: create-index-templates: |
设置为 |
|
|
es: index-prefix: | Jaeger 索引的可选前缀。例如,将它设置为 "production" 会创建名为 "production-jaeger-*" 的索引。 | ||
esIndexCleaner: enabled: | 当使用 Elasticsearch 存储时,默认会创建一个任务来清理索引中的旧 trace。这个参数用于启用或禁用索引清理任务。 |
|
|
esIndexCleaner: numberOfDays: | 删除索引前等待的天数。 | 整数值 |
|
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)。默认禁用此选项。 |
|
|
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: |
设置为 |
|
|
es-archive: enabled: | 启用额外的存储。 |
|
|
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-archive: server-urls: |
以逗号分隔的 Elasticsearch 服务器列表。必须指定为完全限定的 URL,例如 | ||
es-archive: sniffer: | Elasticsearch 的侦察器配置。客户端使用侦察过程自动查找所有节点。默认禁用此选项。 |
|
|
es-archive: timeout: | 用于查询的超时。当设为零时,则没有超时。 | 0s | |
es-archive: tls: ca: | 用于验证远程服务器的 TLS 认证机构(CA)文件的路径。 | 默认将使用系统信任存储。 | |
es-archive: tls: cert: | TLS 证书文件的路径,用来识别此进程到远程服务器。 | ||
es-archive: tls: enabled: | 与远程服务器对话时启用传输层安全(TLS)。默认禁用此选项。 |
|
|
es-archive: tls: key: | TLS 私钥文件的路径,用于识别此进程到远程服务器。 | ||
es-archive: tls: server-name: | 覆盖远程服务器证书中的预期 TLS 服务器名称。 | ||
es-archive: token-file: | 包含 bearer 令牌的文件的路径。如果指定该标志,该标志也会载入认证机构(CA)文件。 | ||
es-archive: username: |
Elasticsearch 所需的用户名。如果指定,基本身份验证也会加载 CA。请参阅 | ||
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 置备PersistentVolumeClaim
和PersistentVolume
,它们不会在 Jaeger 实例中删除。如果创建具有相同名称和命名空间的 Jaeger 实例,则可以挂载同一卷。
5.2.5. Jaeger Query 配置选项
Query 是一个从存储中检索 trace 并托管用户界面来显示它们的服务。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: query: options: {} resources: {} | 定义 Query 服务的配置选项。 | ||
query: additional-headers: | 其他 HTTP 响应标头。可多次指定。 | 格式:“键: 值” | |
query: base-path: |
所有 jaeger-query HTTP 路由的基本路径都可设置为非 root 值,例如, | /{path} | |
query: port: | 查询服务的端口。 | 16686 | |
options: log-level: | Query 的日志记录级别。 |
可能的值有: |
示例 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) 的服务。如果您使用 allInOne
或 production
部署策略,则不需要配置 Ingester 服务。
参数 | 描述 | 值 |
---|---|---|
spec: strategy: streaming ingester: options: {} | 定义 Ingester 服务的配置选项。 | |
autoscale: |
此参数控制是否为 Ingester 启用/禁用自动扩展。autoscaling 默认启用。设置为 |
|
kafka: consumer: topic: |
|
consumer 的标签例如, |
kafka: consumer: brokers: | Ingester 用来使用消息的 Kafka 配置的标识。 |
代理的标签,如 |
ingester: deadlockInterval: | 指定 Ingester 在终止前应该等待消息的时间间隔(以秒或分钟为单位)。默认情况下,死锁时间间隔是禁用的(设为 0),以免在系统初始化时没有消息到达,导致 Ingester 被终止。 |
分钟和秒,例如 |
log-level: | Ingester 的日志记录级别。 |
可能的值有: |
maxReplicas: | 指定在自动扩展 Ingester 时创建的最大副本数。 |
整数,如 |
流传输 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