LoginSignup
2
1

More than 5 years have passed since last update.

Stackdriver Traceを使ってGAE/FEで動くSpringbootアプリをトレースする

Posted at

はじめに

Stackdriver Trace を使ってGAE/FEで動くSpringbootのトレースを試してみたのでまとめます。

ところでStackdriver Traceってなんだっけ?

Stackdriver Trace は、主に Google Cloud Platform 向けの 分散トレース システム です。
アプリからレイテンシデータを収集し、図表にしてくれます

図表の一例をあげると次のような感じ。
image.png

これを使うことでパフォーマンスのボトルネックになっている箇所の確認や、
アプリ更新前後のパフォーマンス変化の確認などが容易になります。

導入する意義や用語についてもう少し詳しくは Stackdriver Traceの公式 に書いてあります。

Stackdriver Traceを使う

Stackdriver Traceを使うためには、計測対象がレイテンシを送信する必要があります。
逆に言うと取り合えずこれだけやってあげればOKです。

タイトルに記載の構成の場合、Spring Cloud GCPSpring Cloud Sleuth ほかをpomに追記すれば
自動でStackdriver Trace宛にレイテンシを送信してくれます。 (これになかなか気付かなかった・・)

この具体的なセットアップ手順について参考になるのは こちらのチュートリアル です。

Spring Cloud Sleuth のリファレンスはこちら。

Spring Cloud Sleuthのオプション

オプションはこちら に記載されています。

主なところを抜粋すると次の通り。

spring.cloud.gcp.trace.enabled=true                     # トレースするか否か
spring.sleuth.sampler.probability=1                     # リクエストの何割をトレースするか (0.0~1.0)
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)  # トレースから除外するURL

試してみる

そんなわけでチュートリアルをお手本に試してみました。
前提は次のような感じ。

試してみる前提

  • レイテンシ収集対象はGAE/FE上のSpringbootのWebアプリ。
  • レイテンシ収集は本番稼働している時のみ行います。
  • 収集するか否かはactive profileで切り替えます。 本番profileを prod にしました。

事前準備

まず下記が無ければ用意します。

Cloud SDKは 使用するアカウントとプロジェクトを指定してログイン しておきます。
また適当なSpringbootサンプルソースは上記リンク先にあげました。

Stackdriver Trace APIを有効にする

ウェブUIの APIとサービス でStackdriver Trace APIを探し、無効であれば有効にします。
image.png

適当なSpringbootサンプルソースを用意する

適当なサンプルを GitHubにあげました
以下サンプルの補足です。

サンプル画面

ソースは こちらです
ダミーの待ち時間を入れている他は特に何もしていません。

pom.xml

ソースは こちらです
下記コマンドで雛形を作り、spring-cloud-gcp-starter-trace を追加しています。

> curl https://start.spring.io/starter.tgz -d packaging=jar -d dependencies=web,cloud-gcp --output springboot-trace.tgz

またGAEにデプロイするため appengine-maven-plugin も追加しています。

application.yml

ローカルはトレースせず、本番はすべてトレースするよう指定しました。

ソースは次の通り。
application.yml
application-prod.yml

app.yaml

app.yaml では特別な対応はしていません。

素のアプリと比較して修正した箇所まとめ

トレース対応で手を入れた箇所は次の二箇所です。

ファイル 補足
pom.xml 依存関係追記
application(-prod).yml トレース向けオプションを指定

デプロイ

appengine-maven-plugin を入れたので次のコマンドでデプロイします。

> mvn appengine:deploy

動作テスト

デプロイが終わったら該当のURLを適当に叩き、少し待ってから
Stackdriverトレースのトレースタブを見てみると次のような感じに。

image.png

またレイテンシのサマリーも出てきます。
image.png

APIのレイテンシはわかった。 内訳をもっと細かく見たい。

最初のテストではAPI全体のレイテンシが見れました。
今度はAPI内の任意の範囲のレイテンシを確認してみます。

これは brave.Span で任意の範囲を指定することで出来ます。
サンプルソースは こちら 通り。

トレース結果は次の通り。
image.png

image.png

上記のほか アノテーションでも指定 出来るっぽいけど、まだいまいちわかってない・・

複数サービスを串刺しでトレースしたい

分散トレーシングが本来の力を発揮するのはこの用途です。
リファレンスのここ に従い RestTemplate のbeanを作成して他サービスの呼出に使用します。
サンプルソースは こちらこちら

本サンプルでは /c から /c2 を呼び出しています。
トレース結果は次の通り。
image.png

以上です。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1