4.2. 配置和部署分布式追踪平台(Tempo)
Tempo Operator 使用自定义资源定义(CRD)文件来定义创建和部署分布式追踪平台(Tempo)资源时要使用的架构和配置设置。您可以安装默认配置或修改该文件。
4.2.1. 自定义部署 复制链接链接已复制到粘贴板!
有关配置后端存储的详情,请参考 了解持久性存储 以及您选择的存储选项的适当配置主题。
4.2.1.1. 分布式追踪默认配置选项 复制链接链接已复制到粘贴板!
Tempo 自定义资源(CR)定义创建分布式追踪平台(Tempo)资源时要使用的架构和设置。您可以修改这些参数以根据您的业务需求自定义分布式追踪平台(Tempo)实现。
通用 Tempo YAML 文件示例
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoStack
metadata:
name: name
spec:
storage: {}
resources: {}
storageSize: 200M
replicationFactor: 1
retention: {}
template:
distributor:{}
ingester: {}
compactor: {}
querier: {}
queryFrontend: {}
gateway: {}
| 参数 | 描述 | 值 | 默认值 |
|---|---|---|---|
| 创建对象时要使用的 API 版本。 |
|
|
| 定义要创建的 Kubernetes 对象的种类。 |
| |
|
唯一标识对象的数据,包括 |
OpenShift Container Platform 会自动生成 | |
| 对象的名称。 | TempoStack 实例的名称。 |
|
| 要创建的对象的规格。 |
包含 TempoStack 实例的所有配置参数。当需要所有 Tempo 组件的通用定义时,会在 | N/A |
| 分配给 TempoStack 的资源。 | ||
| ingester PVC 的存储大小。 | ||
| 复制因素的配置。 | ||
| 保留 trace 的配置选项。 | ||
|
定义存储的配置选项。所有与存储相关的选项都必须放在 | ||
|
Tempo | ||
|
Tempo | ||
|
Tempo | ||
|
Tempo | ||
|
Tempo | ||
|
Tempo |
最低要求配置
以下是使用默认设置创建分布式追踪平台(Tempo)部署所需的最小值:
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoStack
metadata:
name: simplest
spec:
storage:
secret:
name: minio
type: s3
resources:
total:
limits:
memory: 2Gi
cpu: 2000m
template:
queryFrontend:
jaegerQuery:
enabled: true
ingress:
type: route
- 1
- 本节指定部署的对象存储后端,它需要一个含有凭据的 secret 才能访问对象存储。
4.2.1.2. 分布式追踪平台(Tempo)存储配置 复制链接链接已复制到粘贴板!
您可以在 spec.storage 下的 TempoStack 自定义资源中为分布式追踪平台(Tempo)配置对象存储。您可以从支持的多个存储供应商中选择。
| 参数 | 描述 | 值 | 默认值 |
|---|---|---|---|
| 要在部署中使用的存储类型。 |
|
|
| 包含设置对象类型凭证的 secret 名称。 | N/A | |
|
CA 是包含 CA 证书的 |
| 存储供应商 |
|---|
| Secret 参数 |
|
|
| MinIO |
| 请参阅 MinIO Operator。
|
| Amazon S3 |
|
|
| Microsoft Azure Blob Storage |
|
|
| Google Cloud Storage on Google Cloud Platform (GCP) |
|
|
4.2.1.3. 查询配置选项 复制链接链接已复制到粘贴板!
分布式追踪平台 (Tempo) 的两个组件,即 querier 和 query frontend,用于管理查询。您可以配置这两个组件。
querier 组件在 ingesters 或后端存储中查找请求的 trace ID。根据设置的参数,querier 组件可以查询 ingesters,并从后端拉取 bloom 或索引,以便在对象存储中搜索块。querier 组件在 GET /querier/api/traces/<traceID> 公开 HTTP 端点,但不预期直接使用它。查询必须发送到查询前端。
| 参数 | 描述 | 值 |
|---|---|---|
|
| node-selection 约束的简单形式。 | 类型:对象 |
|
| 为组件创建的副本数。 | 类型:整数;格式: int32 |
|
| 特定于组件的 pod 容限。 | 类型:数组 |
查询前端组件负责为传入的查询对搜索空间进行分片。查询前端通过简单的 HTTP 端点公开 trace:GET /api/traces/<traceID>。在内部,查询 frontend 组件将 blockID 空间分成可配置的分片数量,然后对这些请求进行队列。querier 组件通过流 gRPC 连接连接到查询 frontend 组件,以处理这些分片查询。
| 参数 | 描述 | 值 |
|---|---|---|
|
| 配置查询前端组件。 | 类型:对象 |
|
| 节点选择约束的简单形式。 | 类型:对象 |
|
| 为查询前端组件创建的副本数。 | 类型:整数;格式: int32 |
|
| 特定于查询前端组件的 Pod 容限。 | 类型:数组 |
|
| 特定于 Jaeger Query 组件的选项。 | 类型:对象 |
|
|
| 类型:布尔值 |
|
| Jaeger Query ingress 的选项。 | 类型:对象 |
|
| ingress 对象的注解。 | 类型:对象 |
|
| ingress 对象的主机名。 | 类型:字符串 |
|
| IngressClass 集群资源的名称。定义哪个入口控制器提供此入口资源。 | 类型:字符串 |
|
| OpenShift 路由的选项。 | 类型:对象 |
|
|
终止类型。默认为 | 类型:字符串 (enum: insecure, edge, passthrough, reencrypt) |
|
|
Jaeger Query UI 的 ingress 类型。支持的类型有 | 类型:字符串 (enum: ingress, route) |
|
| monitor 选项卡配置。 | 类型:对象 |
|
|
在 Jaeger 控制台中启用 monitor 选项卡。必须配置 | 类型:布尔值 |
|
|
包含 span rate、error 和 duration (RED) 指标的 Prometheus 实例的端点。例如: | 类型:字符串 |
TempoStack CR 中的查询前端组件的配置示例
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoStack
metadata:
name: simplest
spec:
storage:
secret:
name: minio
type: s3
storageSize: 200M
resources:
total:
limits:
memory: 2Gi
cpu: 2000m
template:
queryFrontend:
jaegerQuery:
enabled: true
ingress:
route:
termination: edge
type: route
4.2.1.4. 在 Jaeger UI 中配置 monitor 选项卡 复制链接链接已复制到粘贴板!
跟踪数据包含丰富的信息,数据在检测的语言和框架中规范化。因此,请求率、错误和持续时间(RED)指标可以从 trace 中提取。指标可以在 Jaeger 控制台的 Monitor 选项卡中视觉化。
指标派生自 OpenTelemetry Collector 中的 span,由 user-workload 监控堆栈中部署的 Prometheus 从 Collector 中提取。Jaeger UI 从 Prometheus 端点查询这些指标,并视觉化它们。
4.2.1.4.1. OpenTelemetry Collector 配置 复制链接链接已复制到粘贴板!
OpenTelemetry Collector 需要配置 spanmetrics 连接器,该连接器从 trace 中派生指标,并以 Prometheus 格式导出指标。
OpenTelemetry Collector 自定义资源,用于 span RED
kind: OpenTelemetryCollector
apiVersion: opentelemetry.io/v1alpha1
metadata:
name: otel
spec:
mode: deployment
observability:
metrics:
enableMetrics: true
config: |
connectors:
spanmetrics:
metrics_flush_interval: 15s
receivers:
otlp:
protocols:
grpc:
http:
exporters:
prometheus:
endpoint: 0.0.0.0:8889
add_metric_suffixes: false
resource_to_telemetry_conversion:
enabled: true # by default resource attributes are dropped
otlp:
endpoint: "tempo-simplest-distributor:4317"
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp, spanmetrics]
metrics:
receivers: [spanmetrics]
exporters: [prometheus]
4.2.1.4.2. Tempo 配置 复制链接链接已复制到粘贴板!
TempoStack 自定义资源必须指定以下内容: Monitor 选项卡已启用,Prometheus 端点则设置为 Thanos querier 服务,以从用户定义的监控堆栈查询数据。
带有启用的 Monitor 选项卡的 TempoStack 自定义资源
kind: TempoStack
apiVersion: tempo.grafana.com/v1alpha1
metadata:
name: simplest
spec:
template:
queryFrontend:
jaegerQuery:
enabled: true
monitorTab:
enabled: true
prometheusEndpoint: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091
ingress:
type: route
4.2.1.5. 多租户 复制链接链接已复制到粘贴板!
Tempo Gateway 服务中提供了带有身份验证和授权的多租户。身份验证使用 OpenShift OAuth 和 Kubernetes TokenReview API。授权使用 Kubernetes SubjectAccessReview API。
带有两个租户的 Tempo CR 示例,dev 和 prod
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoStack
metadata:
name: simplest
spec:
tenants:
mode: openshift
authentication:
- tenantName: dev
tenantId: "1610b0c3-c509-4592-a256-a1871353dbfa"
- tenantName: prod
tenantId: "1610b0c3-c509-4592-a256-a1871353dbfb"
template:
gateway:
enabled: true
queryFrontend:
jaegerQuery:
enabled: true
授权配置使用 Kubernetes 基于角色的访问控制(RBAC)的 ClusterRole 和 ClusterRoleBinding。默认情况下,任何用户都没有读取或写入权限。
允许经过身份验证的用户读取 dev 和 prod 租户的 trace 数据的读取 RBAC 配置示例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: tempostack-traces-reader
rules:
- apiGroups:
- 'tempo.grafana.com'
resources:
- dev
- prod
resourceNames:
- traces
verbs:
- 'get'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tempostack-traces-reader
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tempostack-traces-reader
subjects:
- kind: Group
apiGroup: rbac.authorization.k8s.io
name: system:authenticated
允许 otel-collector 服务帐户编写 dev 租户的 trace 数据的写入 RBAC 配置示例
apiVersion: v1
kind: ServiceAccount
metadata:
name: otel-collector
namespace: otel
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: tempostack-traces-write
rules:
- apiGroups:
- 'tempo.grafana.com'
resources:
- dev
resourceNames:
- traces
verbs:
- 'create'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tempostack-traces
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tempostack-traces-write
subjects:
- kind: ServiceAccount
name: otel-collector
namespace: otel
追踪数据可以从 OpenTelemetry 收集器发送到 Tempo 实例,该收集器使用带有 RBAC 的服务帐户来写入数据。
OpenTelemetry CR 配置示例
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: cluster-collector
namespace: tracing-system
spec:
mode: deployment
serviceAccount: otel-collector
config: |
extensions:
bearertokenauth:
filename: "/var/run/secrets/kubernetes.io/serviceaccount/token"
exporters:
otlp/dev:
endpoint: tempo-simplest-gateway.tempo.svc.cluster.local:8090
tls:
insecure: false
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt"
auth:
authenticator: bearertokenauth
headers:
X-Scope-OrgID: "dev"
service:
extensions: [bearertokenauth]
pipelines:
traces:
exporters: [otlp/dev]
4.2.2. 为分布式追踪平台设置监控(Tempo) 复制链接链接已复制到粘贴板!
Tempo Operator 支持每个 TempoStack 组件的监控和警报,如经销商、ingester 等,并公开有关 Operator 本身的升级和操作指标。
4.2.2.1. 配置 TempoStack 指标和警报 复制链接链接已复制到粘贴板!
您可以启用 TempoStack 实例的指标和警报。
先决条件
- 在集群中启用对用户定义的项目的监控。请参阅为用户定义的项目启用监控。
流程
要启用 TempoStack 实例的指标,请将
spec.observability.metrics.createServiceMonitors字段设置为true:apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> spec: observability: metrics: createServiceMonitors: true要为 TempoStack 实例启用警报,请将
spec.observability.metrics.createPrometheusRules字段设置为true:apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: <name> spec: observability: metrics: createPrometheusRules: true
验证
您可以使用 Web 控制台的 Administrator 视图来验证配置是否成功:
-
进入 Observe
Targets,过滤 Source: User, 检查 ServiceMonitors(格式为 tempo-<instance_name>-<component>)的状态为 Up。 -
要验证警报是否已正确设置,请转至 Observe
Alerting Alerting rules,过滤 Source: User,并检查 TempoStack 实例组件的 Alert 规则 是否可用。
4.2.2.2. 配置 Tempo Operator 指标和警报 复制链接链接已复制到粘贴板!
从 web 控制台安装 Tempo Operator 时,您可以选择 Enable Operator recommended cluster monitoring on this Namespace 复选框,它允许创建 Tempo Operator 的指标和警报。
如果在安装过程中没有选择复选框,您可以在安装 Tempo Operator 后手动启用指标和警报。
流程
-
在安装了 Tempo Operator 的项目中添加
openshift.io/cluster-monitoring: "true"标签,默认为openshift-tempo-operator。
验证
您可以使用 Web 控制台的 Administrator 视图来验证配置是否成功:
-
进入 Observe
Targets,过滤 Source: Platform,并搜索 tempo-operator,它必须具有 Up 状态。 -
要验证警报是否已正确设置,请转至 Observe
Alerting Alerting rules,过滤 Source: Platform,再找到 Tempo Operator 的 Alert 规则。