トレース・コンポーネントの構成

VerrazzanoでのJaeger分散トレーシングの有効化と構成

このドキュメントでは、Jaegerを有効化し、Jaegerのインストールをカスタマイズして、一般的なトレース・ニーズに対処する方法について説明します。

Jaegerの有効化

VerrazzanoでJaegerを使用するには、まずVerrazzanoカスタム・リソースでjaegerOperatorコンポーネントを有効にする必要があります。次に、Jaegerオペレータを有効にするYAMLファイルの例を示します。Verrazzanoは、Jaegerオペレータをverrazzano-monitoringネームスペースにインストールします。また、OpenSearchコンポーネントとKeycloakコンポーネントがVerrazzanoカスタム・リソースで有効になっている場合は、デフォルトのJaegerインスタンスもJaegerオペレータによってverrazzano-monitoringネームスペースに作成されます。

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true

Jaegerオペレータは、問合せと収集のためにServiceカスタム・リソースを作成します。Verrazzanoカスタム・リソースを適用した後、Jaegerリソースをリストすると、次のような出力が表示されます。

$ kubectl get services,deployments -l app.kubernetes.io/instance=jaeger-operator-jaeger -n verrazzano-monitoring

#sample output
NAME                                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                  AGE
service/jaeger-operator-jaeger-collector            ClusterIP   10.96.120.223   <none>        9411/TCP,14250/TCP,14267/TCP,14268/TCP   79m
service/jaeger-operator-jaeger-collector-headless   ClusterIP   None            <none>        9411/TCP,14250/TCP,14267/TCP,14268/TCP   79m
service/jaeger-operator-jaeger-query                ClusterIP   10.96.209.196   <none>        16686/TCP,16685/TCP                      79m

NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jaeger-operator-jaeger-collector   1/1     1            1           79m
deployment.apps/jaeger-operator-jaeger-query       1/1     1            1           79m

トレース・ポートの値は、トレース・エンドポイントによって異なります:

  • Zipkin: 9411
  • GRPC: 14250
  • HTTP: 14267および14268

マルチクラスタVerrazzano環境でのJaegerトレースの使用

管理対象クラスタでJaegerオペレータ・コンポーネントが有効になっている場合、管理クラスタへの登録が成功すると、Jaegerコレクタ・サービスが管理対象クラスタで実行され、管理クラスタに構成されたOpenSearchストレージにトレースがエクスポートされます。

ノート:

  • トレースが管理クラスタにエクスポートされるのは、管理クラスタのJaegerインスタンスでOpenSearchストレージが構成されている場合のみです。
  • 管理クラスタが使用できないか、ストレージ・バックエンドのOpenSearchが動作していない場合、Jaegerは大量のデータをバッファできないため、トレースの削除を開始します。大量のデータをバッファするには、Kafkaなどの中間キューを設定する必要があります。これにより、Jaegerコレクタからのデータ損失を防ぐことができます。

次の図は、JaegerインスタンスおよびOpenSearchバックエンド・ストレージを使用して、管理クラスタにデータをエクスポートする管理対象クラスタを示しています。

MCトレーシング

管理対象クラスタのJaegerリソースをリストすると、次のような出力が表示されます。

$ kubectl get jaegers -n verrazzano-monitoring

#sample output
NAME                                STATUS    VERSION   STRATEGY     STORAGE         AGE
jaeger-verrazzano-managed-cluster   Running   1.34.1    production   opensearch      11m

Jaegerのカスタマイズ

Verrazzanoは、jaeger-operator Helmチャートを使用してJaegerオペレータとJaegerをインストールします。Verrazzanoカスタム・リソースに指定されたHelmオーバーライドを使用して、インストール構成をカスタマイズできます。コンポーネント・オーバーライドの設定の詳細は、Customizing the Chart Before Installingを参照してください。

次の項では、利用できる一般的なカスタマイズについて説明します:

外部のOpenSearchをストレージに使用するためのJaegerインスタンスのカスタマイズ

デフォルトのJaegerインスタンスを外部のOpenSearchクラスタで使用することができます。次の例は、Verrazzanoカスタム・リソースでJaegerオペレータのHelmオーバーライドを構成して、ボリュームからマウントされたTLS CA証明書とシークレットに格納されたユーザー/パスワードで外部OpenSearchクラスタを使用する方法を示します。詳細は、Jaegerのドキュメントを参照してください。

  1. Verrazzanoカスタム・リソースでJaeger用に外部OpenSearchを構成する前に、OpenSearchの資格証明および証明書を含むシークレットをverrazzano-installネームスペースに作成します。Jaegerは、これらの資格証明を使用してOpenSearchに接続します
    $ kubectl create secret generic jaeger-secret \
     --from-literal=ES_PASSWORD=<OPENSEARCH PASSWORD> \
     --from-literal=ES_USERNAME=<OPENSEARCH USERNAME> \
     --from-file=ca-bundle=<path to the file containing CA certs> \
     -n verrazzano-install
    
  2. Verrazzanoカスタム・リソースを使用してJaegerリソースを更新します:
    apiVersion: install.verrazzano.io/v1beta1
    kind: Verrazzano
    metadata:
      name: custom-jaeger-external-opensearch
    spec:
      profile: prod
      components:
        jaegerOperator:
           enabled: true
           overrides:
            - values:
                jaeger:
                  create: true
                  spec:
                    strategy: production
                    storage:
                      type: opensearch
                      options:
                        es:
                          # Enter your OpenSearch cluster endpoint here.
                          server-urls: <External OpenSearch URL>
                          index-prefix: jaeger
                          tls:
                            ca: /verrazzano/certificates/ca-bundle
                      secretName: jaeger-secret
                    volumeMounts:
                      - name: certificates
                        mountPath: /verrazzano/certificates/
                        readOnly: true
                    volumes:
                      - name: certificates
                        secret:
                          secretName: jaeger-secret
    

Jaegerサービス・パフォーマンス・モニタリングの有効化

ノート: サービス・パフォーマンス・モニタリング(SPM)機能は現在、実験的とみなされています。

Verrazzanoによって作成されたデフォルトのJaegerインスタンスで、サービス・パフォーマンス・モニタリングを有効にするには、次のVerrazzanoカスタム・リソースを使用します。Verrazzanoは、jaeger.spec.query.options.prometheus.server-urlに、Verrazzanoによって管理されるPrometheusサーバーのURLを設定します(存在する場合)。ユース・ケースのために外部Prometheusサーバーを構成するには、Verrazzanoカスタム・リソースのjaeger.spec.query.options.prometheus.server-urljaeger.spec.query.options.prometheus.tls.enabledおよびjaeger.spec.query.options.prometheus.tls.caを適切にオーバーライドします。詳細は、Jaegerのドキュメントを参照してください。

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-jaeger
spec:
  profile: prod
  components:
    jaegerOperator:
       enabled: true
       overrides:
        - values:
            jaeger:
              spec:
                query:
                  metricsStorage:
                    type: prometheus

デフォルトのJaegerインスタンス作成の無効化

カスタムJaegerインスタンスがあり、Verrazzanoによって作成されたデフォルトのJaegerインスタンスを無効にする場合は、次のVerrazzanoカスタム・リソースを使用します:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-jaeger
spec:
  profile: prod
  components:
    jaegerOperator:
       enabled: true
       overrides:
        - values:
            jaeger:
              create: false

JaegerオペレータHelmチャートのオーバーライドできない値

Jaegerオペレータの次のHelm値は、Verrazzanoカスタム・リソースでのオーバーライドがサポートされていません:

  • nameOverride
  • fullnameOverride
  • serviceAccount.name
  • ingress.enabled
  • jaeger.spec.storage.dependencies.enabled

Verrazzanoカスタム・リソースでこれらのHelm値をオーバーライドしようとすると、リクエストは拒否され、エラー・メッセージが返されます。

ノート: Verrazzanoでは、Jaeger Spark依存関係がサポートされないため、Helmチャート値jaeger.spec.storage.dependencies.enabledはサポートされません。これは、Verrazzanoによって管理されるJaegerインスタンスではfalseに設定され、オーバーライドできません。

Jaegerトレーシングを使用するIstioメッシュの構成

Istioの分散トレーシング統合を有効にすることで、Istioメッシュ・トラフィックを表示できます。Istioメッシュのトレースによって、Istioのイングレスおよびエグレス・ゲートウェイを通過するアプリケーション・トラフィックの可観測性を提供します。

デフォルトではIstioトレーシングは無効です。トレースをオンにするには、次の例のようにIstioコンポーネントをカスタマイズします:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true
    istio:
      overrides:
        - values:
            apiVersion: install.istio.io/v1alpha1
            kind: IstioOperator
            spec:
              meshConfig:
                enableTracing: true

トレースを有効にすると、Istioはクラスタ内でVerrazzanoによって管理されるJaegerインスタンスを使用して自動的に構成され、Istioが注入されたポッドはJaegerに対してトレースのエクスポートを開始します。

Verrazzanoによって管理されているインスタンスではない別のJaegerインスタンスにトレースをエクスポートするには、meshConfig.defaultConfig.tracing.zipkin.addressを対象のJaegerコレクタURLに設定します。Istioが注入された新しいポッドは、新たに構成されたJaegerインスタンスに対してトレースのエクスポートを開始します。既存のポッドが、新しいIstio構成を取得して、新たに構成されたJaegerインスタンスへのトレースの送信を開始するには、再起動する必要があります。

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true
    istio:
      overrides:
        - values:
            apiVersion: install.istio.io/v1alpha1
            kind: IstioOperator
            spec:
              meshConfig:
                enableTracing: true
                defaultConfig:
                  tracing:
                    zipkin:
                      address: <address:port of your Jaeger collector service>

Istioのデフォルトのサンプリング・レートは1%です。つまり、100件中1件がJaegerでトレーシングされます。サンプリング・レートを変更するには、meshConfig.defaultConfig.tracing.sampling Istioインストール引数を使用して必要なレートを構成します

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true
    istio:
      overrides:
        - values:
            apiVersion: install.istio.io/v1alpha1
            kind: IstioOperator
            spec:
              meshConfig:
                enableTracing: true
                defaultConfig:
                  tracing:
                    sampling: 25.0

Jaegerトレースを管理クラスタにエクスポートするための管理対象クラスタでのIstioメッシュの構成

管理対象クラスタのIstioメッシュ・トレースを管理クラスタにエクスポートするには、meshConfig.defaultConfig.tracing.zipkin.addressを、管理対象クラスタで作成されたJaegerコレクタURLに設定します。これで、管理クラスタに構成されたOpenSearchストレージにトレースがエクスポートされます。

Verrazzanoのインストール時に、管理対象クラスタ上のIstioメッシュを次のように構成します:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: managed-cluster
  components:
    jaegerOperator:
      enabled: true
    istio:
      overrides:
      - values:
          apiVersion: install.istio.io/v1alpha1
          kind: IstioOperator
          spec:
            meshConfig:
              enableTracing: true
              defaultConfig:
                tracing:
                  zipkin:
                    address: jaeger-verrazzano-managed-cluster-collector.verrazzano-monitoring.svc.cluster.local.:9411

OpenSearchでのJaeger索引の管理

OpenSearchの古いJaegerデータを消去するため、VerrazzanoはJaegerが提供する索引管理を使用します。デフォルトでは、古いトレースを消去するために、次のデフォルト値のcronジョブが作成されます。これをユース・ケースのために構成するには、Verrazzanoカスタム・リソース内の次のJaeger仕様の値を必要な値でオーバーライドします。

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true
      overrides:
        - values:
            jaeger:
              spec:
                storage:
                  type: opensearch
                  esIndexCleaner:
                    # turn the cron job deployment on and off
                    enabled: true
                    # number of days to wait before deleting a record        
                    numberOfDays: 7
                    # cron expression for it to run    
                    schedule: "55 23 * * *"