※CEDEC2025 のセッションの中でご紹介したデモの解説を中心にまとめています。
※あくまで個人の記事になりますので、その点はご了承ください。
開発段階からちゃんとオブザーバビリティできてますか?
ゲームの本番リリースまでにサーバエンジニアはサーバプログラムの開発、システムアーキテクチャの設計、リリースに向けた監視設定、色々やることがあると思います。
その中でも負荷試験はリリース前の集大成として実施されるかと思います。開発の単体テストの段階から意識できていれば、負荷試験の時のパフォーマンスやエラーの確認は怖くない!
というわけで、実際に負荷をかけるとどんなものが見えるのか、何を見れば良いのか、確認するためのデモを作りました。
セッションで行ったデモについて
今回の構成は下記のとおりです。
Fargate : k6が動く負荷かけサーバ。コマンドで指定した数のタスクが起動し並列実行される
EC2 : 簡易的なゲームサーバ
S3 : k6の試験実行結果を保存
実行のフォローとしては下記になります
①ローカル端末から負荷試験コマンドを実行
②Fargateでタスクが起動し対象APIに対して負荷試験開始
③S3に結果が保存(毎回ディレクトリが分けられる)
④負荷試験が完了したらFargateのタスクは終了する
負荷試験を実行するときのコマンドは以下です。
# 基本的な負荷試験
./scripts/main/run-fargate-load-test-fixed.sh http://YOUR_GAME_SERVER_IP:3000 demo 5 1m 1
# パラメータ説明:
# [対象URL] [k6スクリプト] [仮想ユーザー数] [実行時間] [並列タスク数]
コマンドを実行すると、下記の様な実行結果を見ることができます。
ちなみにコード類は全てAmazon Q Developer CLI(Claude Sonnet4)に書いてもらいました。
AI便利ですね。
New Relic と連携すると何が嬉しいの?
Amazon CloudWatch も複数のサービスがあり用途に合わせて柔軟に組み合わせて利用することが可能です。
ではなぜ New Relic と連携する必要があるのでしょうか?
オブザーバビリティは、システムの状態を定義する様々な指標に関するデータを収集しレポートする事で、システムの全容把握ができるため、問題の予防だけではなく、問題発生時においても迅速な対応や改善に取り組むことができる事です。
そのデータ収集の方法の一つがNew Relicです。
New Relic を選択する理由の一つとしてAPMがありますが、ゲームでよく使われるPHPを含め、多くの言語に対応しエージェントをインストールするだけで簡単にアプリケーションのパフォーマンスを確認することが可能です。
またNew Relic のモバイルエージェントはなんと Unity と Unreal Engine に対応しています!
モバイルエージェントなので、クライアントとして利用している場合はエージェントをインストールすることで、フロントエンドからバックエンドまで一気通貫でユーザのプレイ状況を把握することが可能です。
これらをダッシュボードでまとめておけば、フロントエンド・バックエンド関係なくワンチームとしてゲームの状況を把握することが可能になります。
New Relic と連携するために
セッションのデモ内では New Relic 連携までは実施していませんでしたが、実施するための手順を以下にまとめておきたいと思います。
前項の通りシステムの状態を把握することは重要です。それを負荷試験に当てはめたものが以下のような図になります
インフラ
CloudWatch のメトリクスをNew Relicに連携する方法は「Metric Stream」と「API Polling」の2種類あります。
New Relicとしての推奨は「Metric Stream」ですが用途に合わせて選択してください
CloudWatch Logs とログ転送をまとめて設定できるので便利です。
アプリケーションサーバ
アプリケーションに対しては、APMを導入することでパフォーマンス劣化やエラーの原因特定などに活用することが可能になります。
今回のデモコードは Node.js なので Node.js Agent をインストールすることでNew Relic上でパフォーマンスを見ることが可能です。
手順は以下です。公式ドキュメントはこちら。
フロントエンド
一番監視が分断しがちなフロントエンドは、モバイルゲームでよく使われる Unity エージェントのインストールすることでパフォーマンスやエラー状況を確認することが可能です。
最近増えてきているモバイルの Unreal Engine もエージェントをインストールする事でデータを確認することが可能です。
モバイルエージェントはログも収集可能です
モバイルエージェントをインストールする事で集めたデータの活用例としては、下記のBlogもご参照ください。
まとめ
Amazon CloudWatch も活用しつつユーザ体験を把握し迅速に対応する事で、ユーザがストレスなく遊べる様最適化された環境作りを是非開発の段階から取り組んでください!
Lets's Shift-Left Observability!
参考情報
AWS 負荷分散テストソリューション
今回負荷試験をk6で行う都合上採用しませんでしたが、AWS には負荷試験を行うためのソリューションがあります。
オープンソースのテスト自動化フレームワーク Taurus を用いた、アプリケーションのパフォーマンステスト環境を自動生成するソリューションです。ゲームでよく使う JMater を選択することが可能なので、これまでの JMater スクリプトを流用したいけど環境構築が面倒な時にご活用ください