第3章 distributed tracing platform (Tempo)

3.1. distributed tracing platform (Tempo) のインストール

distributed tracing platform (Tempo) のインストール手順は以下のとおりです。

  1. サポートされているオブジェクトストレージを設定します。
  2. Tempo Operator をインストールします。
  3. オブジェクトストレージ認証情報のシークレットを作成します。
  4. TempoStack インスタンスの namespace を作成します。
  5. TempoStack カスタムリソースを作成して、少なくとも 1 つの TempoStack インスタンスをデプロイします。

3.1.1. オブジェクトストレージのセットアップ

サポートされているオブジェクトストレージを設定する際に、次の設定パラメーターを使用できます。

表3.1 必須のシークレットパラメーター

ストレージプロバイダー

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

3.1.2. Web コンソールから distributed tracing platform (Tempo) をインストールする

Web コンソールの Administrator ビューから、distributed tracing platform (Tempo) をインストールできます。

前提条件

  • cluster-admin ロールを持つクラスター管理者として、OpenShift Container Platform Web コンソールにログインしている。
  • Red Hat OpenShift Dedicated の場合、dedicated-admin ロールを持つアカウントを使用してログインしている。
  • サポート対象のオブジェクトストレージプロバイダーを使用している (Red Hat OpenShift Data FoundationMinIOAmazon S3Azure Blob StorageGoogle Cloud Storage)。

手順

  1. Tempo Operator をインストールします。

    1. OperatorsOperatorHub に移動し、Tempo Operator を検索します。
    2. OpenShift Operator for TempoInstallInstallView Operator で、Tempo Operator を選択します。

      重要

      デフォルトのプリセットで Operator がインストールされます。

      • Update channelstable
      • Installation modeAll namespaces on the cluster
      • Installed Namespaceopenshift-tempo-operator
      • Update approvalAutomatic
    3. インストール済み Operator ページの Details タブの ClusterServiceVersion details で、インストールの StatusSucceeded であることを確認します。
  2. HomeProjectsCreate Project に移動し、次の手順で作成する TempoStack インスタンスのプロジェクトを作成します。
  3. TempoStack インスタンス用に作成したプロジェクトで、オブジェクトストレージバケットのシークレットを作成します。WorkloadsSecretsCreateFrom YAML に移動します。

    Amazon S3 および MinIO ストレージのシークレット例

    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 view で、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
      シークレットの metadata 内にある name の値。
      2
      この値には、Azure Blob Storage の場合は azure、Google Cloud Storage の場合は gcs、Amazon S3、MinIO、または Red Hat OpenShift Data Foundation の場合は s3 を使用できます。

      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 Protocol (OTLP) 経由で Jaeger Thrift を受信するように設定されています。これにより、Jaeger UI でデータが可視化されます。

    4. Create を選択します。

検証

  1. Project: ドロップダウンリストを使用して、TempoStack インスタンスのプロジェクトを選択します。
  2. OperatorsInstalled Operators に移動して、TempoStack インスタンスの StatusCondition: Ready であることを確認します。
  3. WorkloadsPods に移動して、TempoStack インスタンスのすべてのコンポーネント Pod が稼働していることを確認します。
  4. Tempo コンソールにアクセスします。

    1. NetworkingRoutes に移動し、Ctrl+Ftempo を検索します。
    2. Location 列で URL を開き、Tempo コンソールにアクセスします。
    3. Web コンソールでクラスター管理者の認証情報を使用するために、Log In With OpenShift を選択します。

      注記

      Tempo コンソールをインストールした直後は、Tempo コンソールにトレースデータは表示されません。

3.1.3. CLI を使用して distributed tracing platform (Tempo) をインストールする

コマンドラインから distributed tracing platform (Tempo) をインストールできます。

前提条件

  • cluster-admin ロールを持つクラスター管理者によるアクティブな OpenShift CLI (oc) セッション。

    ヒント
    • OpenShift CLI (oc)のバージョンが最新であり、OpenShift Container Platform バージョンと一致していることを確認してください。
    • oc login を実行します。

      $ oc login --username=<your_username>
  • サポート対象のオブジェクトストレージプロバイダーを使用している (Red Hat OpenShift Data FoundationMinIOAmazon S3Azure Blob StorageGoogle Cloud Storage)。

手順

  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 apply -f - << EOF
    apiVersion: project.openshift.io/v1
    kind: Project
    metadata:
      name: <project_of_tempostack_instance>
    EOF
  3. 次のコマンドを実行して、TempoStack インスタンス用に作成したプロジェクトでオブジェクトストレージバケットのシークレットを作成します。

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

    Amazon S3 および MinIO ストレージのシークレット例

    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
      シークレットの metadata 内にある name の値。
      2
      この値には、Azure Blob Storage の場合は azure、Google Cloud Storage の場合は gcs、Amazon S3、MinIO、または Red Hat OpenShift Data Foundation の場合は s3 を使用できます。

      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 Protocol (OTLP) 経由で Jaeger Thrift を受信するように設定されています。これにより、Jaeger UI でデータが可視化されます。

    2. 次のコマンドを実行して、カスタマイズされた CR を適用します。

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

検証

  1. 次のコマンドを実行して、すべての TempoStack componentsstatusRunningconditionstype: 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. Web ブラウザーで https://<route_from_previous_step> を開きます。
    3. Web コンソールのクラスター管理者認証情報を使用してログインします。

      注記

      Tempo コンソールをインストールした直後は、Tempo コンソールにトレースデータは表示されません。

3.1.4. 関連情報