Lightstep

このタスクでは、Istioを構成してトレーススパンを収集し、Lightstepに送信する方法を示します。Lightstepを使用すると、大規模な本番ソフトウェアからサンプリングされていないトランザクションデータの100%を分析し、パフォーマンスの動作を説明し、根本原因分析を迅速化するための有益な分散トレースとメトリクスを生成できます。このタスクの最後には、IstioはプロキシからLightstep Satelliteプールにトレーススパンを送信し、それらをWeb UIで使用できるようにします。デフォルトでは、すべてのHTTPリクエストがキャプチャされます(エンドツーエンドのトレースを表示するには、トレースに参加しなくても、コードがOTヘッダーを転送する必要があります)。

Istioから直接トレーシングスパンを収集するだけで(コードに直接特定のインストルメンテーションを追加しない場合)、サービスがトレースによって生成されたHTTPヘッダーを転送する限り、トレーサを構成する必要はありません。

このタスクでは、Bookinfoサンプルアプリケーションを例として使用します。

始める前に

  1. Lightstepアカウントが必要です。無料トライアルにサインアップしてください。

  2. オンプレミスSatelliteを使用している場合は、TLS証明書と安全なgRPCポートが公開されたSatelliteプールが構成されていることを確認してください。Satelliteの設定の詳細については、「Satelliteのインストールと構成」を参照してください。

    Lightstep Public SatellitesまたはDeveloper Satellitesの場合、Satelliteは既に構成されています。ただし、この証明書をローカルディレクトリにダウンロードする必要があります。

  3. Lightstepのアクセストークンがあることを確認してください。アクセストークンにより、アプリケーションがLightstepプロジェクトと通信できます。

Istioのデプロイ

Istioのデプロイ方法は、使用するSatelliteの種類によって異なります。

オンプレミスサテライトを使用したIstioのデプロイ

これらの手順では、TLSは想定していません。SatelliteプールでTLSを使用している場合は、Public Satelliteプールの構成に従いますが、独自の証明書とプールのエンドポイント(`host:port`)を使用してください。

  1. Istioをデプロイするには、Satelliteアドレスを`<ホスト>:<ポート>`形式のアドレス(例:`lightstep-satellite.lightstep:9292`)で指定する必要があります。これは構成ファイルにあります。

  2. 次の構成パラメータを指定してIstioをデプロイします。

    • global.proxy.tracer="lightstep"
    • meshConfig.defaultConfig.tracing.sampling=100
    • meshConfig.defaultConfig.tracing.lightstep.address="<satellite-address>"
    • meshConfig.defaultConfig.tracing.lightstep.accessToken="<access-token>"

    これらのパラメータは、インストールコマンドの実行時に`--set key=value`構文を使用して設定できます。例:

    $ istioctl install \
        --set global.proxy.tracer="lightstep" \
        --set meshConfig.defaultConfig.tracing.sampling=100 \
        --set meshConfig.defaultConfig.tracing.lightstep.address="<satellite-address>" \
        --set meshConfig.defaultConfig.tracing.lightstep.accessToken="<access-token>" \
    

パブリックまたは開発者モードサテライトを使用したIstioのデプロイ

PublicまたはDeveloperモードのSatelliteを使用している場合、またはTLS証明書付きのオンプレミスSatelliteを使用している場合は、次の手順に従ってください。

  1. Satelliteプールの認証局証明書を、デフォルトの名前空間と`istio-system`名前空間にシークレットとして保存します。後者はIstioゲートウェイで使用されます。この証明書をダウンロードして使用してください。Bookinfoアプリケーションを別の名前空間にデプロイする場合は、その名前空間にシークレットを作成してください。

    $ CACERT=$(cat Cert_Auth.crt | base64) # Cert_Auth.crt contains the necessary CACert
    $ NAMESPACE=default
    
    $ cat <<EOF | kubectl apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: lightstep.cacert
        namespace: $NAMESPACE
        labels:
          app: lightstep
      type: Opaque
      data:
        cacert.pem: $CACERT
    EOF
    
  2. 次の構成パラメータを指定してIstioをデプロイします。

    global:
      proxy:
        tracer: "lightstep"
    meshConfig:
      defaultConfig:
        tracing:
          lightstep:
            address: "ingest.lightstep.com:443"
            accessToken: "<access-token>"
          sampling: 100
          tlsSettings
            mode: "SIMPLE"
            # Specifying ca certificate here will mount `lightstep.cacert` secret volume
            # at all sidecars by default.
            caCertificates="/etc/lightstep/cacert.pem"
    components:
      ingressGateways:
      # `lightstep.cacert` secret volume needs to be mount at gateways via k8s overlay.
      - name: istio-ingressgateway
        enabled: true
        k8s:
          overlays:
          - kind: Deployment
            name: istio-ingressgateway
            patches:
            - path: spec.template.spec.containers[0].volumeMounts[-1]
              value: |
                name: lightstep-certs
                mountPath: /etc/lightstep
                readOnly: true
            - path: spec.template.spec.volumes[-1]
              value: |
                name: lightstep-certs
                secret:
                  secretName: lightstep.cacert
                  optional: true
    

Bookinfoアプリのインストールと実行

  1. Bookinfoサンプルアプリケーションのデプロイ手順に従ってください。

  2. Bookinfoアプリケーションのイングレスゲートウェイの作成手順に従ってください。

  3. 前の手順が成功したことを確認するには、シェルで`GATEWAY_URL`環境変数が設定されていることを確認してください。

  4. サンプルアプリケーションにトラフィックを送信します。

    $ curl http://$GATEWAY_URL/productpage
    

トレースデータの可視化

  1. LightstepのWeb UIを読み込みます。サービスディレクトリに3つのBookinfoサービスが表示されます。

    Bookfinder services in the Service Directory
    サービスディレクトリのBookfinderサービス
  2. エクスプローラービューに移動します。

    Explorer view
    エクスプローラービュー
  3. 上部にあるクエリバーを探します。クエリバーを使用すると、**サービス**、**操作**、**タグ**の値で結果をインタラクティブにフィルタリングできます。

  4. **サービス**ドロップダウンリストから`productpage.default`を選択します。

  5. **実行**をクリックします。次のようになります。

    Explorer
    エクスプローラー
  6. レイテンシヒストグラムの下の例トレースのテーブルの最初の行をクリックして、` /productpage`の更新に対応する詳細を表示します。ページは次のようになります。

    Detailed Trace View
    詳細トレースビュー

スクリーンショットは、トレースが複数のスパンで構成されていることを示しています。各スパンは、` /productpage`要求の実行中に呼び出されたBookinfoサービスに対応しています。

トレース内の2つのスパンは、すべてのRPCを表します。たとえば、`productpage`から`reviews`への呼び出しは、`reviews.default.svc.cluster.local:9080/*`操作と`productpage.default: proxy client`サービスでラベル付けされたスパンから始まります。このサービスは、呼び出しのクライアント側スパンを表します。スクリーンショットは、呼び出しに15.30msかかったことを示しています。2番目のスパンは、`reviews.default.svc.cluster.local:9080/*`操作と`reviews.default: proxy server`サービスでラベル付けされています。2番目のスパンは、最初のスパンの子であり、呼び出しのサーバー側スパンを表します。スクリーンショットは、呼び出しに14.60msかかったことを示しています。

トレースサンプリング

Istioは、構成可能なトレースサンプリング率でトレースをキャプチャします。トレースサンプリング率の変更方法については、「分散トレーシングトレースサンプリングセクション」を参照してください。

Lightstepを使用する場合は、トレースサンプリング率を100%未満に減らすことはお勧めしません。トラフィックの多いメッシュを処理するには、Satelliteプールのサイズを拡大することを検討してください。

クリーンアップ

フォローアップタスクを計画していない場合は、BookinfoサンプルアプリケーションとクラスタからLightstepのシークレットを削除してください。

  1. Bookinfoアプリケーションを削除するには、「Bookinfoクリーンアップ」の手順を参照してください。

  2. Lightstep用に生成されたシークレットを削除します。

$ kubectl delete secret lightstep.cacert
この情報は役に立ちましたか?
改善点についてご提案があれば教えてください。

ご意見ありがとうございます!