はじめに
この記事はNew Relic Advent Calender 2023 シリーズ1の16日目です。
ゲームやXRのサービスでは、マルチプレイ同期の実装を簡単にするSaaS製品のPhoton Fusionがよく使われます。
実際の運用ではプレイヤーのCCU(同時接続数)などを監視し、適切に設定変更をする必要があります。
そこで今回は、お手軽にSynthetic Monitoringを使って、PhotonFusionのCCU数を取得してダッシュボード化しようと思います。
使用するもの
事前準備
- Photonの管理画面から、対象アプリIDと、アナリティクスAPI用のトークンを取得してください。
- New RelicのSynthetic MonitoringからScripted API モニターを新規作成し、60秒間隔に設定してください。また、Photon側で設定しているリージョンと揃えて設定してください。
スクリプト
PhotonのアナリティクスAPIは4分ほどの遅延があるようなので、4分前〜3分前の60秒間を指定してAPIを叩いています。
var assert = require('assert');
var options = {
url: "https://counter.photonengine.com/Counter/api/data/app/appID/jp/ccu?start=-300s&end=-240",
headers: {
'accept': 'text/plain',
'Authorization': 'hogehohe' //Photonダッシュボードで発行できるAPIトークン
}
};
$http.get(options,
// Callback
function (err, response, body) {
if (err) {
console.error('Request failed:', err);
assert.fail('Request failed');
return;
}
console.log(response.statusCode + " status code");
assert.equal(response.statusCode, 200, 'Expected a 200 OK response');
// Assuming the body returns a plain text value representing the CCU
var ccu = parseInt(body, 10);
if (isNaN(ccu)) {
console.error('Failed to parse CCU from response:', body);
assert.fail('Invalid CCU value');
return;
}
// Send the CCU value to New Relic Insights as a custom event
$util.insights.set('CCUValue', ccu);
console.log("CCU : " + ccu)
}
);
ダッシュボード
下記のNRQLを入力してください。
SELECT max (custom.CCUValue) FROM SyntheticCheck SINCE 1 hour ago TIMESERIES
終わりに
今回はSynthetic Monitoringで簡易的にCCUをメトリクス化してみましたが、よりカスタムするにはNew Relic Flexに移行したほうが良さそうです。
また、Photonから提供されているアナリティクスAPIを用いましたが、これだけだとルームごとの情報が分かりません。
Fusionのクライアント側のAPI(SessionInfoなど)を叩かないと取得できないので、今後はCCU監視用のBotをUnityで作成し、NewRelicと連携したいと思います。
(Exit Gamesさん、ルームごとのアナリティクスAPI公開してくれてもいいんですよ…!)