Google Cloud Platform

Stackdriver Trace : 複数プロジェクトのスパンやリクエスト ログを 1 つのビューで視覚化

Google Cloud Platform(GCP)は開発者や運用担当者に対し、プロジェクトのアプリケーションごとに詳細な課金情報やリソース アクセス管理を提供しています。アプリケーション サービスをプロジェクトごとに切り分けることはセキュリティやコストの面では重要ですが、そうすることでサービス間にまたがる問題のデバッグがより困難になることもあります。

このほど、レイテンシ データをアプリケーションから収集する Stackdriver Trace において、複数のプロジェクトにまたがるリクエストのトレースとログを 1 つのウォーターフォール型チャートとして視覚化できるようになりました。これにより、異なるプロジェクトのサービス間でどのようにリクエストが伝わるのかを把握でき、全スタックの中でパフォーマンス低下の原因がどこにあるのかを特定しやすくなります。

複数プロジェクトのスパンやログ エントリを表示するには、こちらのドキュメントに従ってください。また、こちらのドキュメントでも解説されているとおり、プロジェクトは単一組織内のものでなくてはなりません。そこで、組織を作成し、そこに既存のプロジェクトを移行してください。

1 つの組織内にプロジェクトをまとめると、複数のプロジェクトのトレースを表示できるようになります。まず、GCP Console 内にある関連プロジェクトから 1 つを選び、トレース リストのページに移動してトレースを選択してください。すると、“cloudtrace.traces.get” の権限を持つ組織内の全プロジェクトのスパンが表示されます。右側のスパン詳細パネルにある “Project” のラベルは、選択されたスパンがどのプロジェクトのものかを示しています。

image1nhjo.max-700x700.png

また、トレースの一部となっている全プロジェクトからのリクエストに関するログ エントリの表示も可能です。これには関連するプロジェクト側に “logging.logEntries.list” の権限が必要で、ログを Stackdriver Logging に書き込む際は、“projects/[PROJECT-ID]/traces/[TRACE-ID]” というフォーマットで LogEntry オブジェクトの trace フィールドを設定する必要があります。LogEntry の span_id フィールドを、16 文字の 16 進数でエンコードされたスパン ID として設定し、ログを特定のトレース スパンと関連づけることも可能です。詳細はこちらのドキュメントを参照してください。

Fluentd を介して Google Kubernetes Engine もしくは Stackdriver Logging エージェントを利用する場合は、“logging.googleapis.com/trace” や “logging.googleapis.com/span_id” というキーを使って構造化ログを書き込むことで、LogEntry オブジェクトの trace や span_id フィールドを設定できます。詳細はこちらのドキュメントを参照してください。

トレース スパンに関連づけられたログ エントリを表示するには、“Show logs” をクリックしてください。

image22Bcopyhksx.max-1100x1100.png

トレースとログの自動的な関連づけ

トレースとログ エントリの自動的な関連づけをサポートしている GCP の言語および環境は以下のとおりです。

  • Node.js : Stackdriver Trace Node.js SDK を使用し、Winston か Bunyan でログを書き込む場合は、@google-cloud/logging-bunyan または @google-cloud/logging-winston のパッケージを利用できます。これにより、リクエストがトレース用にサンプリングされ、トレース コンテキストが利用可能な場合は、自動的にログ エントリと trace フィールドのアノテーションが行われます。





以上で、複数のプロジェクトでアプリケーションを使用しても、スタック内でパフォーマンス低下の原因が特定できるようになりました。Stackdriver Trace の詳細はこちらのドキュメントをご覧ください。

* この投稿は米国時間 4 月 6 日、Product Manager の Morgan McLean、Software Engineer の John Bryan、Software Engineer の Dave Raffensberger によって投稿されたもの(投稿はこちら)の抄訳です。

- By Morgan McLean, Product Manager, John Bryan, Software Engineer, and Dave Raffensberger, Software Engineer