第 4 章 分布式追踪平台(Tempo)

4.1. 安装分布式追踪平台(Tempo)

重要

Tempo Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

安装分布式追踪平台(Tempo)涉及以下步骤:

  1. 设置支持的对象存储。
  2. 安装 Tempo Operator。
  3. 为对象存储凭据创建 secret。
  4. 为 TempoStack 实例创建命名空间。
  5. 创建 TempoStack 自定义资源,以至少部署一个 TempoStack 实例。

4.1.1. 从 web 控制台安装分布式追踪平台(Tempo)

您可以从 web 控制台的 Administrator 视图安装分布式追踪平台(Tempo)。

先决条件

流程

  1. 安装 Tempo Operator:

    1. 进入 OperatorsOperatorHub 并搜索 Tempo Operator
    2. 选择 Tempo OperatorOpenShift Operator for TempoInstallInstallView Operator.

      重要

      这会使用默认预设置来安装 Operator:

      • Update channelstable
      • Installation modeAll namespaces on the cluster
      • Installed Namespaceopenshift-tempo-operator
      • Update approvalAutomatic
    3. 在已安装 Operator 页面的 Details 选项卡中,在 ClusterServiceVersion details 下验证安装 Status 是否为 Succeeded
  2. 为您要在后续步骤中创建的 TempoStack 实例创建一个项目: 进入 HomeProjectsCreate Project
  3. 在您为 TempoStack 实例创建的项目中,为您的对象存储桶创建一个 secret:进入 WorkloadsSecretsCreateFrom YAML

    表 4.1. 所需的 secret 参数

    存储供应商

    Secret 参数

    Red Hat OpenShift Data Foundation

    name: tempostack-dev-odf # example

    bucket: <bucket_name> # requires an ObjectBucketClaim

    endpoint: https://s3.openshift-storage.svc

    access_key_id: <data_foundation_access_key_id>

    access_key_secret: <data_foundation_access_key_secret>

    MinIO

    请参阅 MinIO Operator

    name: tempostack-dev-minio # example

    bucket: <minio_bucket_name> # MinIO documentation

    endpoint: <minio_bucket_endpoint>

    access_key_id: <minio_access_key_id>

    access_key_secret: <minio_access_key_secret>

    Amazon S3

    name: tempostack-dev-s3 # example

    bucket: <s3_bucket_name> # Amazon S3 documentation

    endpoint: <s3_bucket_endpoint>

    access_key_id: <s3_access_key_id>

    access_key_secret: <s3_access_key_secret>

    Microsoft Azure Blob Storage

    name: tempostack-dev-azure # example

    container: <azure_blob_storage_container_name> # Microsoft Azure documentation

    account_name: <azure_blob_storage_account_name>

    account_key: <azure_blob_storage_account_key>

    Google Cloud Storage on Google Cloud Platform (GCP)

    name: tempostack-dev-gcs # example

    bucketname: <google_cloud_storage_bucket_name> # requires a bucket created in a GCP project

    key.json: <path/to/key.json> # requires a service account in the bucket’s GCP project for GCP authentication

    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

  4. 创建 TempoStack 实例。

    注意

    您可以在同一集群中的独立项目中创建多个 TempoStack 实例。

    1. 进入 OperatorsInstalled Operators
    2. 选择 TempoStackCreate TempoStackYAML view
    3. YAML 视图中,自定义 TempoStack 自定义资源(CR):

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: sample
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
          secret:
            name: <secret-name> 1
            type: <secret-provider> 2
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route
      1
      secret metadataname 的值。
      2
      可接受的值是 azure(Azure Blob Storage),gcs(Google Cloud Storage)和 s3(Amazon S3, MinIO, 或 Red Hat OpenShift Data Foundation)。

      AWS S3 和 MinIO 存储的 TempoStack CR 示例

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: simplest
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
          secret:
            name: minio-test
            type: s3
        resources:
          total:
            limits:
              memory: 2Gi
              cpu: 2000m
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route

      本例中部署的堆栈被配置为接收通过 HTTP 和 OpenTelemetry 协议(OTLP)的 Jaeger Thrift,它允许使用 Jaeger UI 可视化数据。

    4. 选择 Create

验证

  1. 使用 Project: 下拉列表选择 TempoStack 实例的项目。
  2. 进入 OperatorsInstalled Operators,以验证 TempoStack 实例的 Status 是否为 Condition: Ready
  3. 进入 WorkloadsPods,以验证 TempoStack 实例的所有组件 pod 都在运行。
  4. 访问 Tempo 控制台:

    1. 进入 NetworkingRoutesCtrl+F,以搜索 tempo
    2. Location 列中,打开 URL 以访问 Tempo 控制台。
    3. 选择 Log In With OpenShift,将集群管理员凭证用于 Web 控制台。

      注意

      Tempo 控制台最初不会在 Tempo 控制台安装后显示 trace 数据。

4.1.2. 使用 CLI 安装分布式追踪平台(Tempo)

您可以从命令行安装分布式追踪平台(Tempo)。

先决条件

流程

  1. 安装 Tempo Operator:

    1. 运行以下命令,为 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
    2. 运行以下命令来创建 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
    3. 运行以下命令来创建订阅:

      $ 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
    4. 运行以下命令检查 Operator 状态:

      $ oc get csv -n openshift-tempo-operator
  2. 为您要在后续步骤中创建的 TempoStack 实例创建一个您选择的项目:

    • 从没有元数据的标准输入创建项目:

      $ oc new-project <project_of_tempostack_instance>
    • 使用元数据从标准输入创建项目:

      $ oc apply -f - << EOF
      apiVersion: project.openshift.io/v1
      kind: Project
      metadata:
        name: <project_of_tempostack_instance>
      EOF
  3. 在您为 TempoStack 实例创建的项目中,通过运行以下命令之一为您的对象存储桶创建一个 secret:

    • 从 YAML 文件创建 secret:

      $ oc apply -f <secret_file>.yaml
    • 从标准输入创建 secret:

      $ oc apply -f - << EOF
      <object_storage_secret>
      EOF

      表 4.2. 所需的 secret 参数

      存储供应商

      Secret 参数

      Red Hat OpenShift Data Foundation

      name: tempostack-dev-odf # example

      bucket: <bucket_name> # requires an ObjectBucketClaim

      endpoint: https://s3.openshift-storage.svc

      access_key_id: <data_foundation_access_key_id>

      access_key_secret: <data_foundation_access_key_secret>

      MinIO

      请参阅 MinIO Operator

      name: tempostack-dev-minio # example

      bucket: <minio_bucket_name> # MinIO documentation

      endpoint: <minio_bucket_endpoint>

      access_key_id: <minio_access_key_id>

      access_key_secret: <minio_access_key_secret>

      Amazon S3

      name: tempostack-dev-s3 # example

      bucket: <s3_bucket_name> # Amazon S3 documentation

      endpoint: <s3_bucket_endpoint>

      access_key_id: <s3_access_key_id>

      access_key_secret: <s3_access_key_secret>

      Microsoft Azure Blob Storage

      name: tempostack-dev-azure # example

      container: <azure_blob_storage_container_name> # Microsoft Azure documentation

      account_name: <azure_blob_storage_account_name>

      account_key: <azure_blob_storage_account_key>

      Google Cloud Storage on Google Cloud Platform (GCP)

      name: tempostack-dev-gcs # example

      bucketname: <google_cloud_storage_bucket_name> # requires a bucket created in a GCP project

      key.json: <path/to/key.json> # requires a service account in the bucket’s GCP project for GCP authentication

      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

  4. 在您为 TempoStack 实例创建的项目中创建一个 TempoStack 实例。

    注意

    您可以在同一集群中的独立项目中创建多个 TempoStack 实例。

    1. 自定义 TempoStack 自定义资源(CR):

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: sample
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
            secret:
                name: <secret-name> 1
                type: <secret-provider> 2
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route
      1
      secret metadataname 的值。
      2
      可接受的值是 azure(Azure Blob Storage),gcs(Google Cloud Storage)和 s3(Amazon S3, MinIO, 或 Red Hat OpenShift Data Foundation)。

      AWS S3 和 MinIO 存储的 TempoStack CR

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: simplest
        namespace: project_of_tempostack_instance
      spec:
        storageSize: 1Gi
        storage:
          secret:
            name: minio-test
            type: s3
        resources:
          total:
            limits:
              memory: 2Gi
              cpu: 2000m
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route

      本例中部署的堆栈被配置为接收通过 HTTP 和 OpenTelemetry 协议(OTLP)的 Jaeger Thrift,它允许使用 Jaeger UI 可视化数据。

    2. 运行以下命令来应用自定义 CR。

      $ oc apply -f - << EOF
      <TempoStack_custom_resource>
      EOF

验证

  1. 运行以下命令,验证所有 TempoStack 组件状态是否为 Running,并且条件type: Ready

    $ oc get tempostacks.tempo.grafana.com simplest -o yaml
  2. 运行以下命令,验证所有 TempoStack 组件 pod 是否正在运行:

    $ oc get pods
  3. 访问 Tempo 控制台:

    1. 运行以下命令来查询路由详情:

      $ export TEMPO_URL=$(oc get route -n <control_plane_namespace> tempo -o jsonpath='{.spec.host}')
    2. 在网页浏览器中打开 https://<route_from_previous_step>
    3. 使用 Web 控制台的集群管理员凭证登录。

      注意

      Tempo 控制台最初不会在 Tempo 控制台安装后显示 trace 数据。

4.1.3. 其他资源