4.2. distributed tracing platform (Tempo) の設定とデプロイ


Tempo Operator は、distributed tracing platform (Tempo) の作成とデプロイで使用するアーキテクチャーおよび設定を定義するカスタムリソース定義 (CRD) ファイルを使用します。デフォルト設定をインストールするか、ファイルを変更できます。

4.2.1. デプロイメントのカスタマイズ

バックエンドストレージの設定については、永続ストレージについて と、選択したストレージに対応する設定トピックを参照してください。

4.2.1.1. 分散トレースのデフォルト設定オプション

Tempo カスタムリソース (CR) は、distributed tracing platform (Tempo) リソースの作成時に使用されるアーキテクチャーおよび設定を定義します。これらのパラメーターを変更して、distributed tracing platform (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: {}

表4.2 Ttempo パラメーター
パラメーター説明デフォルト値
apiVersion:

オブジェクトの作成時に使用する API バージョン。

tempo.grafana.com/v1alpha1

tempo.grafana.com/v1alpha1

kind:

作成する Kubernetes オブジェクトの種類を定義します。

tempo

 
metadata:

name の文字列、UID、オプションの namespace などのオブジェクトを一意に識別するデータ。

 

OpenShift Container Platform は UID を自動的に生成し、オブジェクトが作成されるプロジェクトの名前で namespace を完了します。

name:

オブジェクトの名前。

TempoStack インスタンスの名前。

tempo-all-in-one-inmemory

spec:

作成するオブジェクトの仕様。

TempoStack インスタンスのすべての設定パラメーターが含まれています。すべての Tempo コンポーネントの共通定義が必要な場合、spec ノードで定義されます。個々のコンポーネントに関連する定義は、spec/template/<component> ノードに置かれます。

該当なし

resources:

TempoStack に割り当てられたリソース。

  
storageSize:

Ingester PVC のストレージサイズ。

  
replicationFactor:

レプリケーション係数の設定。

  
retention:

トレースの保持に関する設定オプション。

  
storage:

ストレージを定義する設定オプション。すべてのストレージ関連オプションは、allInOne や他のコンポーネントオプションではなく、storage の下に配置される必要があります。

  
template.distributor:

Tempo distributor の設定オプション。

  
template.ingester:

Tempo ingester の設定オプション。

  
template.compactor:

Tempo compactor の設定オプション。

  
template.querier:

Tempo querier の設定オプション。

  
template.queryFrontend:

Tempo query-frontend の設定オプション。

  
template.gateway:

Tempo gateway の設定オプション。

  

最低限必要な設定

以下は、デフォルト設定で distributed tracing platform (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
このセクションでは、デプロイされたオブジェクトストレージバックエンドを指定します。そのためには、オブジェクトストレージにアクセスするための作成済みシークレットと認証情報が必要です。

4.2.1.2. distributed tracing platform (Tempo) のストレージ設定

spec.storage の下にある TempoStack カスタムリソースで、distributed tracing platform (Tempo) のオブジェクトストレージを設定できます。サポート対象である複数のストレージプロバイダーから選択できます。

表4.3 Tempo Operator が分散トレーシングストレージの定義に使用する一般的なストレージパラメーター
パラメーター説明デフォルト値
spec:
  storage:
    secret
      type:

デプロイメントに使用するストレージのタイプ。

memory。Pod がシャットダウンされるとデータは保持されないため、memory ストレージは開発、テスト、デモンストレーション、概念実証環境にのみ適しています。

memory

storage:
  secretname:

設定されたオブジェクトストレージタイプの認証情報を含むシークレットの名前。

 

該当なし

storage:
  tls:
    caName:

CA は、CA 証明書が含まれる ConfigMap オブジェクトの名前です。

  
表4.4 必須のシークレットパラメーター
ストレージプロバイダー

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

4.2.1.3. クエリー設定オプション

分散トレースプラットフォームの 2 つのコンポーネント(Tempo)で、クエリーアとクエリーフロントエンドはクエリーを管理します。これらのコンポーネントの両方を設定できます。

querier コンポーネントは、取り込み元またはバックエンドストレージで要求されたトレース ID を見つけます。set パラメーターに応じて、querier コンポーネントは、取り込み担当者とプルブームまたはインデックスの両方をバックエンドからクエリーして、オブジェクトストレージ内のブロックを検索できます。querier コンポーネントは、GET /querier/api/traces/<traceID > で HTTP エンドポイントを公開しますが、直接使用することは想定されていません。クエリーはクエリーフロントエンドに送信する必要があります。

表4.5 querier コンポーネントの設定パラメーター
パラメーター説明

nodeSelector

node-selection 制約の単純な形式。

type: object

replicas

コンポーネント用に作成されるレプリカの数。

type: integer; format: int32

Toleration

コンポーネント固有の Pod の容認。

type: array

クエリーフロントエンドコンポーネントは、受信クエリーの検索スペースをシャード化します。クエリー frontend は、単純な HTTP エンドポイント( GET /api/traces/<traceID>)でトレースを公開します。内部的には、クエリーフロントエンドコンポーネントは blockID 領域を設定可能なシャード数に分割し、これらの要求をキューに入れます。querier コンポーネントは、ストリーミング gRPC 接続を介してクエリーフロントエンドコンポーネントに接続し、これらのシャードクエリーを処理します。

表4.6 クエリーフロントエンドコンポーネントの設定パラメーター
パラメーター説明

component

クエリーフロントエンドコンポーネントの設定。

type: object

component.nodeSelector

ノード選択制約の単純な形式。

type: object

component.replicas

クエリーの frontend コンポーネント用に作成されるレプリカの数です。

type: integer; format: int32

component.tolerations

クエリーフロントエンドコンポーネントに固有の Pod 容認。

type: array

jaegerQuery

Jaeger Query コンポーネントに固有のオプション。

type: object

jaegerQuery.enabled

有効 にすると、Jaeger Query コンポーネントjaegerQuery を作成します。

型:boolean

jaegerQuery.ingress

Jaeger Query ingress のオプション。

type: object

jaegerQuery.ingress.annotations

Ingress オブジェクトのアノテーション。

type: object

jaegerQuery.ingress.host

Ingress オブジェクトのホスト名。

type: string

jaegerQuery.ingress.ingressClassName

IngressClass クラスターリソースの名前。この Ingress リソースを提供する Ingress コントローラーを定義します。

type: string

jaegerQuery.ingress.route

OpenShift ルートのオプション。

type: object

jaegerQuery.ingress.route.termination

終了タイプ。デフォルトは edge です。

型:文字列(enum: insecure、edge、passthrough、reencrypt)

jaegerQuery.ingress.type

Jaeger Query UI の Ingress のタイプ。サポートされるタイプは ingressroute、および none です。

型:文字列(enum: ingress、route)

jaegerQuery.monitorTab

監視タブの設定。

type: object

jaegerQuery.monitorTab.enabled

Jaeger コンソールの monitor タブを有効にします。PrometheusEndpoint を設定する必要があります。

型:boolean

jaegerQuery.monitorTab.prometheusEndpoint

スパンレート、エラー、および期間(RED)メトリクスが含まれる Prometheus インスタンスへのエンドポイント。例: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091

type: string

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. Yeter UI の Monitor タブの設定

トレースデータには豊富な情報が含まれており、データはインストルメント化された言語およびフレームワーク間で正規化されます。したがって、要求レート、エラー、および期間(RED)メトリクスをトレースから抽出できます。メトリクスは、Jaeger コンソールの Monitor タブで可視化できます。

メトリクスは、ユーザーワークロード監視スタックにデプロイされた Prometheus により Collector から収集された OpenTelemetry コレクターのスパンから導出されます。Jaeger UI は、Prometheus エンドポイントからこれらのメトリクスをクエリーし、可視化します。

4.2.1.4.1. OpenTelemetry Collector の設定

OpenTelemetry Collector では、トレースからメトリクスを導出し、そのメトリクスを Prometheus 形式でエクスポートする spanmetrics コネクターの設定が必要です。

スパン RED の OpenTelemetry Collector カスタムリソース

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]

1
ServiceMonitor カスタムリソースを作成して、Prometheus エクスポーターの収集を有効にします。
2
Spanmetrics コネクターはトレースを受信し、メトリクスをエクスポートします。
3
OpenTelemetry プロトコルのスパンを受信する OTLP レシーバー。
4
Prometheus エクスポーターは、Prometheus 形式でメトリクスをエクスポートするために使用されます。
5
Spanmetrics コネクターは、トレースパイプラインのエクスポーターとして設定されています。
6
Spanmetrics コネクターは、メトリクスパイプラインのレシーバーとして設定されています。
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

1
Jaeger コンソールの監視タブを有効にします。
2
ユーザーワークロード監視からの Thanos Querier のサービス名。

4.2.1.5. マルチテナントへの対応

認証と認可を備えたマルチテナンシーは、Tempo Gateway サービスで提供されます。認証には、OpenShift OAuth と Kubernetes TokenReview API を使用します。認可には、Kubernetes SubjectAccessReview API を使用します。

2 つのテナント (devprod) を使用したサンプル Tempo CR

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

1
openshift に設定する必要があります。
2
テナントのリスト。
3
テナント名。データを取り込む際に、X-Scope-OrgId ヘッダーで指定する必要があります。
4
一意のテナント ID。
5
認証と認可を実行するゲートウェイを有効にします。Jaeger UI は、http://<gateway-ingress>/api/traces/v1/<tenant-name>/search で公開されています。

認可設定では、Kubernetes ロールベースアクセス制御 (RBAC) の ClusterRoleClusterRoleBinding を使用します。デフォルトでは、読み取りまたは書き込み権限を持っているユーザーはいません。

認証されたユーザーが dev テナントおよび prod テナントのトレースデータを読み取ることができる読み取り 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

1
テナントをリスト表示します。
2
値が get の場合、読み取り操作が有効になります。
3
認証されたユーザー全員に、トレースデータの読み取り権限を付与します。

otel-collector サービスアカウントが dev テナントのトレースデータを書き込むことができる書き込み 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

1
トレースデータのエクスポートでクライアントが使用するサービスアカウント名。クライアントは、サービスアカウントトークン /var/run/secrets/kubernetes.io/serviceaccount/token をベアラートークンヘッダーとして送信する必要があります。
2
テナントをリスト表示します。
3
値が create の場合、書き込み操作が有効になります。

トレースデータは、データ書き込み用の RBAC を持つサービスアカウントを使用する OpenTelemetry Collector から Tempo インスタンスに送信できます。

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. distributed tracing platform (Tempo) のモニタリング設定

Tempo Operator は、distributor や ingester などの各 TempoStack コンポーネントのモニタリングとアラートをサポートし、Operator 自体に関するアップグレードおよび運用のメトリクスを公開します。

4.2.2.1. TempoStack メトリクスとアラートの設定

TempoStack インスタンスのメトリクスとアラートを有効にできます。

前提条件

手順

  1. TempoStack インスタンスのメトリクスを有効にするには、spec.observability.metrics.createServiceMonitors フィールドを true に設定します。

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoStack
    metadata:
      name: <name>
    spec:
      observability:
        metrics:
          createServiceMonitors: true
  2. TempoStack インスタンスのアラートを有効にするには、spec.observability.metrics.createPrometheusRules フィールドを true に設定します。

    apiVersion: tempo.grafana.com/v1alpha1
    kind: TempoStack
    metadata:
      name: <name>
    spec:
      observability:
        metrics:
          createPrometheusRules: true

検証

Web コンソールの Administrator ビューを使用して、正常に設定されたことを確認できます。

  1. Observe Targets に移動して Source: User でフィルタリングし、 tempo-<instance_name>-<component> 形式の ServiceMonitor のステータスが Up であることを確認します。
  2. アラートが正しく設定されていることを確認するには、Observe Alerting Alerting rules に移動して Source: User でフィルタリングし、TempoStack インスタンスコンポーネントの Alert rules が利用可能であることを確認します。

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 ビューを使用して、正常に設定されたことを確認できます。

  1. Observe Targets に移動して Source: Platform でフィルタリングし、tempo-operator を検索します。その場合は、ステータスは Up でなければなりません。
  2. アラートが正しく設定されていることを確認するには、Observe Alerting Alerting rules に移動して Source: Platform でフィルタリングし、Tempo OperatorAlert rules を見つけます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.