# Using Statistical Techniques to Automatically Detect Game-Breaking Issues
SREcon25 Americas(2025年3月25日)でIan Neidel([[Netflix]] CDN 信頼性エンジニア)が発表したセッション。[[Open Connect]](Netflix のインハウス CDN)が提供するクラウドゲームサービスにおいて、セッションログと行動データを掛け合わせることでゲームを壊す例外を自動検知するパイプラインを紹介する。
## 背景・動機
CDN の信頼性は従来、レイテンシ・ビットレート・パケットロスで評価できた。しかしクラウドゲームでは、**配信の品質**だけでなく**配信されるコンテンツの品質**も同時に担保する必要がある。
発端となったインシデント: 最も人気のゲームが特定の国・ケースで約 3 週間にわたって破損状態にあったにもかかわらず、発見はフリーフォームのユーザーフィードバックを読み込んでから、エラーログを手動でさらう、という方法に頼っていた。問題の例外は 1 日数億行のログの中に「橙色の一本」として埋もれていた(図: p.8)。
> 課題: 1 日数百万件のエラーログがある状態で、セッションが壊れていることを示す強い指標がないとき、どう自動化するか。
## アプローチ: セッション挙動とログの交差
「破損しているかもしれないセッション」と「破損を引き起こしているかもしれないログ」を交差させることで、両者に対する信頼性を同時に獲得する。
### 破損セッションの指標
候補: ゲームプレイ時間・アンケートスコア・フリーフォームフィードバック・ビットレート・クリック率。これらはゲームプレイへの影響が及ぶ期間の前後で変化する(p.11 の時系列グラフで確認)。
**採用した指標: ゲームプレイ時間 < 120 秒**
セッション開始後 120 秒未満でゲームプレイが終了したセッションを「破損の可能性あり」とラベル付けする。
### ログクラスタリングパイプライン
過去 30 日のエラー/例外/警告ログ: 約 1 億件(固有: 約 2000 万件)
```
Selection & Filtering
⇓ (in SQL)
Preprocessing
⇓ (using regex_replace)
Vectorizing
⇓ (using SentenceTransformer)
Generating Clusters
⇓ (using DBSCAN)
~135 unique logs
(with some in 26 log clusters)
```
![[wiki/sources/_attachments/sre25amer_slides-neidel/page-014-clustering-pipeline.png]]
**選択・絞り込み**: `exception`・`error`・`warning` を含むプログラム出力のみに絞り、量は多いが無意味なログは除外する。
**前処理**: 数値・IP アドレス・URL を `<NUM>` などのプレースホルダで置換し、まず先頭行のみに限定する。これにより `Transport receive task exception (id 1): System.Net.WebSockets.WebSocketException (0x80000005): Unable to connect to the remote server` のような長いスタックトレースを `Transport receive task exception (id <NUM>): System.Net.WebSockets.WebSocketException (<NUM>): Unable to connect to the remote server` へ正規化する(p.16)。
**ベクトル化**: SentenceTransformer の `all-MiniLM-L6-v2` モデルでログテキストを密なベクトルへ変換し、意味的な類似性を捉える(p.17)。処理は 320ms で完了。
**クラスタリング**: DBSCAN でクラスタを生成し、t-SNE で次元削減して可視化する。クラスタ例:
- `Error: Locale with code th not found` / `fi not found` / `id not found` → 同一クラスタ
- `NullReferenceException on Gamepad/Right/…` / `…/Select/…` / `…/Up/…` → 同一クラスタ
![[wiki/sources/_attachments/sre25amer_slides-neidel/page-018-dbscan-clusters.png]]
**結果**: 2000 万件超の固有ログ → 約 135 のユニークログ(一部は 26 のクラスタ内)へ圧縮。
![[wiki/sources/_attachments/sre25amer_slides-neidel/page-019-results.png]]
### ログ影響度の評価: 混同行列 × F1
各ログクラスタとセッション破損指標の相関を混同行列で評価する。
**縦軸**: セッションが与えられたログを持つか否か
**横軸**: セッションが「破損の可能性あり(ゲームプレイ < 120 秒)」か否か
| 指標 | 定義 |
|---|---|
| 適合率(Precision) | TP / (TP+FP): あるログを持つセッションのうち何%が破損か |
| 再現率(Recall) | TP / (TP+FN): 破損セッションのうち何%がそのログを持つか |
| F1 スコア | 上記の調和平均 |
**破損例外(BREAKING EXCEPTION)の例**:
| | 破損 | 非破損 |
|---|---|---|
| ログあり | 1000 (TP) | 200 (FP) |
| ログなし | 500 (FN) | 8300 (TN) |
→ 適合率 83%, 再現率 67%, F1 74%
![[wiki/sources/_attachments/sre25amer_slides-neidel/page-022-confusion-breaking.png]]
**非破損例外(NON-BREAKING EXCEPTION)の例**:
| | 破損 | 非破損 |
|---|---|---|
| ログあり | 300 (TP) | 2700 (FP) |
| ログなし | 1200 (FN) | 5800 (TN) |
→ 適合率 10%, 再現率 20%, F1 13%
## インシデント再現
当初のインシデント(`NetflixException: NGP Profiles response typename unknown`)を遡及適用すると、F1 スコアが突出して高い(F1 0.6525, 適合率 0.5120, 再現率 0.604)ログクラスタとして明確に浮き上がる。ログを「F1 別」「適合率別」でランキングすると、他のログと大きく差がついた状態で問題のログが先頭に来る(p.25, p.26)。
![[wiki/sources/_attachments/sre25amer_slides-neidel/page-025-incident-f1.png]]
## 現在の運用と今後
### 現在(Now)
ゲームごとに最大 F1 スコアを時系列プロットし、スコアが急上昇した時点で自動的にインシデントとしてフラグ付けする(p.27〜p.29 の "Max F1 By Game" グラフ)。グラフの急峰はインシデント(`inc`)と一致する。
### 今後(Future)
- アラーティングプロセスの高速化
- 「時間対破棄(time to abort)」メトリクスを用いてゲームプレイ途中の破損をより早く検知
- パートナーとの連携によるクリーナーなシグナルの取得、テスト強化
## テイクアウェイ
1. 新しい領域は一見難解に見える課題をもたらす
2. 統計手法は大量・高難易度の問題を扱いやすくする
3. 統計ツール・概念群はワークフローへ容易に統合できる
## 評価・位置づけ
- セッション破損の指標として行動シグナル(ゲームプレイ時間)を採用した点が特徴的。運用テレメトリと行動ログの交差というアプローチは、[[異常検知]]の「シグナル源の多様化」の実践例。
- DBSCAN + SentenceTransformer という産業実装で 2000 万→135 ログへの圧縮は[[ログクラスタリング]]の実用効果を示す。
- ゲームプレイ時間という弱いラベルを「可能性あり」として扱い、厳密なラベル付けを要求しない点は現実的な工夫。
## 関連
- エンティティ: [[Ian Neidel]] / [[Netflix]] / [[Open Connect]]
- 概念: [[異常検知]] / [[ログクラスタリング]] / [[ログ解析]] / [[密度ベースクラスタリング]]
- 関連 MOC: [[AIOps - Log Analysis - MOC]]
## 出典
- 原資料: `.raw/slides/sre25amer_slides-neidel/sre25amer_slides-neidel.pdf`
- 公式ページ: https://www.usenix.org/conference/srecon25americas/presentation/neidel
- 登壇者: Ian Neidel (
[email protected])、発表日 2025-03-25