Envoy によるオブザーバビリティ
このドキュメントでは、Envoy プロキシのトレースとログを生成する方法をデモ形式で示します。また、Cloud Trace と Cloud Logging に情報をエクスポートする方法についても説明します。
サービス メッシュを使用するとサービス間のトラフィックを可視化できるため、サービス自体のコードを変更することなく充実したモニタリングとデバッグを実現できます。Cloud Service Mesh のサイドカー プロキシ アーキテクチャでは、プロキシはリクエストを処理し必要なテレメトリー情報を提供するコンポーネントとして機能します。テレメトリー情報は、その後データ分析、アラート、トラブルシューティングなどに使用するために、一か所に収集して保存する必要があります。
デモの構成要素
このドキュメントでは、次の構成を使用してトレースとロギングのデモを行います。
- HTTP ポートでリッスンし、リクエストを処理した仮想マシン(VM)インスタンスのホスト名を返す単一のアプリケーション。図では、このアプリケーションは右上にあり、「HTTP service(s) (10.10.10.10:80)」というラベルが付いています。1 つ以上の VM がこのサービスを提供できます。
- このサービスのコンシューマを実行している単一の Compute Engine VM。図では、「Demo GCE VM」というラベルが付いています。
- Cloud Service Mesh によってインストールされ構成された Envoy サイドカー プロキシ。図では、「envoy」というラベルが付いています。
- 左側のボックス内に示されているサービス コンシューマ アプリケーションは、10.10.10.10:80で実行されている HTTP サービスのコンシューマです。
以下の手順は、図の中の番号に対応しています。
- Cloud Service Mesh は、Envoy プロキシを構成して次の処理を行います。 - 10.10.10.10:80サービスのトラフィックをロード バランシングします。
- このサービスに対して発行されたリクエストごとにアクセスログ情報を保存します。
- サービスのトレース情報を生成します。
 
- コンシューマが - 10.10.10.10にリクエストを送信すると、サイドカー プロキシはリクエストを正しい宛先にルーティングします。
- サイドカー プロキシは、必要なテレメトリー情報も生成します。 - リクエストに関する追加情報を含むエントリを、ローカル ディスクのアクセスログに追加します。
- トレース エントリを生成し、OpenCensus Envoy トレースを使用して Trace に送信します。
 
- Logging エージェントはこのデータを Cloud Logging API にエクスポートし、Cloud Logging インターフェースで使用できるようにします。 
前提条件
設定手順を行う前に、次のことを確認してください。
- VM とプロキシレス ワークロードの設定準備で説明されているように、Traffic Director API が有効になっており、他の前提条件も満たされている。
- Cloud Trace API が有効になっている。
- Compute Engine VM が使用するサービス アカウントに、次の Identity and Access Management(IAM)ロールが構成されている。- Cloud Trace エージェント ロール(roles/cloudtrace.agent)
- ログ書き込みロール(roles/logging.logWriter)
 
- Cloud Trace エージェント ロール(
- ファイアウォール ルールで、この設定の一環として構成した VM へのトラフィックを許可している。
デモ用サービスと Cloud Service Mesh を設定する
このドキュメントでは、いくつかのシェル スクリプトを使用して、デモ用サービスの構成に必要な手順を行います。具体的な手順について理解するために、スクリプトをご確認ください。
- Compute Engine VM を起動し、VM に HTTP サービスを構成します。 - curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh chmod 755 setup_demo_service.sh && ./setup_demo_service.sh - setup_demo_service.shスクリプトは、VM の起動時に apache2 を起動する VM テンプレートと、このテンプレートを使用するマネージド インスタンス グループを作成します。このスクリプトは、自動スケーリングを有効にせずに単一のインスタンスを起動します。
- Cloud Service Mesh を使用して - 10.10.10.10サービスのルーティングを構成します。- curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh - setup_demo_trafficdirector.shスクリプトは、Cloud Service Mesh のマネージド サービスに必要なパラメータを構成します。
- サイドカー プロキシを VM にインストールして構成し、HTTP サービスのコンシューマを実行する Compute Engine VM を起動します。次のコマンドで、 - PROJECT_IDはトレース情報の送信先のプロジェクト ID に置き換えます。これは通常、VM が属するものと同じ Google Cloud プロジェクトです。- curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh chmod 755 setup_demo_client.sh && ./setup_demo_client.sh PROJECT_ID - setup_demo_client.shスクリプトは、Cloud Service Mesh を使用するように事前構成された Envoy プロキシを持つ Compute Engine VM を作成します。
次の追加の構成設定により、トレースとロギングが有効になります。
- Cloud Service Mesh の Envoy ブートストラップ属性を構成するで説明されているように、TRAFFICDIRECTOR_ACCESS_LOG_PATHとTRAFFICDIRECTOR_ENABLE_TRACINGのブートストラップ ノードのメタデータ変数によってロギングとトレースが有効になります。
- 静的ブートストラップ構成により、OpenCensus を使用してトレース情報を Trace にエクスポートできます。
これらのスクリプトを実行したら、td-observability-demo-client VM にログインし、10.10.10.10 から HTTP サービスにアクセスできます。
curl http://10.10.10.10
この時点で、Envoy はアクセスのログとトレースの情報を生成します。次のセクションでは、ログとトレースの情報をエクスポートする方法について説明します。
Cloud Trace へのトレースのエクスポートを設定する
setup-demo-client.sh スクリプトを実行した際に作成した Envoy ブートストラップ構成だけでトレース情報を生成できます。その他の構成はすべて任意です。追加のパラメータを構成する場合は、OpenCensus の Envoy 構成ページを参照し、Envoy ブートストラップ構成でトレース オプションを変更します。
デモ用サーバー(curl
10.10.10.10)にサンプル リクエストを発行した後、 Google Cloud コンソールで Trace のインターフェースに移動します([トレース] > [トレースリスト] の順に選択)。発行したリクエストに対応するトレースの記録が表示されます。
Trace の使用方法については、Cloud Trace のドキュメントをご覧ください。
Logging へのアクセスログのエクスポートを設定する
この段階で Envoy は、実行されている VM のローカル ディスクにアクセスログ情報を記録しているはずです。これらを Logging にエクスポートするには、ローカルの Logging エージェントが必要です。これには、Logging エージェントをインストールして構成する必要があります。
Logging エージェントをインストールする
ロギング情報のエクスポート元の VM に Logging エージェントをインストールします。この構成例では、VM は td-observability-demo-vm です。
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh sudo bash add-logging-agent-repo.sh --also-install
詳細については、個々の VM に Cloud Logging エージェントをインストールするをご覧ください。
Logging エージェントを構成する
Envoy のログは、非構造化テキストまたは構造化テキストとしてエクスポートできます。
Envoy のログを非構造化テキストとしてエクスポートする
このオプションでは、アクセスログの記録を未加工テキストとして Cloud Logging にエクスポートします。アクセスログの各エントリは、単一のエントリとして Logging にエクスポートされます。この構成は、Logging エージェントの現在のバージョンとともに配布されるパーサーを使用するため、インストールが簡単です。ただし、未加工テキストのログエントリのフィルタや処理がしにくいというデメリットがあります。
- Envoy のアクセスログを非構造化形式でエクスポートするための構成ファイルをダウンロードしてインストールします。 - curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf 
- エージェントを再起動します。変更はエージェントの起動時に有効になります。 - sudo service google-fluentd restart 
Envoy のログを構造化テキストとしてエクスポートする
- GitHub から Envoy アクセスログ パーサーをインストールします。 - sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser 
- Envoy アクセスログを構造化形式でエクスポートするための構成ファイルをダウンロードしてインストールします。 - curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf 
- エージェントを再起動します。変更はエージェントの起動時に有効になります。 - sudo service google-fluentd restart 
詳細については、Logging エージェントを構成するをご覧ください。
構成を確認する
- サイドカー プロキシ VM から、デモ用サービスへのリクエストを生成します。これにより、新しいローカルのログ記録が作成されます。たとえば、curl 10.10.10.10を実行できます。
- Google Cloud コンソールで、[ロギング] > [ログ エクスプローラ] に移動します。プルダウン メニューで、[envoy-access] ログタイプを選択します。前に選択した構成タイプに応じて、最新のリクエストのログエントリが非構造化形式または構造化形式で表示されます。
トラブルシューティング
Envoy のオブザーバビリティに関するさまざまな問題のトラブルシューティング方法については、次のセクションをご覧ください。
複数プロジェクトにわたるトレースを構成する
複数のプロジェクトにデプロイされた Envoy のリクエストをトレースする場合は、次の点に注意してください。
- 各 Envoy は、それが実行されているプロジェクトの認証情報で構成する必要があります。
- 各 Envoy は、その認証情報に対応するプロジェクトにトレースデータを送信します。
- リクエストの作成時にアプリケーションで X-Cloud-Trace-ContextHTTP ヘッダーの値が保持される場合は、プロジェクト間のリクエストのトレーススパンを確認できます。
プロキシレス gRPC アプリケーションとのトレースの互換性
Envoy の OpenCensus トレーサー構成を使用すると、プロキシレス gRPC アプリケーションや Envoy プロキシからエクスポートされたトレースの完全な互換性をサービス メッシュ内で確保できるようになります。互換性を確保するため、Envoy ブートストラップでは、OpenCensusConfig に GRPC_TRACE_BIN トレース形式が含まれるようにトレース コンテキストを構成する必要があります。
tracing:
  http:
      name: envoy.tracers.opencensus
      typed_config:
        "@type": type.googleapis.com/envoy.config.trace.v2.OpenCensusConfig
        stackdriver_exporter_enabled: "true"
        stackdriver_project_id: "PROJECT_ID"
        incoming_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
        outgoing_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
構成が完了しても使用可能なトレースまたはロギング エントリが表示されない場合は、次を確認します。
- Compute Engine VM のサービス アカウントには、前提条件で指定されている Trace と Logging の IAM 権限が割り当てられている必要があります。Trace の IAM 権限の詳細については、アクセス制御をご覧ください。Logging の権限の詳細については、アクセス制御をご覧ください。
- ロギングについて: /var/log/google-fluentd/google-fluentd.logにエラーがないことを確認します。
- ロギングについて: リクエストが発行された際に、ローカルのアクセスログ ファイルに新しいエントリが表示されることを確認します。
次のステップ
- 関連情報については、プロキシレス gRPC アプリケーションによるオブザーバビリティをご覧ください。
- Cloud Service Mesh の一般的なトラブルシューティングについては、Envoy デプロイに関するトラブルシューティングをご覧ください。