はじめに
こんにちは、Datadog Japan で Sales Engineer をしている AoTo です。
Google Cloud で好きなサービスは、圧倒的に Cloud Run です!
この投稿は AoTo Advent Calendar 2024 16日目の記事です。
皆さんは Cloud Run の監視、きちんと行えているでしょうか?
Cloud Run は Google Cloud のマネージドサービスであり、デフォルトで Cloud Logging, Cloud Monitoring, Cloud Trace と統合されています。
Cloud Run servivces を利用すると、自動的に Cloud Trace へトレースが記録されることはご存知でしょうか?
本ブログでは Cloud Run services におけるトレースの仕組みと利用方法に触れながら、Cloud Run service にデプロイされるアプリケーションのトレースについて解説します🐶
メトリクス・ログ監視は以下のブログをご参照ください!
Cloud Trace とのネイティブ統合
Cloud Run services はサービスへの受信リクエストを自動的にトレースしスパンデータを Cloud Trace に連携します。この時、標準の W3C Trace Context に準拠した traceparent
ヘッダーを Cloud Run services へのリクエストに自動的に入力します。traceparent
ヘッダーには以下の形式で version
, trace-id
, parent-id
, trace-flag
が入力されます。
traceparent: {version:00}-{trace-id:^[0-9a-f]{32}$}-{parent-id:^[0-9a-f]{16}$}-{trace-flag:01}
W3C Trace Context の詳細な解説は『分散トレースを理解する! Trace Context 解体新書』をご参照ください。
トレースを Cloud Trace で可視化するためには、32bit で表記される一意の trace-id
を利用します。この traceparent
ヘッダーを適切に伝搬することで、後述するアプリケーションのトレースと接続して表示できます。
Datadog をはじめとする 3rd Party のオブザーバビリティプラットフォームへこの自動トレースを送信することはできません。3rd Party プラットフォームで Cloud Run services の分散トレースを行う場合、この自動生成されるルートスパンは利用できません。
ただし、traceparent
ヘッダーを伝搬できる計装ライブラリを利用している場合は、同一の trace-id
を利用してアプリケーションをトレースできるため、Cloud Trace と 3rd Party プラットフォーム間で相互に検索可能です。
アプリケーションのトレース
追加で Cloud Run serices アプリケーションを計装し、サービスへのリクエスト時に自動的に生成されるルートスパンと接続できます。この時、アプリケーションの計測方法を利用して、各言語のアプリケーションからスパンを作成し Cloud Trace に送信できます。
Google Cloud が推奨するアプリケーションの計測方法は、OpenTelemetry による W3C 準拠の計装です。その他にも Zipkin, Spring Boot による計装が紹介されていますが、Cloud Run の自動生成スパンが伝搬する traceparent
ヘッダーを受け取ることができないため、個人的には OpenTelemetry の利用を推奨します。
OpenTelemetry で計装する際、生成されたスパンデータは OpenTelemetry Collector により Cloud Trace に転送します。OpenTelemetry Collector は Cloud Run のマルチコンテナ(サイドカー)機能を利用してコンテナとしてデプロイします。
具体的な方法は以下のブログをご参照ください。
OpenTelemetry Collector をデプロイするオプションとして、Google Cloud 公式は observIQ の BindPlane を紹介しています。
これらの利用方法は以下のブログをご参照ください。BindPlane Agent は OpenTelemetry Collector のディストリビューションのため、同様にサイドカーとしてデプロイできます。
どちらにも共通して Cloud Trace にトレース(スパン)データを転送するために、Google Cloud Exporeter を構成します。Google Cloud Exporeter はトレースデータの他にも、メトリクスデータを Cloud Monitoring に、ログデータを Cloud Logging に転送できるため、Cloud Run にデプロイする統合監視エージェントとしても利用できます。
おわりに
Cloud Run service で利用できるトレース監視の方式を、Cloud Trace を中心に図解を交えながら解説しました。Cloud Trace を利用することでのみ、トレースのルートスパンとなるリクエストスパンと共にアプリケーションの追加スパンを確認できる点も注意が必要です。
トレース監視まで行うことができれば、より詳細なアプリケーションのパフォーマンスを継続的に監視できます。是非 Cloud Run を利用する際はトレース監視の設計まで検討し、サービスの信頼性向上にお役立てください🐶