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: {}
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
apiVersion: | 创建对象时要使用的 API 版本。 |
|
|
kind: | 定义要创建的 Kubernetes 对象的种类。 |
| |
metadata: |
唯一标识对象的数据,包括 |
OpenShift Container Platform 会自动生成 | |
name: | 对象的名称。 | TempoStack 实例的名称。 |
|
spec: | 要创建的对象的规格。 |
包含 TempoStack 实例的所有配置参数。当需要所有 Tempo 组件的通用定义时,会在 | N/A |
resources: | 分配给 TempoStack 的资源。 | ||
storageSize: | ingester PVC 的存储大小。 | ||
replicationFactor: | 复制因素的配置。 | ||
retention: | 保留 trace 的配置选项。 | ||
storage: |
定义存储的配置选项。所有与存储相关的选项都必须放在 | ||
template.distributor: |
Tempo | ||
template.ingester: |
Tempo | ||
template.compactor: |
Tempo | ||
template.querier: |
Tempo | ||
template.queryFrontend: |
Tempo | ||
template.gateway: |
Tempo |
最低要求配置
以下是使用默认设置创建分布式追踪平台(Tempo)部署所需的最小值:
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoStack
metadata:
name: simplest
spec:
storage: 1
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)配置对象存储。您可以从支持的多个存储供应商中选择。
参数 | 描述 | 值 | 默认值 |
---|---|---|---|
spec: storage: secret type: | 要在部署中使用的存储类型。 |
|
|
storage: secretname: | 包含设置对象类型凭证的 secret 名称。 | N/A | |
storage: tls: caName: |
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.3.1. 其他资源
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 1 config: | connectors: spanmetrics: 2 metrics_flush_interval: 15s receivers: otlp: 3 protocols: grpc: http: exporters: prometheus: 4 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] 5 metrics: receivers: [spanmetrics] 6 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 1 prometheusEndpoint: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091 2 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 1 authentication: 2 - tenantName: dev 3 tenantId: "1610b0c3-c509-4592-a256-a1871353dbfa" 4 - tenantName: prod tenantId: "1610b0c3-c509-4592-a256-a1871353dbfb" template: gateway: enabled: true 5 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: 1 - dev - prod resourceNames: - traces verbs: - 'get' 2 --- 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 3
允许 otel-collector
服务帐户编写 dev
租户的 trace 数据的写入 RBAC 配置示例
apiVersion: v1 kind: ServiceAccount metadata: name: otel-collector 1 namespace: otel --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tempostack-traces-write rules: - apiGroups: - 'tempo.grafana.com' resources: 2 - dev resourceNames: - traces verbs: - 'create' 3 --- 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 规则。