トレース・コンポーネントの構成
このドキュメントでは、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バックエンド・ストレージを使用して、管理クラスタにデータをエクスポートする管理対象クラスタを示しています。
管理対象クラスタの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サービス・パフォーマンス・モニタリングの有効化
- デフォルトのJaegerインスタンス作成の無効化
- JaegerオペレータHelmチャートのオーバーライドできない値
- Jaegerトレーシングを使用するIstioメッシュの構成
- Jaegerトレースを管理クラスタにエクスポートするための管理対象クラスタでのIstioメッシュの構成
- OpenSearchでのJaeger索引の管理
外部のOpenSearchをストレージに使用するためのJaegerインスタンスのカスタマイズ
デフォルトのJaegerインスタンスを外部のOpenSearchクラスタで使用することができます。次の例は、Verrazzanoカスタム・リソースでJaegerオペレータのHelmオーバーライドを構成して、ボリュームからマウントされたTLS CA証明書とシークレットに格納されたユーザー/パスワードで外部OpenSearchクラスタを使用する方法を示します。詳細は、Jaegerのドキュメントを参照してください。
- 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
- 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-url
、jaeger.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 * * *"