Jaegerトレーシング

アプリケーション・トレースを取得するためのJaegerの構成

Jaegerは、マイクロサービスのモニタリングおよびトラブルシューティングに使用される分散トレーシング・システムです。Jaegerの詳細は、Jaeger Webサイトを参照してください。

Jaegerオペレータのインストール

Jaegerオペレータをインストールするには、VerrazzanoリソースでjaegerOperatorコンポーネントを有効にします。次に、Jaegerオペレータを有効にするYAMLファイルの例を示します。

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

Jaegerオペレータを使用したJaegerのインストール

Jaegerは、Jaegerカスタム・リソース定義を使用してインストールされます。次の例は、VerrazzanoシステムのOpenSearchクラスタをトレース・バックエンドとして使用して、Istioメッシュ内にJaegerをインストールする方法を示しています。

Jaegerインスタンスを作成する前に、OpenSearchのユーザー名とパスワードを含むシークレットを作成します。Jaegerは、これらの資格証明を使用してOpenSearchに接続します:

$ kubectl create secret generic jaeger-secret \
  --from-literal=ES_PASSWORD=<OPENSEARCH PASSWORD> \
  --from-literal=ES_USERNAME=<OPENSEARCH USERNAME> \
  -n verrazzano-system

次のYAMLを使用して、Jaegerリソースを作成します:

apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: verrazzano-prod
  namespace: verrazzano-system
spec:
  annotations:
    sidecar.istio.io/inject: "true"
  strategy: production
  storage:
    # Jaeger Elasticsearch storage is compatible with Verrazzano OpenSearch.
    type: elasticsearch
    esIndexCleaner:
      enabled: false
      numberOfDays: 7
      schedule: "* * * * *"
    options:
      es:
        # Enter your OpenSearch cluster endpoint here.
        server-urls: https://elasticsearch.vmi.system.default.172.18.0.151.nip.io
        index-prefix: jaeger
        tls:
          ca: /verrazzano/certificates/ca.crt
    secretName: jaeger-secret
  volumeMounts:
    - name: certificates
      mountPath: /verrazzano/certificates/
      readOnly: true
  volumes:
    - name: certificates
      secret:
        # Jaeger should use the client TLS secret for OpenSearch. This is the default secret name for Verrazzano OpenSearch.
        secretName: system-tls-es-ingest

Jaegerオペレータは、問合せと収集のためのサービスを作成します。サンプル・リソースを適用した後で、Jaegerリソースをリストすると次のような出力が表示されます:

$ kubectl get services,deployments -l app.kubernetes.io/instance=verrazzano-prod -n verrazzano-system

NAME                                         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                  AGE
service/verrazzano-prod-collector            ClusterIP   10.96.76.108   <none>        9411/TCP,14250/TCP,14267/TCP,14268/TCP   52m
service/verrazzano-prod-collector-headless   ClusterIP   None           <none>        9411/TCP,14250/TCP,14267/TCP,14268/TCP   52m
service/verrazzano-prod-query                ClusterIP   10.96.205.8    <none>        16686/TCP,16685/TCP                      52m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/verrazzano-prod-collector   1/1     1            1           52m
deployment.apps/verrazzano-prod-query       1/1     1            1           52m

トレースをJaegerにエクスポートするアプリケーションの構成

Jaegerエージェント・サイドカーは、"sidecar.jaegertracing.io/inject": "true"注釈によってアプリケーション・ポッドに注入されます。この注釈は、Deploymentなどのネームスペースまたはポッド・コントローラに適用できます。次のスニペットは、Jaegerエージェント・インジェクションのためにOAMコンポーネントに注釈を付ける方法を示しています。

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
  name: example-component
spec:
  workload:
    apiVersion: core.oam.dev/v1alpha2
    kind: ContainerizedWorkload
    metadata:
      name: example-workload
      annotations:
        # The component's Deployment will carry the Jaeger annotation.
        "sidecar.jaegertracing.io/inject": "true"

Jaeger UIでのトレースの表示

UIを表示するには、Jaeger問合せサービスをポート転送するか、HTTPSアクセス用にイングレス・コントローラを構成します。Jaeger構成の詳細を確認するにはJaegerカスタム・リソース・ドキュメントを使用します。

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

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

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

apiVersion: install.verrazzano.io/v1alpha1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true
    istio:
      istioInstallArgs:
        - name: "meshConfig.enableTracing"
          value: "true"

トレースを有効にすると、Istioはクラスタ内のJaegerエンドポイントを使用して自動的に構成され、Istioが注入された新しいポッドはJaegerに対してトレースのエクスポートを開始します。既存のポッドが、新しいIstio構成を取得してトレースの送信を開始するには、再起動する必要があります。

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

apiVersion: install.verrazzano.io/v1alpha1
kind: Verrazzano
metadata:
  name: verrazzano
spec:
  profile: prod
  components:
    jaegerOperator:
      enabled: true
    istio:
      istioInstallArgs:
        - name: "meshConfig.enableTracing"
          value: "true"
        # 25% of Istio traces will be sampled.  
        - name: "meshConfig.defaultConfig.tracing.sampling"
          value: "25.0"