第 3 章 分布式追踪平台(Tempo)
3.1. 安装
安装分布式追踪平台 (Tempo) 需要 Tempo Operator,并选择最适合您的用例的部署类型:
- 对于微服务模式,在专用的 OpenShift 项目中部署 TempoStack 实例。
- 对于单体模式,在专用的 OpenShift 项目中部署 TempoMonolithic 实例。
使用对象存储需要在部署 TempoStack 或 TempoMonolithic 实例前设置受支持的对象存储并为对象存储凭据创建一个 secret。
3.1.1. 安装 Tempo Operator
您可以使用 Web 控制台或命令行安装 Tempo Operator。
3.1.1.1. 使用 Web 控制台安装 Tempo Operator
您可以通过 Web 控制台的 Administrator 视图安装 Tempo Operator。
先决条件
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform Web 控制台。 -
对于 Red Hat OpenShift Dedicated,您必须使用具有
dedicated-admin
角色的帐户登录。 您已完成由支持的供应商设置所需的对象存储:Red Hat OpenShift Data Foundation, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。
警告对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。
流程
-
进入 Operators
OperatorHub 并搜索 Tempo Operator
。 选择 由红帽提供的 Tempo Operator。
重要以下选择是此 Operator 的默认预设置:
-
Update channel
stable -
Installation mode
All namespaces on the cluster -
Installed Namespace
openshift-tempo-operator -
Update approval
Automatic
-
Update channel
- 选择 Enable Operator recommended cluster monitoring on this Namespace 复选框。
-
选择 Install
Install View Operator。
验证
- 在已安装 Operator 页面的 Details 选项卡中,在 ClusterServiceVersion details 下验证安装 Status 是否为 Succeeded。
3.1.1.2. 使用 CLI 安装 Tempo Operator
您可以从命令行安装 Tempo Operator。
先决条件
集群管理员具有
cluster-admin
角色的活跃 OpenShift CLI (oc
) 会话。提示-
确保您的 OpenShift CLI (
oc
) 版本为最新版本,并与您的 OpenShift Container Platform 版本匹配。 运行
oc login
:$ oc login --username=<your_username>
-
确保您的 OpenShift CLI (
您已完成由支持的供应商设置所需的对象存储:Red Hat OpenShift Data Foundation, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。
警告对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。
流程
运行以下命令,为 Tempo Operator 创建项目:
$ oc apply -f - << EOF apiVersion: project.openshift.io/v1 kind: Project metadata: labels: kubernetes.io/metadata.name: openshift-tempo-operator openshift.io/cluster-monitoring: "true" name: openshift-tempo-operator EOF
运行以下命令来创建 Operator 组:
$ oc apply -f - << EOF apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-tempo-operator namespace: openshift-tempo-operator spec: upgradeStrategy: Default EOF
运行以下命令来创建订阅:
$ oc apply -f - << EOF apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: tempo-product namespace: openshift-tempo-operator spec: channel: stable installPlanApproval: Automatic name: tempo-product source: redhat-operators sourceNamespace: openshift-marketplace EOF
验证
运行以下命令检查 Operator 状态:
$ oc get csv -n openshift-tempo-operator
3.1.2. 安装 TempoStack 实例
您可以使用 Web 控制台或命令行安装 TempoStack 实例。
3.1.2.1. 使用 Web 控制台安装 TempoStack 实例
您可以从 Web 控制台的 Administrator 视图安装 TempoStack 实例。
先决条件
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform Web 控制台。 -
对于 Red Hat OpenShift Dedicated,您必须使用具有
dedicated-admin
角色的帐户登录。 您已完成由支持的供应商设置所需的对象存储:Red Hat OpenShift Data Foundation, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。
警告对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。
流程
-
进入 Home
Projects Create Project,为在后续步骤中创建的 TempoStack 实例创建一个项目。 进入 Workloads
Secrets Create From YAML,在您为 TempoStack 实例创建的项目中为您的对象存储桶创建一个 secret。如需更多信息,请参阅"对象存储设置"。 Amazon S3 和 MinIO 存储的 secret 示例
apiVersion: v1 kind: Secret metadata: name: minio-test stringData: endpoint: http://minio.minio.svc:9000 bucket: tempo access_key_id: tempo access_key_secret: <secret> type: Opaque
创建 TempoStack 实例。
注意您可以在同一集群中的独立项目中创建多个 TempoStack 实例。
-
进入 Operators
Installed Operators。 -
选择 TempoStack
Create TempoStack YAML view。 在 YAML 视图中,自定义
TempoStack
自定义资源(CR):apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: sample namespace: <project_of_tempostack_instance> spec: storageSize: <value>Gi 1 storage: secret: 2 name: <secret_name> 3 type: <secret_provider> 4 tls: 5 enabled: true caName: <ca_certificate_configmap_name> 6 template: queryFrontend: jaegerQuery: enabled: true ingress: route: termination: edge type: route resources: 7 total: limits: memory: <value>Gi cpu: <value>m
AWS S3 和 MinIO 存储的
TempoStack
CR 示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: simplest namespace: <project_of_tempostack_instance> spec: storageSize: 1Gi storage: 1 secret: name: minio-test type: s3 resources: total: limits: memory: 2Gi cpu: 2000m template: queryFrontend: jaegerQuery: 2 enabled: true ingress: route: termination: edge type: route
- 选择 Create。
-
进入 Operators
验证
- 使用 Project: 下拉列表选择 TempoStack 实例的项目。
-
进入 Operators
Installed Operators,以验证 TempoStack 实例的 Status 是否为 Condition: Ready。 -
进入 Workloads
Pods,以验证 TempoStack 实例的所有组件 pod 都在运行。 访问 Tempo 控制台:
-
进入 Networking
Routes 和 Ctrl+F,以搜索 tempo
。 在 Location 列中,打开 URL 以访问 Tempo 控制台。
注意Tempo 控制台最初不会在 Tempo 控制台安装后显示 trace 数据。
-
进入 Networking
3.1.2.2. 使用 CLI 安装 TempoStack 实例
您可以从命令行安装 TempoStack 实例。
先决条件
集群管理员具有
cluster-admin
角色的活跃 OpenShift CLI (oc
) 会话。提示-
确保您的 OpenShift CLI (
oc
) 版本为最新版本,并与您的 OpenShift Container Platform 版本匹配。 运行
oc login
命令:$ oc login --username=<your_username>
-
确保您的 OpenShift CLI (
您已完成由支持的供应商设置所需的对象存储:Red Hat OpenShift Data Foundation, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。
警告对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。
流程
运行以下命令,为您将在后续步骤中创建的 TempoStack 实例创建您选择的项目:
$ oc apply -f - << EOF apiVersion: project.openshift.io/v1 kind: Project metadata: name: <project_of_tempostack_instance> EOF
在您为 TempoStack 实例创建的项目中,运行以下命令来为您的对象存储桶创建一个 secret:
$ oc apply -f - << EOF <object_storage_secret> EOF
如需更多信息,请参阅"对象存储设置"。
Amazon S3 和 MinIO 存储的 secret 示例
apiVersion: v1 kind: Secret metadata: name: minio-test stringData: endpoint: http://minio.minio.svc:9000 bucket: tempo access_key_id: tempo access_key_secret: <secret> type: Opaque
在为您创建的项目中创建一个 TempoStack 实例:
注意您可以在同一集群中的独立项目中创建多个 TempoStack 实例。
自定义
TempoStack
自定义资源(CR):apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: sample namespace: <project_of_tempostack_instance> spec: storageSize: <value>Gi 1 storage: secret: 2 name: <secret_name> 3 type: <secret_provider> 4 tls: 5 enabled: true caName: <ca_certificate_configmap_name> 6 template: queryFrontend: jaegerQuery: enabled: true ingress: route: termination: edge type: route resources: 7 total: limits: memory: <value>Gi cpu: <value>m
AWS S3 和 MinIO 存储的
TempoStack
CR 示例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: simplest namespace: <project_of_tempostack_instance> spec: storageSize: 1Gi storage: 1 secret: name: minio-test type: s3 resources: total: limits: memory: 2Gi cpu: 2000m template: queryFrontend: jaegerQuery: 2 enabled: true ingress: route: termination: edge type: route
运行以下命令来应用自定义 CR:
$ oc apply -f - << EOF <tempostack_cr> EOF
验证
运行以下命令,验证所有 TempoStack
组件
的状态
是否为Running
,并且条件
为type: Ready
:$ oc get tempostacks.tempo.grafana.com simplest -o yaml
运行以下命令,验证所有 TempoStack 组件 pod 是否正在运行:
$ oc get pods
访问 Tempo 控制台:
运行以下命令来查询路由详情:
$ oc get route
在网页浏览器中打开
https://<route_from_previous_step>
。注意Tempo 控制台最初不会在 Tempo 控制台安装后显示 trace 数据。
3.1.3. 安装 TempoMonolithic 实例
TempoMonolithic 实例只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
您可以使用 Web 控制台或命令行安装 TempoMonolithic 实例。
TempoMonolithic
自定义资源(CR) 以单体模式创建 Tempo 部署。Tempo 部署的所有组件(如紧凑器、经销商、ingester、querier 和查询前端)都包含在一个容器中。
TempoMonolithic 实例支持将 trace 存储在内存中存储、持久性卷或对象存储。
在单体模式下部署临时是小型部署、演示、测试和作为 Red Hat OpenShift distributed tracing 平台 (Jaeger) 全体部署的迁移路径的首选。
Tempo 的单体部署无法水平扩展。如果您需要水平扩展,请在微服务模式中将 TempoStack
CR 用于 Tempo 部署。
3.1.3.1. 使用 Web 控制台安装 TempoMonolithic 实例
TempoMonolithic 实例只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
您可以从 web 控制台的 Administrator 视图安装 TempoMonolithic 实例。
先决条件
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform Web 控制台。 -
对于 Red Hat OpenShift Dedicated,您必须使用具有
dedicated-admin
角色的帐户登录。
流程
-
进入 Home
Projects Create Project,为在后续步骤中创建的 TempoMonolithic 实例创建一个项目。 决定用于存储 trace 的存储类型:内存中存储、持久性卷或对象存储。
重要对象存储不包括在分布式追踪平台(Tempo)中,需要由受支持的供应商设置对象存储: Red Hat OpenShift Data Foundation、MinIO、Amazon S3、Azure Blob Storage 或 Google Cloud Storage。
另外,选择对象存储需要在您为 TempoMonolithic 实例创建的项目中为您的对象存储桶创建一个 secret。您可以在 Workloads
Secrets Create From YAML 中执行此操作。 如需更多信息,请参阅"对象存储设置"。
Amazon S3 和 MinIO 存储的 secret 示例
apiVersion: v1 kind: Secret metadata: name: minio-test stringData: endpoint: http://minio.minio.svc:9000 bucket: tempo access_key_id: tempo access_key_secret: <secret> type: Opaque
创建 TempoMonolithic 实例:
注意您可以在同一集群的单独项目中创建多个 TempoMonolithic 实例。
-
进入 Operators
Installed Operators。 -
选择 TempoMonolithic
Create TempoMonolithic YAML view。 在 YAML 视图中,自定义
TempoMonolithic
自定义资源 (CR)。以下
TempoMonolithic
CR 创建一个 TempoMonolithic 部署,它通过 OTLP/gRPC 和 OTLP/HTTP 将 trace 存储在支持的存储中,并通过路由公开 Jaeger UI:apiVersion: tempo.grafana.com/v1alpha1 kind: TempoMonolithic metadata: name: <metadata_name> namespace: <project_of_tempomonolithic_instance> spec: storage: traces: backend: <supported_storage_type> 1 size: <value>Gi 2 s3: 3 secret: <secret_name> 4 tls: 5 enabled: true caName: <ca_certificate_configmap_name> 6 jaegerui: enabled: true 7 route: enabled: true 8 resources: 9 total: limits: memory: <value>Gi cpu: <value>m
- 1
- 用于存储 trace 的存储类型:内存存储、持久性卷或对象存储。持久性卷的值是
pv
。对象存储接受的值是s3
、gcs
或azure
,具体取决于使用的对象存储类型。tmpfs
内存中存储的默认值为memory
,它仅适用于开发、测试、演示和概念验证环境,因为在 pod 关闭时数据不会被保留。 - 2
- 内存大小:对于内存存储,这意味着
tmpfs
卷的大小,默认值为2Gi
。对于持久性卷,这意味着持久性卷声明的大小,默认值为10Gi
。对于对象存储,这意味着 Tempo WAL 的持久性卷声明的大小,默认值为10Gi
。 - 3
- 可选: 对于对象存储,对象存储的类型。接受的值包括
s3
、gcs
和azure
,具体取决于使用的对象存储类型。 - 4
- 可选: 对于对象存储,存储 secret 的
metadata
中的name
值。存储 secret 必须与 TempoMonolithic 实例位于同一个命名空间中,并包含 "Table 1 中指定的字段。"Object storage setup" 部分中所需的 secret 参数"。 - 5
- 可选。
- 6
- 可选:包含 CA 证书的
ConfigMap
对象的名称。 - 7
- 启用 Jaeger UI。
- 8
- 启用为 Jaeger UI 创建路由。
- 9
- 可选。
- 选择 Create。
-
进入 Operators
验证
- 使用 Project: 下拉列表,选择 TempoMonolithic 实例的项目。
-
进入 Operators
Installed Operators,以验证 TempoMonolithic 实例的 Status 是否为 Condition: Ready。 -
进入 Workloads
Pods,以验证 TempoMonolithic 实例的 pod 是否正在运行。 访问 Jaeger UI:
进入 Networking
Routes 和 Ctrl+F,以搜索 jaegerui
。注意Jaeger UI 使用
tempo-<metadata_name_of_TempoMonolithic_CR>-jaegerui
路由。- 在 Location 列中,打开 URL 以访问 Jaeger UI。
当 TempoMonolithic 实例的 pod 就绪时,您可以将 trace 发送到集群中的
tempo-<metadata_name_of_TempoMonolithic_CR>:4317
(OTLP/gRPC) 和tempo-<metadata_name_of_TempoMonolithic_CR>:4318
(OTLP/HTTP) 端点。Tempo API 位于集群中的
tempo-<metadata_name_of_TempoMonolithic_CR>:3200
端点。
3.1.3.2. 使用 CLI 安装 TempoMonolithic 实例
TempoMonolithic 实例只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
您可以从命令行安装 TempoMonolithic 实例。
先决条件
集群管理员具有
cluster-admin
角色的活跃 OpenShift CLI (oc
) 会话。提示-
确保您的 OpenShift CLI (
oc
) 版本为最新版本,并与您的 OpenShift Container Platform 版本匹配。 运行
oc login
命令:$ oc login --username=<your_username>
-
确保您的 OpenShift CLI (
流程
运行以下命令,为您将在后续步骤中创建的 TempoMonolithic 实例创建您选择的项目:
$ oc apply -f - << EOF apiVersion: project.openshift.io/v1 kind: Project metadata: name: <project_of_tempomonolithic_instance> EOF
决定用于存储 trace 的存储类型:内存中存储、持久性卷或对象存储。
重要对象存储不包括在分布式追踪平台(Tempo)中,需要由受支持的供应商设置对象存储: Red Hat OpenShift Data Foundation、MinIO、Amazon S3、Azure Blob Storage 或 Google Cloud Storage。
另外,选择对象存储需要在您为 TempoMonolithic 实例创建的项目中为您的对象存储桶创建一个 secret。您可以运行以下命令来完成此操作:
$ oc apply -f - << EOF <object_storage_secret> EOF
如需更多信息,请参阅"对象存储设置"。
Amazon S3 和 MinIO 存储的 secret 示例
apiVersion: v1 kind: Secret metadata: name: minio-test stringData: endpoint: http://minio.minio.svc:9000 bucket: tempo access_key_id: tempo access_key_secret: <secret> type: Opaque
在您为其创建的项目中创建一个 TempoMonolithic 实例。
提示您可以在同一集群的单独项目中创建多个 TempoMonolithic 实例。
自定义
TempoMonolithic
自定义资源 (CR)。以下
TempoMonolithic
CR 创建一个 TempoMonolithic 部署,它通过 OTLP/gRPC 和 OTLP/HTTP 将 trace 存储在支持的存储中,并通过路由公开 Jaeger UI:apiVersion: tempo.grafana.com/v1alpha1 kind: TempoMonolithic metadata: name: <metadata_name> namespace: <project_of_tempomonolithic_instance> spec: storage: traces: backend: <supported_storage_type> 1 size: <value>Gi 2 s3: 3 secret: <secret_name> 4 tls: 5 enabled: true caName: <ca_certificate_configmap_name> 6 jaegerui: enabled: true 7 route: enabled: true 8 resources: 9 total: limits: memory: <value>Gi cpu: <value>m
- 1
- 用于存储 trace 的存储类型:内存存储、持久性卷或对象存储。持久性卷的值是
pv
。对象存储接受的值是s3
、gcs
或azure
,具体取决于使用的对象存储类型。tmpfs
内存中存储的默认值为memory
,它仅适用于开发、测试、演示和概念验证环境,因为在 pod 关闭时数据不会被保留。 - 2
- 内存大小:对于内存存储,这意味着
tmpfs
卷的大小,默认值为2Gi
。对于持久性卷,这意味着持久性卷声明的大小,默认值为10Gi
。对于对象存储,这意味着 Tempo WAL 的持久性卷声明的大小,默认值为10Gi
。 - 3
- 可选: 对于对象存储,对象存储的类型。接受的值包括
s3
、gcs
和azure
,具体取决于使用的对象存储类型。 - 4
- 可选: 对于对象存储,存储 secret 的
metadata
中的name
值。存储 secret 必须与 TempoMonolithic 实例位于同一个命名空间中,并包含 "Table 1 中指定的字段。"Object storage setup" 部分中所需的 secret 参数"。 - 5
- 可选。
- 6
- 可选:包含 CA 证书的
ConfigMap
对象的名称。 - 7
- 启用 Jaeger UI。
- 8
- 启用为 Jaeger UI 创建路由。
- 9
- 可选。
运行以下命令来应用自定义 CR:
$ oc apply -f - << EOF <tempomonolithic_cr> EOF
验证
运行以下命令,验证所有 TempoMonolithic
components
的状态
是否为Running
,且conditions
是type: Ready
$ oc get tempomonolithic.tempo.grafana.com <metadata_name_of_tempomonolithic_cr> -o yaml
运行以下命令,以验证 TempoMonolithic 实例的 pod 是否正在运行:
$ oc get pods
访问 Jaeger UI:
运行以下命令,查询
tempo-<metadata_name_of_tempomonolithic_cr>-jaegerui
路由的路由详情:$ oc get route
-
在网页浏览器中打开
https://<route_from_previous_step>
。
当 TempoMonolithic 实例的 pod 就绪时,您可以将 trace 发送到集群中的
tempo-<metadata_name_of_tempomonolithic_cr>:4317
(OTLP/gRPC) 和tempo-<metadata_name_of_tempomonolithic_cr>:4318
(OTLP/HTTP) 端点。Tempo API 位于集群中的
tempo-<metadata_name_of_tempomonolithic_cr>:3200
端点。
3.1.4. 对象存储设置
在设置受支持的对象存储时,您可以使用以下配置参数。
存储供应商 |
---|
Secret 参数 |
|
MinIO |
请参阅 MinIO Operator。
|
Amazon S3 |
|
带有安全令牌服务(STS)的 Amazon S3 |
|
Microsoft Azure Blob Storage |
|
Google Cloud Storage on Google Cloud Platform (GCP) |
|
3.1.4.1. 使用安全令牌服务设置 Amazon S3 存储
您可以通过 AWS 命令行界面 (AWS CLI) 使用带有安全令牌服务(STS)设置的 Amazon S3 存储。
使用安全令牌服务的 Amazon S3 存储只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已安装 AWS CLI 的最新版本。
流程
- 创建 AWS S3 存储桶。
为 AWS IAM 策略创建以下
trust.json
文件,该文件将在下一步中使用 TempoStack 实例的服务帐户为 AWS IAM 角色设置信任关系:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${<aws_account_id>}:oidc-provider/${<oidc_provider>}" 1 }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": [ "system:serviceaccount:${<openshift_project_for_tempostack>}:tempo-${<tempostack_cr_name>}" 2 "system:serviceaccount:${<openshift_project_for_tempostack>}:tempo-${<tempostack_cr_name>}-query-frontend" ] } } } ] }
通过附加您创建的
trust.json
策略文件来创建 AWS IAM 角色:$ aws iam create-role \ --role-name "tempo-s3-access" \ --assume-role-policy-document "file:///tmp/trust.json" \ --query Role.Arn \ --output text
将 AWS IAM 策略附加到创建的角色中:
$ aws iam attach-role-policy \ --role-name "tempo-s3-access" \ --policy-arn "arn:aws:iam::aws:policy/AmazonS3FullAccess"
在 OpenShift Container Platform 中,使用键创建一个对象存储 secret,如下所示:
apiVersion: v1 kind: Secret metadata: name: minio-test stringData: bucket: <s3_bucket_name> region: <s3_region> role_arn: <s3_role_arn> type: Opaque