3.2. 配置和部署分布式追踪
Red Hat OpenShift distributed tracing Platform Operator 使用一个自定义资源定义(CRD)文件来定义创建和部署分布式追踪平台资源时要使用的架构和配置设置。您可以安装默认配置或修改该文件以更好地满足您的业务要求。
Red Hat OpenShift distributed tracing Platform 具有预定义的部署策略。您可以在自定义资源文件中指定一个部署策略。当您创建分布式追踪平台实例时,Operator 会使用此配置文件创建部署所需的对象。
Jaeger 自定义资源文件显示部署策略
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: MyConfigFile
spec:
strategy: production 1
- 1
- Red Hat OpenShift distributed tracing Platform Operator 目前支持以下部署策略:
allInOne (默认)- 这个策略主要用于开发、测试和演示目的,它不用于生产环境。主要的后端组件 Agent、Collector 和 Query 服务都打包成单一可执行文件,默认为使用内存存储。
注意内存存储不是持久性的,这意味着如果分布式追踪平台实例关闭、重启或被替换,您的 trace 数据将会丢失。此外,内存存储无法扩展,因为每个 Pod 都有自己的内存。对于持久性存储,您必须使用
production
或streaming
策略,这些策略使用 Elasticsearch 作为默认存储。- production - production 策略主要用于生产环境,在生产环境中,对 trace 数据进行长期存储非常重要,同时需要更容易扩展和高度可用的构架。因此,每个后端组件都将单独部署。Agent 可以作为检测应用程序上的 sidecar 注入。Query 和 Collector 服务被配置为使用一个受支持的存储类型 - 当前为 Elasticsearch。可以根据性能和恢复能力的需要提供每个组件的多个实例。
streaming - streaming 策略旨在提供在 Collector 和 Elasticsearch 后端存储之间有效发挥作用的流传输功能,以此增强 production 策略。这样做的好处是在高负载情况下降低后端存储压力,并允许其他 trace 后处理功能直接从流传输平台 (AMQ Streams/ Kafka) 中利用实时 span 数据。
注意streaming 策略需要额外的 AMQ Streams 订阅。
目前 IBM Z 不支持 streaming 部署策略。
有两种方法可用来安装和使用 Red Hat OpenShift distributed tracing,作为服务网格的一部分或作为独立组件。如果您已将分布式追踪作为 Red Hat OpenShift Service Mesh 的一部分安装,您可以作为 ServiceMeshControlPlane 的一部分执行基本配置,但为了完全控制,应配置一个 Jaeger CR,然后在 ServiceMeshControlPlane 中引用您的分布式追踪配置文件。
3.2.1. 从 Web 控制台部署分布式追踪默认策略
自定义资源定义(CRD)定义部署 Red Hat OpenShift distributed tracing 实例时使用的配置。默认 CR 名为 jaeger-all-in-one-inmemory
,它配置为使用最少资源,以确保您可以在默认的 OpenShift Container Platform 安装中成功安装它。您可以使用此默认配置创建使用 AllInOne
部署策略的 Red Hat OpenShift distributed tracing 平台实例,或者您可以定义自己的自定义资源文件。
内存存储不是持久性的。如果 Jaeger pod 关闭、重启或被替换,您的 trace 数据将会丢失。对于持久性存储,您必须使用 production
或 streaming
策略,这些策略使用 Elasticsearch 作为默认存储。
先决条件
- 已安装 Red Hat OpenShift distributed tracing Platform Operator。
- 您已查看了如何自定义部署的说明。
-
您可以使用具有
cluster-admin
角色的用户访问集群。
步骤
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform web 控制台。 创建一个新项目,如
tracing-system
。注意如果作为 Service Mesh 的一部分安装,则需要在与
ServiceMeshControlPlane
资源相同的命名空间中安装分布式追踪资源,如istio-system
。-
浏览至 Home
Project。 - 点击 Create Project。
-
在 Name 字段中输入
tracing-system
。 - 点 Create。
-
浏览至 Home
-
导航到 Operators
Installed Operators。 -
如有必要,从 Project 菜单中选择
tracing-system
。您可能需要等待一些时间,让 Operator 复制到新项目中。 - 点 Red Hat OpenShift distributed tracing Platform Operator。在 Details 标签页中的 Provided APIs 下,Operator 提供了一个单个链接。
- 在 Jaeger 下,点 Create Instance。
- 在 Create Jaeger 页面上,要使用默认值进行安装,请点击 Create 来创建分布式追踪平台实例。
-
在 Jaegers 页面上,点击分布式追踪平台实例的名称,如
jaeger-all-in-one-inmemory
。 - 在 Jaeger Details 页面上,点击 Resources 选项卡。等待 pod 的状态变为"Running"再继续操作。
3.2.1.1. 通过 CLI 部署分布式追踪默认策略
按照以下步骤从命令行创建分布式追踪平台实例。
先决条件
- 已安装并验证 Red Hat OpenShift distributed tracing 平台 Operator。
- 您已查看了如何自定义部署的说明。
-
您可以访问与 OpenShift Container Platform 版本匹配的 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:8443
创建一个名为
tracing-system
的新项目。$ oc new-project tracing-system
创建一个名为
jaeger.yaml
的自定义资源文件,其中包含以下文本:示例 Jaeger-all-in-one.yaml
apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-all-in-one-inmemory
运行以下命令来部署分布式追踪平台:
$ oc create -n tracing-system -f jaeger.yaml
在安装过程中运行以下命令来监控 pod 的进度:
$ oc get pods -n tracing-system -w
安装过程完成后,您应该看到类似以下示例的输出:
NAME READY STATUS RESTARTS AGE jaeger-all-in-one-inmemory-cdff7897b-qhfdx 2/2 Running 0 24s
3.2.2. 从 Web 控制台部署分布式追踪生产环境策略
production
部署策略主要用于生产环境,它需要更具扩展性和高度可用的架构,在此情况下,对 trace 数据进行长期存储非常重要。
先决条件
- 已安装 OpenShift Elasticsearch Operator。
- 已安装 Red Hat OpenShift distributed tracing Platform Operator。
- 您已查看了如何自定义部署的说明。
-
您可以使用具有
cluster-admin
角色的用户访问集群。
步骤
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform web 控制台。 创建一个新项目,如
tracing-system
。注意如果作为 Service Mesh 的一部分安装,则需要在与
ServiceMeshControlPlane
资源相同的命名空间中安装分布式追踪资源,如istio-system
。-
浏览至 Home
Project。 - 点击 Create Project。
-
在 Name 字段中输入
tracing-system
。 - 点 Create。
-
浏览至 Home
-
导航到 Operators
Installed Operators。 -
如有必要,从 Project 菜单中选择
tracing-system
。您可能需要等待一些时间,让 Operator 复制到新项目中。 - 点 Red Hat OpenShift distributed tracing Platform Operator。在 Overview 选项卡上的 Provided APIs 下,Operator 提供了单个链接。
- 在 Jaeger 下,点 Create Instance。
在 Create Jaeger 页面上,将默认的
all-in-one
YAML 文本替换为您的生产环境的 YAML 配置,例如:使用 Elasticsearch 的示例 jaeger-production.yaml 文件
apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-production namespace: spec: strategy: production ingress: security: oauth-proxy storage: type: elasticsearch elasticsearch: nodeCount: 3 redundancyPolicy: SingleRedundancy esIndexCleaner: enabled: true numberOfDays: 7 schedule: 55 23 * * * esRollover: schedule: '*/30 * * * *'
- 单击 Create 以创建分布式追踪平台实例。
-
在 Jaegers 页面上,点击分布式追踪平台实例的名称,如
jaeger-prod-elasticsearch
。 - 在 Jaeger Details 页面上,点击 Resources 选项卡。等到所有 Pod 的状态变为“Running”再继续操作。
3.2.2.1. 通过 CLI 部署分布式追踪产品策略
按照以下步骤从命令行创建分布式追踪平台实例。
先决条件
- 已安装 OpenShift Elasticsearch Operator。
- 已安装 Red Hat OpenShift distributed tracing Platform Operator。
- 您已查看了如何自定义部署的说明。
-
您可以访问与 OpenShift Container Platform 版本匹配的 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:8443
创建一个名为
tracing-system
的新项目。$ oc new-project tracing-system
-
创建一个名为
jaeger-production.yaml
的自定义资源文件,其中包含上一步中的示例文件文本。 运行以下命令来部署分布式追踪平台:
$ oc create -n tracing-system -f jaeger-production.yaml
在安装过程中运行以下命令来监控 pod 的进度:
$ oc get pods -n tracing-system -w
安装过程完成后,您应该看到类似以下示例的输出:
NAME READY STATUS RESTARTS AGE elasticsearch-cdm-jaegersystemjaegerproduction-1-6676cf568gwhlw 2/2 Running 0 10m elasticsearch-cdm-jaegersystemjaegerproduction-2-bcd4c8bf5l6g6w 2/2 Running 0 10m elasticsearch-cdm-jaegersystemjaegerproduction-3-844d6d9694hhst 2/2 Running 0 10m jaeger-production-collector-94cd847d-jwjlj 1/1 Running 3 8m32s jaeger-production-query-5cbfbd499d-tv8zf 3/3 Running 3 8m32s
3.2.3. 从 Web 控制台部署分布式追踪流策略
streaming
部署策略主要用于生产环境,在生产环境中需要更具扩展性和高度可用的架构,其中,对 trace 数据进行长期存储非常重要。
streaming
策略提供了位于 Collector 和 Elasticsearch 存储之间的流功能。这在高负载情况下降低了存储压力,并允许其他 trace 后处理功能直接从 Kafka streaming 平台利用实时 span 数据。
streaming 策略需要额外的 AMQ Streams 订阅。如果您没有 AMQ Streams 订阅,请联络您的销售代表以了解更多信息。
目前 IBM Z 不支持 streaming 部署策略。
先决条件
- 已安装 AMQ Streams Operator。如果使用 1.4.0 或更高版本,您可以使用自助置备。否则,您必须创建 Kafka 实例。
- 已安装 Red Hat OpenShift distributed tracing Platform Operator。
- 您已查看了如何自定义部署的说明。
-
您可以使用具有
cluster-admin
角色的用户访问集群。
步骤
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform web 控制台。 创建一个新项目,如
tracing-system
。注意如果作为 Service Mesh 的一部分安装,则需要在与
ServiceMeshControlPlane
资源相同的命名空间中安装分布式追踪资源,如istio-system
。-
浏览至 Home
Project。 - 点击 Create Project。
-
在 Name 字段中输入
tracing-system
。 - 点 Create。
-
浏览至 Home
-
导航到 Operators
Installed Operators。 -
如有必要,从 Project 菜单中选择
tracing-system
。您可能需要等待一些时间,让 Operator 复制到新项目中。 - 点 Red Hat OpenShift distributed tracing Platform Operator。在 Overview 选项卡上的 Provided APIs 下,Operator 提供了单个链接。
- 在 Jaeger 下,点 Create Instance。
-
在 Create Jaeger 页面上,将默认的
all-in-one
YAML 文本替换为您的流传输 YAML 配置,例如:
示例 Jaeger-streaming.yaml 文件
apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-streaming spec: strategy: streaming collector: options: kafka: producer: topic: jaeger-spans #Note: If brokers are not defined,AMQStreams 1.4.0+ will self-provision Kafka. brokers: my-cluster-kafka-brokers.kafka:9092 storage: type: elasticsearch ingester: options: kafka: consumer: topic: jaeger-spans brokers: my-cluster-kafka-brokers.kafka:9092
- 单击 Create 以创建分布式追踪平台实例。
-
在 Jaegers 页面上,点击分布式追踪平台实例的名称,如
jaeger-streaming
。 - 在 Jaeger Details 页面上,点击 Resources 选项卡。等到所有 Pod 的状态变为“Running”再继续操作。
3.2.3.1. 通过 CLI 部署分布式追踪流策略
按照以下步骤从命令行创建分布式追踪平台实例。
先决条件
- 已安装 AMQ Streams Operator。如果使用 1.4.0 或更高版本,您可以使用自助置备。否则,您必须创建 Kafka 实例。
- 已安装 Red Hat OpenShift distributed tracing Platform Operator。
- 您已查看了如何自定义部署的说明。
-
您可以访问与 OpenShift Container Platform 版本匹配的 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:8443
创建一个名为
tracing-system
的新项目。$ oc new-project tracing-system
-
创建一个名为
jaeger-streaming.yaml
的自定义资源文件,其中包含上一步中的示例文件文本。 运行以下命令来部署 Jaeger:
$ oc create -n tracing-system -f jaeger-streaming.yaml
在安装过程中运行以下命令来监控 pod 的进度:
$ oc get pods -n tracing-system -w
安装过程完成后,您应该看到类似以下示例的输出:
NAME READY STATUS RESTARTS AGE elasticsearch-cdm-jaegersystemjaegerstreaming-1-697b66d6fcztcnn 2/2 Running 0 5m40s elasticsearch-cdm-jaegersystemjaegerstreaming-2-5f4b95c78b9gckz 2/2 Running 0 5m37s elasticsearch-cdm-jaegersystemjaegerstreaming-3-7b6d964576nnz97 2/2 Running 0 5m5s jaeger-streaming-collector-6f6db7f99f-rtcfm 1/1 Running 0 80s jaeger-streaming-entity-operator-6b6d67cc99-4lm9q 3/3 Running 2 2m18s jaeger-streaming-ingester-7d479847f8-5h8kc 1/1 Running 0 80s jaeger-streaming-kafka-0 2/2 Running 0 3m1s jaeger-streaming-query-65bf5bb854-ncnc7 3/3 Running 0 80s jaeger-streaming-zookeeper-0 2/2 Running 0 3m39s
3.2.4. 验证部署
3.2.4.1. 访问 Jaeger 控制台
要访问 Jaeger 控制台,您必须安装 Red Hat OpenShift Service Mesh 或 Red Hat OpenShift distributed tracing,并且安装、配置和部署了 Red Hat OpenShift distributed tracing 平台。
安装过程会创建路由来访问 Jaeger 控制台。
如果您知道 Jaeger 控制台的 URL,您可以直接访问它。如果您不知道 URL,请使用以下指示:
从 OpenShift 控制台的步骤
-
以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有
dedicated-admin
角色的帐户。 -
进入 Networking
Routes。 在 Routes 页面中,从 Namespace 菜单中选择 control plane 项目,如
tracing-system
。Location 列显示每个路由的链接地址。
-
如有必要,使用过滤器来查找
jaeger
路由。单击路由 位置 以启动控制台。 - 单击 Log In With OpenShift。
通过 CLI 操作的步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有dedicated-admin
角色的帐户。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
要使用命令行查询路由详情,请输入以下命令。在本例中,
trace-system
是 control plane 命名空间。$ export JAEGER_URL=$(oc get route -n tracing-system jaeger -o jsonpath='{.spec.host}')
-
启动浏览器并进入
https://<JAEGER_URL>
,其中<JAEGER_URL>
是您在上一步中发现的路由。 - 使用您用于访问 OpenShift Container Platform 控制台的相同用户名和密码登录。
如果您已将服务添加到服务网格中并生成了 trace,您可以使用过滤器和 Find Traces 按钮搜索 trace 数据。
如果您要验证控制台安装,则不会显示 trace 数据。
3.2.5. 自定义部署
3.2.5.1. 部署最佳实践
- Red Hat OpenShift distributed tracing 实例名称必须是唯一的。如果您有多个 Red Hat OpenShift distributed tracing 平台实例并使用 sidecar 注入的代理,则 Red Hat OpenShift distributed tracing 平台实例应具有唯一的名称,注入注解应该明确指定追踪数据的名称。
如果您有多租户实现,且租户由命名空间分开,请将 Red Hat OpenShift distributed tracing 平台实例部署到每个租户命名空间中。
- 多租户安装或 Red Hat OpenShift Dedicated 不支持将代理作为 daemonset。代理作为 sidecar 是这些用例唯一支持的配置。
-
如果您要作为 Red Hat OpenShift Service Mesh 的一部分安装分布式追踪,则分布追踪资源必须与
ServiceMeshControlPlane
资源在同一个命名空间中。
有关配置持久性存储的详情,请参考了解持久性存储以及您选择的存储选项的适当配置主题。
3.2.5.2. 分布式追踪默认配置选项
Jaeger 自定义资源(CR)定义创建分布式追踪平台资源时要使用的架构和设置。您可以修改这些参数以根据您的业务需求自定义分布式追踪平台实施。
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: {}
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
| 创建对象时要使用的 API 版本。 |
| |
|
| 定义要创建的 Kubernetes 对象的种类。 |
|
|
有助于唯一标识对象的数据,包括 | ||
OpenShift Container Platform 会自动生成 |
| 对象的名称。 | 分布式追踪平台实例的名称。 |
|
| 要创建的对象的规格。 |
包含您分布式追踪平台实例的所有配置参数。当需要所有 Jaeger 组件的通用定义时,会在 |
N/A |
| Jaeger 部署策略 |
|
|
|
因为 | |
| 定义代理的配置选项。 | ||
| 定义 Jaeger Collector 的配置选项。 | ||
| 定义用于追踪的抽样策略的配置选项。 | ||
|
定义存储的配置选项。所有与存储相关的选项都必须放在 | ||
| 定义 Query 服务的配置选项。 | ||
| 定义 Ingester 服务的配置选项。 |
以下示例 YAML 是使用默认设置创建 Red Hat OpenShift distributed tracing 平台部署的最低要求。
最低要求示例 dist-tracing-all-in-one.yaml
apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger-all-in-one-inmemory
3.2.5.3. Jaeger Collector 配置选项
Jaeger Collector 组件负责接收 tracer 捕获的 span,在使用 production
策略时将其写入持久性 Elasticsearch 存储,或使用 streaming
策略时将其写入 AMQ Streams。
Collector 是无状态的,因此很多 Jaeger Collector 实例可以并行运行。除了 Elasticsearch 集群的位置,收集器几乎不需要任何配置。
参数 | 描述 | 值 |
---|---|---|
collector: replicas: | 指定要创建的 Collector 副本数。 |
整数,如 |
参数 | 描述 | 值 |
---|---|---|
spec: collector: options: {} | 定义 Jaeger Collector 的配置选项。 | |
options: collector: num-workers: | 从队列中拉取的 worker 数量。 |
整数,如 |
options: collector: queue-size: | Collector 队列的大小。 |
整数,如 |
options: kafka: producer: topic: jaeger-spans |
| producer 的标签。 |
options: kafka: producer: brokers: my-cluster-kafka-brokers.kafka:9092 | 标识 Collector 用来生成消息的 Kafka 配置。如果没有指定代理,并且安装了 AMQ Streams 1.4.0+,Red Hat OpenShift distributed tracing Platform Operator 将自助置备 Kafka。 | |
options: log-level: | Collector 的日志记录级别。 |
可能的值有: |
3.2.5.4. 分布式追踪抽样配置选项
Red Hat OpenShift distributed tracing Platform Operator 可用于定义抽样策略,以提供给已经被配置为使用远程 sampler 的 tracer。
虽然生成了所有 trace,但只有几个会被抽样。对某个 trace 进行抽样会标记该 trace 用于进一步处理和存储。
如果一个 trace 由 Envoy 代理启动,则不会相关,因为抽样决定是在那里做出的。只有在应用程序使用客户端启动 trace 时,Jaeger 抽样决定才相关。
当服务收到不包含 trace 上下文的请求时,客户端会启动新的 trace,为它分配一个随机 trace ID,并根据当前安装的抽样策略做出抽样决定。抽样决定被传播到 trace 中的所有后续请求,以便其他服务不会再次做出抽样决定。
分布式追踪平台库支持以下抽样:
-
Probabilistic(概率) - sampler 做出一个随机抽样决定,其抽样的概率等于
sampling.param
属性的值。例如,使用sampling.param=0.1
代表大约为 10 个 trace 抽样 1 次。 -
Rate Limiting(速率限制) - sampler 使用泄漏存储桶速率限制器来确保 trace 使用某种恒定速率进行抽样。例如,使用
sampling.param=2.0
抽样请求,速率为每秒 2 个 trace。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: sampling: options: {} default_strategy: service_strategy: | 定义用于追踪的抽样策略的配置选项。 | 如果没有提供配置,Collector 会返回默认的概率抽样策略,所有服务都为 0.001(0.1%)概率。 | |
default_strategy: type: service_strategy: type: | 要使用的抽样策略。请参阅上述描述。 |
有效值是 |
|
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
如果没有用户提供的配置,分布式追踪平台将使用以下设置:
默认抽样
spec: sampling: options: default_strategy: type: probabilistic param: 1
3.2.5.5. 分布式追踪存储配置选项
您可以在 spec.storage
下为 Collector、Ingester 和 Query 服务配置存储。可以根据性能和恢复能力的需要提供每个组件的多个实例。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: storage: type: | 要在部署中使用的存储类型。 |
|
|
storage: secretname: |
secret 名称,例如 | N/A | |
storage: options: {} | 定义存储的配置选项。 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
storage: esIndexCleaner: enabled: | 当使用 Elasticsearch 存储时,默认会创建一个任务来清理索引中的旧 trace。这个参数用于启用或禁用索引清理任务。 |
|
|
storage: esIndexCleaner: numberOfDays: | 删除索引前等待的天数。 | 整数值 |
|
storage: esIndexCleaner: schedule: | 为 Elasticsearch 索引的清理频率定义调度。 | Cron 表达式 | "55 23 * * *" |
3.2.5.5.1. 自动置备 Elasticsearch 实例
部署 Jaeger 自定义资源时,Red Hat OpenShift distributed tracing platform Operator 会使用 OpenShift Elasticsearch Operator 根据自定义资源文件的 storage
部分中提供的配置创建 Elasticsearch 集群。如果设置了以下配置,Red Hat OpenShift distributed tracing Platform Operator 将置备 Elasticsearch:
-
spec.storage:type
设置为elasticsearch
-
spec.storage.elasticsearch.doNotProvision
设置为false
-
未定义
spec.storage.options.es.server-urls
,因此没有连接到 Red Hat Elasticsearch Operator 未置备的 Elasticsearch 实例。
在置备 Elasticsearch 时,Red Hat OpenShift distributed tracing platform Operator 会将 Elasticsearch 自定义资源名称设置为 Jaeger 自定义资源的 spec.storage.elasticsearch.name
的 name
值。如果没有为 spec.storage.elasticsearch.name
指定一个值,Operator 会使用 elasticsearch
。
限制
- 每个命名空间只能有一个具有自助置备 Elasticsearch 实例的分布式追踪平台。Elasticsearch 集群旨在专用于单个分布式追踪平台实例。
- 每个命名空间只能有一个 Elasticsearch。
如果您已经安装了 Elasticsearch 作为 OpenShift Logging 的一部分,Red Hat OpenShift distributed tracing Platform Operator 可使用已安装的 OpenShift Elasticsearch Operator 来置备存储。
以下配置参数用于一个 自置备的 Elasticsearch 实例,这是由 Red Hat OpenShift distributed tracing Platform Operator 使用 OpenShift Elasticsearch Operator 创建的实例。在配置文件中,您可以在 spec:storage:elasticsearch
下为自助置备 Elasticsearch 指定配置选项。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
elasticsearch: properties: doNotProvision: | 用于指定 Red Hat OpenShift distributed tracing platform Operator 是否应该置备 Elasticsearch 实例。 |
|
|
elasticsearch: properties: name: | Elasticsearch 实例的名称。Red Hat OpenShift distributed tracing platform Operator 使用此参数中指定的 Elasticsearch 实例连接到 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 Operator 会自动根据节点数量决定最合适的复制。 |
| |
elasticsearch: useCertManagement: | 用于指定分布式追踪平台是否应使用 Red Hat Elasticsearch Operator 的证书管理功能。此功能被添加到 OpenShift Container Platform 4.7 中的 Red Hat OpenShift 5.2 的日志记录子系统中,是新 Jaeger 部署的首选设置。 |
|
|
*通过这个设置可以使每个 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
。如果没有指定值,则分布式追踪平台将使用emptyDir
。OpenShift Elasticsearch Operator 置备PersistentVolumeClaim
和PersistentVolume
,它们不会在分布式追踪平台实例中删除。如果您创建具有相同名称和命名空间的分布式追踪平台实例,则可以挂载同一卷。
3.2.5.5.2. 连接到现有 Elasticsearch 实例
您可以使用现有 Elasticsearch 集群进行分布式追踪存储。现有的 Elasticsearch 集群(也称为 外部 Elasticsearch 实例)是由 Red Hat OpenShift distributed tracing platform Operator 或 Red Hat Elasticsearch Operator 安装的实例。
部署 Jaeger 自定义资源时,如果设置了以下配置,Red Hat OpenShift distributed tracing Platform 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 Operator 使用 spec.storage.elasticsearch.name
中指定的 Elasticsearch 实例连接到 Elasticsearch。
限制
- 您无法将 OpenShift Container Platform 日志记录 Elasticsearch 实例与分布式追踪平台共享或重复使用。Elasticsearch 集群旨在专用于单个分布式追踪平台实例。
红帽不为外部 Elasticsearch 实例提供支持。您可以在客户门户网站中查看经过测试的集成列表。
以下配置参数适用于已经存在的 Elasticsearch 实例,也称为外部 Elasticsearch 实例。在本例中,您可以在自定义资源文件中的 spec:storage:options:es
下为 Elasticsearch 指定配置选项。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
es: server-urls: | Elasticsearch 实例的 URL。 | Elasticsearch 服务器的完全限定域名。 | |
es: max-doc-count: |
从 Elasticsearch 查询返回的最大文档数量。这也适用于聚合。如果同时设置了 | 10000 | |
es: max-num-spans: |
[已弃用 - 将在以后的版本中删除,使用 | 10000 | |
es: max-span-age: | Elasticsearch 中 span 的最大查询。 | 72h0m0s | |
es: sniffer: | Elasticsearch 的侦察器配置。客户端使用侦察过程自动查找所有节点。默认禁用此选项。 |
|
|
es: sniffer-tls-enabled: | 在监控 Elasticsearch 集群时启用 TLS 的选项。客户端使用侦察过程自动查找所有节点。默认禁用 |
|
|
es: timeout: | 用于查询的超时。当设为零时,则没有超时。 | 0s | |
es: username: |
Elasticsearch 所需的用户名。如果指定,基本身份验证也会加载 CA。另请参阅 | ||
es: password: |
Elasticsearch 所需的密码。另请参阅 | ||
es: version: | 主要的 Elasticsearch 版本。如果没有指定,则该值将从 Elasticsearch 中自动探测到。 | 0 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
es: num-replicas: | Elasticsearch 中每个索引的副本数。 | 1 | |
es: num-shards: | Elasticsearch 中每个索引的分片数量。 | 5 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
es: create-index-templates: |
设置为 |
|
|
es: index-prefix: | 分布式追踪平台索引的可选前缀。例如,将其设置为 "production" 会创建名为 "production-tracing-*" 的索引。 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
es: bulk: actions: | 在批量处理器决定向磁盘提交更新前可添加到队列的请求数。 | 1000 | |
es: bulk: flush-interval: |
| 200ms | |
es: bulk: size: | 在批量处理器决定提交更新之前,批量请求可以处理的字节数。 | 5000000 | |
es: bulk: workers: | 可以接收并将批量请求提交 Elasticsearch 的 worker 数量。 | 1 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
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)文件。 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
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: | 分布式追踪平台索引的可选前缀。例如,将其设置为 "production" 会创建名为 "production-tracing-*" 的索引。 | ||
es-archive: max-doc-count: | 从 Elasticsearch 查询返回的最大文档数量。这也适用于聚合。 | 0 | |
es-archive: max-num-spans: |
[已弃用 - 将在以后的版本中删除,使用 | 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: sniffer-tls-enabled: | 在监控 Elasticsearch 集群时启用 TLS 的选项。客户端使用侦察过程自动查找所有节点。默认禁用此选项。 |
|
|
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 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
3.2.5.6. 使用 Elasticsearch 管理证书
您可以使用 Red Hat Elasticsearch Operator 创建和管理证书。使用 Red Hat Elasticsearch Operator 管理证书还可让您使用带有多个 Jaeger Collector 的单个 Elasticsearch 集群。
使用 Elasticsearch 管理证书只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
从版本 2.4 开始,Red Hat OpenShift distributed tracing 平台 Operator 使用 Elasticsearch 自定义资源中的以下注解将证书创建委派给 Red Hat 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
先决条件
- OpenShift Container Platform 4.7
- logging subsystem for Red Hat OpenShift 5.2
-
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
Red Hat OpenShift distributed tracing platform Operator 会将 Elasticsearch 自定义资源名称设置为 Jaeger 自定义资源的 spec.storage.elasticsearch.name
的 name
值。
证书由 Red Hat Elasticsearch Operator 和 Red Hat OpenShift distributed tracing 平台 Operator 注入证书。
3.2.5.7. 查询配置选项
Query 是一个从存储中检索 trace 并托管用户界面来显示它们的服务。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: query: replicas: | 指定要创建的 Query 副本数。 |
整数,如 |
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: query: options: {} | 定义 Query 服务的配置选项。 | ||
options: log-level: | Query 的日志记录级别。 |
可能的值有: | |
options: query: base-path: |
所有 jaeger-query HTTP 路由的基本路径都可设置为非 root 值,例如, | /<path> |
示例 Query 配置
apiVersion: jaegertracing.io/v1 kind: "Jaeger" metadata: name: "my-jaeger" spec: strategy: allInOne allInOne: options: log-level: debug query: base-path: /jaeger
3.2.5.8. Ingester 配置选项
Ingester 是一个从 Kafka 主题读取并写入 Elasticsearch 存储后端的服务。如果您使用 allInOne
或 production
部署策略,则不需要配置 Ingester 服务。
参数 | 描述 | 值 |
---|---|---|
spec: ingester: options: {} | 定义 Ingester 服务的配置选项。 | |
options: deadlockInterval: |
指定 Ingester 在终止前必须等待消息的时间间隔(以秒为单位)。默认情况下,死锁时间间隔被禁用(设置为 |
分钟和秒,例如 |
options: kafka: consumer: topic: |
|
consumer 的标签例如, |
options: kafka: consumer: brokers: | Ingester 用来使用消息的 Kafka 配置的标识。 |
代理的标签,如 |
options: log-level: | 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
3.2.6. 注入 sidecar
Red Hat OpenShift distributed tracing 平台依赖于应用程序 pod 中的代理 sidecar 来提供代理。Red Hat OpenShift distributed tracing Platform Operator 可以将 Agent sidecar 注入 Deployment 工作负载。您可以使用自动 sidecar 注入功能或手动管理它。
3.2.6.1. 自动注入 sidecar
Red Hat OpenShift distributed tracing Platform Operator 可以将 Jaeger Agent sidecar 注入 Deployment 工作负载。要启用 sidecar 自动注入,将 sidecar.jaegertracing.io/inject
注解设置为字符串 true
,或设置为由运行 $ oc get jaegers
返回的分布式追踪平台实例名称。当您指定 true
时,与部署相同的命名空间只能有一个分布式追踪平台实例。否则,Operator 无法决定要使用的分布式追踪平台实例。部署中的特定分布式追踪平台实例名称的优先级高于其命名空间中应用的 true
。
以下片段演示了一个简单的应用程序,它将注入一个 sidecar,代理指向同一命名空间中可用的单个分布式追踪平台实例:
自动 sidecar 注入示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
annotations:
"sidecar.jaegertracing.io/inject": "true" 1
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: acme/myapp:myversion
- 1
- 设置为字符串
true
或 Jaeger 实例名称。
当 sidecar 被注入后,可以在 localhost
上的默认位置访问代理。
3.2.6.2. 手动注入 sidecar
Red Hat OpenShift distributed tracing platform Operator 只能将 Jaeger Agent sidecar 注入部署工作负载。对于 Deployment
以外的控制器类型,如 StatefulSets`and `DaemonSets
,您可以在规格中手动定义 Jaeger 代理 sidecar。
以下片段显示了您可以在 Jaeger Agent sidecar 的 containers 部分中包含的手动定义:
StatefulSet
的 sidecar 定义示例
apiVersion: apps/v1 kind: StatefulSet metadata: name: example-statefulset namespace: example-ns labels: app: example-app spec: spec: containers: - name: example-app image: acme/myapp:myversion ports: - containerPort: 8080 protocol: TCP - name: jaeger-agent image: registry.redhat.io/distributed-tracing/jaeger-agent-rhel7:<version> # The agent version must match the Operator version imagePullPolicy: IfNotPresent ports: - containerPort: 5775 name: zk-compact-trft protocol: UDP - containerPort: 5778 name: config-rest protocol: TCP - containerPort: 6831 name: jg-compact-trft protocol: UDP - containerPort: 6832 name: jg-binary-trft protocol: UDP - containerPort: 14271 name: admin-http protocol: TCP args: - --reporter.grpc.host-port=dns:///jaeger-collector-headless.example-ns:14250 - --reporter.type=grpc
然后,代理可以在 localhost 上的默认位置访问。