可観測性

サービス メッシュを使用すると、サービスとの間のトラフィックを監視できるため、サービス自体のコードを変更することなく、豊富なモニタリングとデバッグが可能です。Traffic Director が使用するサイドカー プロキシのアーキテクチャでは、プロキシはリクエストを処理し、必要なテレメトリー情報を提供するコンポーネントです。テレメトリー情報は、データ分析、アラート、トラブルシューティングなどの目的で使用するために、一元管理された場所に収集して保存する必要があります。

このガイドでは、Envoy プロキシのトレースロギングを生成する方法を説明します。このガイドでは、情報を Cloud TraceCloud Logging にエクスポートする方法についても説明します。

デモ設定

このガイドでは、次の構成を使用してトレースとロギングのデモを行います。

  • HTTP ポートをリッスンし、リクエストを処理した VM のホスト名を返す単一のアプリケーション。図では、このアプリケーションは右上隅に [HTTP service(10.10.10.10:80)] というラベルが付いています。1 つ以上の VM がこのサービスを提供できます。
  • このサービスのコンシューマを実行している単一の Compute Engine VM。図では、Compute Engine VM のデモというラベルが付いています。
  • Traffic Director によってインストールされ構成された Envoy サイドカー プロキシ。 図では、Envoy というラベルが付いています。
  • 灰色のボックス内に示されているサービス ユーザー アプリケーションは、10.10.10.10:80 で実行されている HTTP サービスのコンシューマです。
Envoy 用の Stackdriver Logging と Monitoring のデモ アプリケーション(クリックして拡大)
Envoy 用の Stackdriver Logging と Monitoring のデモ アプリケーション(クリックして拡大)
  1. Traffic Director は、10.10.10.10:80 サービスのトラフィックを負荷分散し、このサービスに対して発行された各リクエストのアクセスログ情報を保存し、サービスのトレース情報を生成するように Envoy プロキシを構成します。
  2. コンシューマが 10.10.10.10 にリクエストを送信すると、サイドカー プロキシはリクエストを正しい宛先にルーティングします。
  3. サイドカー プロキシは、必要なテレメトリー情報も生成します。
    1. リクエストに関する追加情報を含むエントリをローカル ディスクのアクセスログに追加します。
    2. トレース エントリを生成し、OpenCensus Envoy トレースを使用して Trace に送信します。
  4. ロギング エージェントはこのデータを Cloud Logging API にエクスポートし、Cloud Logging インターフェースで使用できるようにします。

要件

その際は、以下の点を確認してください。

  1. Traffic Director の設定の準備で説明されているように、Traffic Director API が有効になっていて、他の前提条件が満たされている。
  2. Cloud Trace API が有効になっている。
  3. Compute Engine VM が使用するサービス アカウントに、Cloud Trace エージェントのロールが構成されている。詳細については、トレース アクセス制御のページをご覧ください。
  4. Compute Engine VM が使用するサービス アカウントに、ログ書き込みのロールが構成されている。詳細については、Logging アクセス制御のページをご覧ください。
  5. ファイアウォール ルールで、この設定の一部として構成した VM へのトラフィックを許可します。

デモサービスと Traffic Director の設定

このガイドでは、いくつかのシェル スクリプトを使用して、デモサービスの構成に必要な手順を実行します。スクリプトを確認して、スクリプトが実行する特定の手順を理解します。

  1. 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 テンプレートと、このテンプレートを使用するマネージド インスタンス グループを作成します。このスクリプトは、自動スケーリングを有効にせずに単一のインスタンスを起動します。

  2. Traffic Director を使用して 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 スクリプトは、VM で Compute Engine に Traffic Director を設定するで説明した構成と類似した、Traffic Director マネージド サービスに必要なパラメータを構成します。

  3. サイドカー プロキシを VM にインストールして構成し、HTTP サービスのコンシューマを実行する Compute Engine VM を起動します。次のコマンドで、変数 gcp_project_id を Trace 情報の送信先となるプロジェクト ID に置き換えます。これは通常、VM が属するものと同じプロジェクトです。

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh
    chmod 755 setup_demo_client.sh && ./setup_demo_client.sh my_gcp_project_id
    

    setup_demo_client.sh スクリプトは、Traffic Director を使用するように事前構成された Envoy プロキシを持つ Compute Engine VM を作成します。これは、VM で Compute Engine に Traffic Director を設定するで説明した構成と類似しています。

次の追加の構成設定により、トレースとロギングが有効になります。

  • TRAFFICDIRECTOR_ACCESS_LOG_PATHTRAFFICDIRECTOR_ENABLE_TRACING のブートストラップ ノードのメタデータ変数を使用すると、サイドカー プロキシの追加属性の構成で説明されているように、ロギングとトレースが有効になります。
  • OpenCensus を使用して Trace に対するトレース情報のエクスポートを有効にする静的ブートストラップ構成。

注: Envoy ランタイム構成を使用して、追加のトレース パラメータを追加および変更できます。

これらのスクリプトを実行した後、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 Console の Trace インターフェース([Trace] > [Trace list])に移動します。発行したリクエストに対応するトレース レコードが表示されます。

Trace の使用方法の詳細については、Trace のドキュメントをご覧ください。

Logging へのアクセスログ エクスポートの設定

この段階で Envoy は、実行されている VM のローカル ディスクにアクセスログ情報を記録しているはずです。これらのレコードを Logging にエクスポートするには、Logging エージェントをローカルにインストールする必要があります。これには、Logging エージェントのインストールと構成が必要です。

ロギング エージェントをインストールする

ロギング情報のエクスポート元の VM に Logging エージェントをインストールします。この構成例では、VM は td-observability-demo-vm です。

curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
sudo bash install-logging-agent.sh

Logging エージェントのインストールの詳細については、エージェントのインストールのガイドをご覧ください。

Logging エージェントの構成

Envoy のログは、非構造化テキストまたは構造化テキストとしてエクスポートできます。

Envoy のログを非構造化テキストとしてエクスポートする

このオプションでは、アクセスログのログレコードを生のテキストとして Cloud Logging にエクスポートします。アクセスログの各エントリは、単一のエントリとして Logging にエクスポートされます。この構成は、Logging エージェントの現在のバージョンに分散されたパーサーに依存しているため、インストールが簡単です。ただし、このオプションを使用して生のテキストのログエントリにフィルタリングや処理を行うことは困難になります。

  1. 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
    
  2. エージェントを再起動します。変更は、エージェントの起動時に有効になります。

    sudo service google-fluentd restart
    

Envoy ログを構造化形式でエクスポートする

  1. GitHub から Envoy アクセスログ パーサーをインストールします。

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. 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
    
  3. エージェントを再起動します。変更は、エージェントの起動時に有効になります。

    sudo service google-fluentd restart
    

Logging エージェントの構成の詳細については、エージェントの構成をご覧ください。

検証

  1. サイドカー プロキシ VM から、デモサービスへのリクエストを生成します。 これにより、新しいローカル ログレコードが作成されます。たとえば、curl 10.10.10.10 を実行できます。
  2. Cloud Console で [Logging] > [ログビューア] に移動します。プルダウン メニューで、[envoy-access] ログタイプを選択します。前に選択した構成タイプに応じて、最新のリクエストのログエントリが非構造化形式または構造化形式で表示されます。

トラブルシューティング

構成が完了しても使用可能なトレースまたはログエントリが表示されない場合は、次を確認します。

  1. Compute Engine VM のサービス アカウントには、前提条件で指定されている Trace および Logging の IAM 権限が割り当てられている必要があります。Trace IAM 権限の詳細については、アクセス制御をご覧ください。Logging 権限の詳細については、アクセス制御をご覧ください。
  2. ロギングについて: /var/log/google-fluentd/google-fluentd.log にエラーがないことを確認します。
  3. ロギングについて: リクエストが発行された際に、ローカルのアクセスログ ファイルに新しいエントリが表示されることを確認します。