2.17.4. 分散トレース


分散トレースは、アプリケーションのサービス呼び出しのパスを追跡して、アプリケーション内の個々のサービスのパフォーマンスを追跡するプロセスです。アプリケーションでユーザーがアクションを起こすたびに、要求が実行され、多くのサービスが応答を生成するために対話が必要になる場合があります。この要求のパスは、分散トランザクションと呼ばれます。

Red Hat OpenShift Service Mesh は、Red Hat OpenShift Distributed Tracing Platform を使用して、開発者がマイクロサービスアプリケーション内の呼び出しの流れを確認できるようにします。

2.17.4.1. Red Hat OpenShift Distributed Tracing Platform と Red Hat build of OpenTelemetry の設定

ServiceMeshControlPlanespec.meshConfig.extensionProviders 仕様に名前付き要素と opentelemetry プロバイダーを追加することで、トレースデータを Red Hat OpenShift Distributed Tracing Platform に公開できます。その後、テレメトリーカスタムリソースが、トレーススパンを収集して OpenTelemetry Collector エンドポイントに送信するように Istio プロキシーを設定します。

メッシュの namespace に Red Hat build of OpenTelemetry インスタンスを作成し、トレースデータをトレースプラットフォームバックエンドサービスに送信するように設定できます。

前提条件

  • tracing-system namespace で Red Hat Tempo Operator を使用して TempoStack インスタンスを作成しました。詳細は、「Red Hat OpenShift Distributed Tracing Platform のインストールを」参照してください。
  • Red Hat build of OpenTelemetry Operator を、推奨される namespace または openshift-operators namespace のいずれかにインストールした。詳細は、「Red Hat build of OpenTelemetry のインストール」を参照してください。
  • Red Hat OpenShift Service Mesh 2.5 以前を使用している場合は、ServiceMeshControlPlane リソースの spec.tracing.type パラメーターを None に設定して、トレースデータを OpenTelemetry Collector に送信できるようにする。

手順

  1. メッシュ namespace に OpenTelemetry Collector インスタンスを作成します。この例では、bookinfo 名前空間を使用しています。

    OpenTelemetry Collector の設定例

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: bookinfo  
    1
    
    spec:
      mode: deployment
      config: |
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
        exporters:
          otlp:
            endpoint: "tempo-sample-distributor.tracing-system.svc.cluster.local:4317" 
    2
    
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [otlp]
              processors: []
              exporters: [otlp]

    1
    ServiceMeshMemberRoll メンバーリストに namespace を含めます。
    2
    この例では、TempoStack インスタンスが tracing-system namespace で実行しています。ServiceMeshMemberRoll メンバーリストに、`tracing-system` などの TempoStack namespace を含める必要はありません。
    注記
    • ServiceMeshMemberRoll メンバー namespace の 1 つに OpenTelemetry Collector のインスタンスを 1 つ作成してください。
    • OpenTelemetryCollector リソースに sidecar.istio.io/inject: 'true' を追加することで、メッシュの一部として otel-collector を追加できます。
  2. otel-collector Pod ログを確認し、Pod が実行中であることを確認します。

    otel-collector Pod ログチェックの例

    $ oc logs -n bookinfo  -l app.kubernetes.io/name=otel-collector

  3. istio-system namespace で ServiceMeshControlPlane カスタムリソース (CR) を作成するか、既存のカスタムリソースを更新します。

    SMCP カスタムリソースの例

    kind: ServiceMeshControlPlane
    apiVersion: maistra.io/v2
    metadata:
      name: basic
      namespace: istio-system
    spec:
      addons:
        grafana:
          enabled: false
        kiali:
          enabled: true
        prometheus:
          enabled: true
      meshConfig:
        extensionProviders:
          - name: otel
            opentelemetry:
              port: 4317
              service: otel-collector.bookinfo.svc.cluster.local
      policy:
        type: Istiod
      telemetry:
        type: Istiod
      version: v2.6

    注記

    SMCP 2.5 から 2.6 にアップグレードする場合は、spec.tracing.type パラメーターを None に設定します。

    SMCP spec.tracing.type パラメーターの例

    spec:
      tracing:
        type: None

  4. istio-system namespace に Telemetry リソースを作成します。

    Telemetry リソースの例

    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: mesh-default
      namespace: istio-system
    spec:
      tracing:
      - providers:
        - name: otel
        randomSamplingPercentage: 100

  5. istiod ログを確認します。
  6. Kiali リソース仕様を設定して、Kiali ワークロードトレースダッシュボードを有効にします。ダッシュボードを使用して、トレースクエリーの結果を表示できます。

    Kiali リソースの例

    apiVersion: kiali.io/v1alpha1
    kind: Kiali
    # ...
    spec:
      external_services:
        tracing:
          query_timeout: 30 
    1
    
          enabled: true
          in_cluster_url: 'http://tempo-sample-query-frontend.tracing-system.svc.cluster.local:16685'
          url: '[Tempo query frontend Route url]'
          use_grpc: true 
    2

    1
    デフォルトの query_timeout 整数値は 30 秒です。値を 30 秒より大きく設定する場合は、Kiali CR の .spec.server.write_timeout を更新し、Kiali ルートに haproxy.router.openshift.io/timeout=50s アノテーションを追加する必要があります。.spec.server.write_timeouthaproxy.router.openshift.io/timeout= は両方とも query_timeout より大きくする必要があります。
    2
    デフォルトの HTTP または gRPC ポートを使用していない場合は、in_cluster_url: ポートをカスタムポートに置き換えます。
    注記

    Kiali 1.73 は、Jaeger Query API を使用するため、Tempo リソースの制限に応じて応答時間が長くなります。Kiali UI に Could not fetch spans のエラーメッセージが表示された場合は、Tempo 設定を確認するか、Kiali のクエリーごとの制限を減らしてください。

  7. アプリケーションにリクエストを送信します。
  8. istiod Pod ログと otel-collector Pod ログを確認します。
2.17.4.1.1. mTLS で暗号化された Service Mesh メンバー namespace での OpenTelemetryCollector の設定

Service Mesh dataPlane の mTLS 暗号化を有効にすると、すべてのトラフィックが TLS で暗号化されます。

メッシュが OpenTelemetryCollector サービスと通信できるようにするには、OpenTelemetryCollector サービスに DestinationRule を適用して TLS trafficPolicy を無効にします。

DestinationRule Tempo CR の例

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: otel-disable-tls
spec:
  host: "otel-collector.bookinfo.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

注記

Service Mesh メンバー namespace ではない namespace に TempoStack インスタンスを作成した場合、この追加の DestinationRule 設定は必要ありません。

Service Mesh dataPlane mTLS 暗号化を有効にし、tracing-system-mtls などの Service Mesh メンバー namespace に TempoStack インスタンスを作成すると、すべてのトラフィックが TLS で暗号化されます。この暗号化は Tempo 分散サービスでは予期されていないため、TLS エラーが返されます。

TLS エラーを修正するには、Tempo と Kiali に DestinationRule を適用して TLS trafficPolicy を無効にします。

DestinationRule Tempo の例

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: tempo
  namespace: tracing-system-mtls
spec:
  host: "*.tracing-system-mtls.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

DestinationRule Kiali の例

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: kiali
  namespace: istio-system
spec:
  host: kiali.istio-system.svc.cluster.local
  trafficPolicy:
    tls:
      mode: DISABLE

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る