分散トレース

サービスグラフでは、分散トレースビューを使用して以下を実行できます。

  • 全体的なサービスパフォーマンスの分析
  • 選択したサービスとその相互依存サービス間の通信フローの視覚化
  • エラーを示すサービスを特定し、エラーのあるサービスのトラブルシューティング
  • 選択したサービスとその各相互依存サービス間のトランザクション詳細の表示

前提条件

サービスのトレース情報を表示するには、以下を実行する必要があります。

  • アプリケーションが東西トラフィックを送信する際に、以下のトレースヘッダーを維持していることを確認します。

    ヘッダー

  • CICビルド1.7.23より前の場合は、CPX YAMLファイルをNS_DISTRIBUTED_TRACINGと値yesで更新します。

    CPX YAML

  • CICビルド1.7.23以降の場合は、ConfigMapを使用する必要があります。

    ConfigMapを使用すると、設定をポッドから分離し、ワークロードをポータブルにできます。ConfigMapを使用することで、ワークロードの設定を簡単に変更および管理でき、設定データをポッド仕様にハードコーディングする必要がなくなります。

    ConfigMapのサポートにより、NetScaler Ingress Controllerポッドを実行したまま、設定を自動的に更新できます。更新後にポッドを再起動する必要はありません。詳細については、Ingress ControllerのConfigMapサポートを参照してください。

    ConfigMapを使用すると、分散トレース、イベント、監査ログなどを有効または無効にできます。ConfigMapを使用するには、以下を実行します。

    1. 必要なパラメーターを使用してYAMLファイルを作成します。

      次のYAMLファイルの例では、分散トレースが有効になっており、監査ログ、イベント、トランザクションなどの他の変数は無効になっています。

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: cic-configmap
        namespace: default
      data:
        LOGLEVEL: 'debug'
        NS_PROTOCOL: 'http'
        NS_PORT: '80'
        NS_HTTP2_SERVER_SIDE: 'ON'
        NS_ANALYTICS_CONFIG:
          distributed_tracing:
            enable: 'true'
            samplingrate: 100
          endpoint:
            server: <Console-AgentIP> / <Console-AppserverIP>
          timeseries:
            port: 5563
            metrics:
              enable: 'true'
              mode: 'avro'
            auditlogs:
              enable: 'false'
            events:
              enable: 'false'
          transactions:
            enable: 'false'
            port: 5557
      <!--NeedCopy-->
      

      Samplingrateの値は0から100の間で指定できます。NetScaler Consoleは、指定された数のトレーストランザクションを表示します。

    2. 次のコマンドを使用してConfigMapを展開します。

      kubectl create -f <configmap-yaml>.yaml

    3. CPX YAMLファイルを編集し、envFromまたはargsのいずれかを使用して次の引数を指定します。

      envFrom:
       -  configMapRef:
           name: cic-configmap
      <!--NeedCopy-->
      

      または

      YAML

    4. いずれかの変数の値を変更する場合は、ConfigMapの値を編集します。この例では、他のすべての変数がfalseからtrueに変更されています。

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: cic-configmap
        namespace: default
      data:
        LOGLEVEL: 'debug'
        NS_PROTOCOL: 'http'
        NS_PORT: '80'
        NS_HTTP2_SERVER_SIDE: 'ON'
        NS_ANALYTICS_CONFIG:
          distributed_tracing:
            enable: 'true'
            samplingrate: 100
          endpoint:
            server: <Console-AgentIP> / <Console-AppserverIP>
          timeseries:
            port: 5563
            metrics:
              enable: 'true'
              mode: 'avro'
            auditlogs:
              enable: 'true'
            events:
              enable: 'true'
          transactions:
            enable: 'true'
            port: 5557
        <!--NeedCopy-->
      
    5. 次のコマンドを使用してConfigMapを再適用します。

      kubectl apply -f <yaml-file>.yaml

サービストレース詳細の表示

サービスグラフでサービスをクリックし、Trace Infoを選択します。

トレース情報

選択したサービスのトレースサマリーページが表示されます。

トレースサマリー

トレースサマリーには以下が表示されます。

  • 提案と演算子を使用してトランザクションを検索できる高度な検索 (1)。詳細については、高度な検索を参照してください。
  • 1時間、12時間、1日、1週間、1か月、カスタム時間などの期間を選択できる期間リスト (2)
  • 特定の期間の結果を表示するためにドラッグして選択できるタイムライン詳細グラフ (3)
  • 各メトリックからオプションを選択できるフィルターパネル (4)
  • 選択したサービスのトランザクション詳細 (5)

トランザクション詳細の表示

トランザクションをクリックして、詳細情報をドリルダウンします。選択したサービスのトランザクション詳細を以下のように表示できます。

  • 開始時刻
  • 終了時刻
  • SSLメトリック
  • 相互依存サービスとの通信(各サービスのエラーと応答時間を含む)

次の例は、catalogue-store-serviceからのエラーを示しています。詳細については、See Trace Detailsをクリックしてください。

トレース詳細

トレース詳細ページが表示されます。

トレーストランザクション

1 – トランザクションの開始時刻、応答時間、合計サービス、合計スパンを表示します。 2 – 相互依存サービスと通信した選択されたサービスの詳細を表示します。各トランザクションをクリックして詳細を表示できます。 3 – 各サービスのトランザクション詳細を表示します。

例の画像によると、catalogue-store-serviceがエラーを示しました。catalogue-store-serviceで利用可能なトランザクションをクリックします。

トランザクションをクリック

product-catalogue-servicecatalogue-store-service間のトランザクション詳細では、HTTP応答が500であることが示されています。これらの詳細により、管理者はエラーのあるサービスを分析し、解決策としてproduct-catalogue-serviceのトラブルシューティングを行うことができます。

フィルターパネルの下にある各メトリックからオプションを選択して、結果をフィルターすることもできます。たとえば、すべての5xxトランザクションを表示したい場合は、Response codeをクリックして500を選択します。

フィルターパネル

  • クライアントRTT: パケットがクライアントから移動する時間。
  • サーバーRTT: パケットがサーバーから移動する時間。
  • アプリ応答時間: アプリケーションの平均応答時間。
  • データ転送時間: サービスとの間で発生する可能性のあるデータ転送サイズと転送レート。
  • 場所: クライアントの場所。
  • ブラウザー: クライアントが使用するブラウザーの種類。例: Chrome、Firefox。
  • クライアントOS: ブラウザーのユーザーエージェント詳細に基づくクライアントOS。
  • デバイス: ブラウザーのユーザーエージェント詳細に基づくデバイス。例: タブレット、モバイル。
  • リクエストタイプ: トランザクションリクエストタイプ。例: GET。
  • 応答コード: サーバーから受信した応答コード。例: 501、404、200。
  • 応答コンテンツタイプ: トランザクションコンテンツタイプ。クライアントリクエストがtext/htmlの場合、サーバーからの応答はtext/htmlである必要があります。
  • SSLプロトコル: クライアントが使用するSSLプロトコルバージョン。例: SSLv3。
  • SSL暗号強度: SSL証明書キーサイズに基づく暗号強度(高、中、低など)。
  • SSLキー強度: SSL暗号強度はSSL証明書キーサイズから計算されます。キー長はSSLアルゴリズムのセキュリティを定義します。例: 2048。
  • SSLフロントエンド失敗理由: フロントエンドSSLハンドシェイクエラーメッセージ。例: SSL CLIENTAUTH FAILURE。
分散トレース