- Web Engineer
- アウトバウンド営業
- Webエンジニア(経験者)
- Other occupations (18)
- Development
- Business
今日からできる!Cloud Runサービスの運用のコツ
こんにちは、最近、個人開発用のMacBookPro(M4)を新調し、バッテリーの持ちの良さに感動した "こやまん" です。
今回は、Google Cloudの運用で役立つロギング、トレース、モニタリングアラートについて解説します。
ユーザー体験を左右する「レイテンシ」とは?速さが価値になる
ウェブサービスを運用する上で、特に注目したいのがリクエストのレイテンシです。
もしレイテンシが遅いと、せっかく良いサービスでもユーザーは離れてしまいます。
時は金なりとも言いますね。
レイテンシのざっくりした分類は次の通りです。
レイテンシは複数のステップで発生します。
例えば、「ユーザーの操作」から始まり、「ネットワーク遅延(リクエスト送信時)」が続きます。
その後、「Cloud Runアプリでの処理」を経て、「ネットワーク遅延(レスポンス受信時)」、最後に「ブラウザでの描画やJavaScript実行」という流れです。
ユーザーの操作
↓
ネットワーク遅延(リクエスト送信時)
↓
Cloud Runアプリでの処理
↓
ネットワーク遅延(レスポンス受信時)
↓
ブラウザでの描画やJavaScript実行
このうちCloud Runアプリの処理は、もっとも直接的にサービス全体へ影響します。
さらに、ネットワーク遅延もGoogle Cloudの設計次第で変わります。
Cloud RunのURLに対してcurlコマンドを使うと、「ユーザーの操作」と「ブラウザの描画」を除いたリクエスト送信からレスポンス受信までのレイテンシを計測できます。
curl -o /dev/null -s -w "%{time_total}\n" 【Cloud Run の URL】
ちなみに、Cloud Runはリージョン選択も可能です。利用者に近いリージョンを選べば、ネットワーク遅延をより抑えることができるでしょう。
今回はcurlコマンドでデモコンテナに複数回リクエストを送り、応答速度を比較しました。
その結果、東京リージョンでは69 〜 110ms、ベルギーリージョンでは291 〜 518ms となりました。
Cloud Loggingで把握!実際のレスポンス速度
このように、レイテンシはcurlで計測できますが、サービス運用では、Cloud Run 自体のレイテンシを確認できるCloud Loggingも強力なツールです。
リクエストごとにレイテンシを記録できるため、運用現場では高い確率で活用されます。
実際に、以下のクエリでリクエスト単位のログを抽出できます。
resource.type="cloud_run_revision"
logName="projects/【Google CLoudのプロジェクト名】/logs/run.googleapis.com%2Frequests"
上記の画像の赤枠内がリクエストに対するレイテンシです。
デモコンテナ(hello)をデプロイした Cloud Run の場合、2ms ~ 10ms のレイテンシとなっています。
一方で、Rails8で簡単な文字を表示する検証アプリをデプロイした Cloud Run の場合、8ms ~ 166msとなりました。
ロギングではリクエストに対する Cloud Run の全体のレイテンシは分かりますが、個々の処理のどこに時間がかかったかまでは見えにくいです。
Cloud Traceで徹底分析!ボトルネックの正体を暴く
アプリケーションがリクエストを処理するのにどのくらい時間がかかるか?
アプリケーションがリクエストを処理するのになぜそんなに時間がかかるのか?
一部のリクエストが他のリクエストより時間がかかるのはなぜか?
アプリケーションへのリクエストの全体的なレイテンシは?
アプリケーションのレイテンシは時間とともに増加しているのか、減少しているのか?
アプリケーションのレイテンシを小さくするにはどうすればよいか?
アプリケーションにどのような依存関係があるか?
Cloud Run で各処理にどれだけ時間がかかったかを確認するのに便利なのが Cloud Trace です。
試しに、検証用のアプリケーションをデプロイして、動かしてみたいと思います。
まず、Cloud TraceにCloud Runのトレース情報を出力する準備をしましょう。
Google Cloudコンソールで次の設定を行います。
- Cloud Trace API を有効にする
- Cloud Run のサービスアカウントに「Cloud Trace エージェント」のロールを付与する
その後、Railsアプリケーションの準備に進みます。
今回の記事では、以下のバージョンとデータベースを使用しています。
- Rails 8.0.2
- Ruby 3.4.4
- DB : PostgreSQL
Gemfileには、以下の3つのGemを追加します。
# Gemfile (注:他の行は省略しています)
gem 'opentelemetry-sdk'
gem 'opentelemetry-instrumentation-all'
gem 'opentelemetry-exporter-google_cloud_trace'
RailsやActiveRecordなどの全自動トレースを有効化し、OpenTelemetry経由で収集したトレースデータをバッチ処理でGoogle Cloud Traceに送信する初期化処理を実装します。
本来であれば、初期化処理でサービス名も指定することで、Cloud Traceに出力できると思うのですが、2025年6月時点ではうまく動作しなかったため省略しています。
# OpenTelemetry SDKの主要機能
require "opentelemetry/sdk"
# OpenTelemetryのすべてのライブラリやフレームワーク用のトレーシングコードを有効化
require "opentelemetry/instrumentation/all"
# Google Cloud Traceへのデータ送信用エクスポーター
require "opentelemetry/exporter/google_cloud_trace"
OpenTelemetry::SDK.configure do |c|
c.add_span_processor(
# トレースデータを個別に送信せず一定数、もしくは一定の時間間隔で送信
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
# OpenTelemetryが収集したトレースデータをGoogle Cloud Traceに送信
OpenTelemetry::Exporter::GoogleCloudTrace::SpanExporter.new
)
)
# OpenTelemetryの全てのライブラリやフレームワーク用のトレーシングコードを有効化
c.use_all()
end
Cloud Run の URLにアクセスした際に、homeコントローラーのindexアクションが呼び出されるようにします。
# config/routes.rb
Rails.application.routes.draw do
root "home#index"
get "up" => "rails/health#show", as: :rails_health_check
end
特定のブロックの処理時間の測定を行う場合は、カスタムスパンという機能を利用します。
indexアクション内にカスタムスパンを設定し、Cloud Traceで3秒のカスタムスパンが表示されるようにします。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/52316
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
Wantedly:https://www.wantedly.com/companies/rightcode
コーポレート:https://rightcode.co.jp/