Cloud Run おすすめ設定を調べてみました

2024/09/30に公開されました。
2024/09/30に更新されました。

Cloud Run おすすめ設定を調べてみました


author: ryutah

はじめに

こんにちは、技術推進グループのグループマネージャryutahです。

Cloud Runおすすめ設定を調べてみました。

Cloud Logging について

Cloud Logging のドキュメント

  • Cloud Loggingは、ストレージ、検索、分析、モニタリングをサポートするリアルタイムのログ管理システム。

Cloud Logingにログを設定したことにアプリケーション上にで独自のログを仕組む事が可能です。よくある例としては、Error,Warningが出た際に詳細のログを仕込むなどでエラーの特定が可能です。

ログバケットには _Required,_Defaultというバケットが自動的に作成されます。 log

独自にバケットの作成も可能でユーザー定義のログバケットというものもあります。 注意点として、Defaultのログバケットは保存期間が30日であることに気をつけてください。また、ログの保存期間が30日以上の場合は課金されるのでアプリケーションに応じて適宜、設定行います。

また、Cloud Logingには構造化ログとテキストベースのログがあります。 構造化ログは、特定のJSONパスを検索するクエリを作成し、ログペイロード内の特定のフィールドをインデックスに登録できます。これにより、複雑な検索や分析が容易。 一方、テキストログは、ログペイロードが文字列としてフォーマットされ、textPayloadフィールドに格納されるため、機械による解析が困難です。

下記、例に上げている通り構造化ログの場合はキーと値が設定できることにより、検索が容易に行えます。

構造化ログの場合は以下の様な形で出力されます。 ※抜粋しています。

{
  "jsonPayload": {
    "msg": "test",
    "prm": "1"
  }
}

テキストログの場合は以下の様な形で出力されます。 ※抜粋しています。

{
  "textPayload": "test"
}

Goの場合の構造化ロギングは以下の様な例です。

import (
    "log/slog"
    "os"
)

func main() {
    logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
        Level: slog.LevelInfo,
    }))
    logger.Info("test") // {"timestamp":"2024-09-17T01:51:02.693005Z","level":"INFO","msg":"test"}
}

Cloud Trace について

  • アプリケーションからレイテンシ データを収集し、本番環境のパフォーマンスのボトルネックを検出する分散トレースシステム

Cloud Traceはリクエスト毎にどのようなパラメータが送られたかを確認が可能です。

log

Goの場合のCloud Traceの実装例です。

Error Reporting について

  • Google Cloud上で動作するアプリケーションで発生したエラーを自動的に収集、分析、可視化するサービス

Error Reportingは根本原因が同じであると考えられるエラーをグループ化します。

その他にエラーのステータスをオープン/確認済み/解決済み/ミュートの4種類で管理できます。

また、通知も Slack 等の選択可能なのですぐに導入が可能だと思われます。

Goの場合のError Reporting 実装例

Cloud Profiler について

  • Google Cloudプロファイリングツール

どの関数が多くCPU,メモリが使用されているかが一目でわかります。 Cloud Traceなどに比べて導入が簡易なためすぐにアプリケーションの追加が可能です。

※プロファイルデータは30日間しか保存されないです。

Cloud Runに対応していると公式では記載がないが使用ができる log

Goのコードだと以下のように記述でCloud Profilerの設定が可能です。 実際の最適化手法はGoogle Cloudが公開しています。

パフォーマンス改善でよく出てくる言葉として推測するな、計測せよがあるのですが、そのルールに則ってパフォーマンス改善が行えるためのプロダクトが存在しているのは嬉しいです。

func main() {

	cfg := profiler.Config{
		Service:   "SERVICE_NAME",
		ProjectID: "PROJECT_ID",
	}

  if err := profiler.Start(cfg); err != nil {
		panic(err)
	}
  ``
  ``
}

まとめ

  • Error Reportingがエラーをラッピングされる機能が物凄く便利
  • 他のサービスだと重複して表示されて見辛いため、よさそう
  • Cloud Traceはボトルネック箇所の特定に便利なので入れるべき
    • SQLが遅いのか切り分けができるので心理的に安心できそう
  • Cloud Profilerは導入が簡単なため理由がない限り導入した方がいい

※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。

※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。