多くの問題は pwsh scripts\stop.ps1 → pwsh scripts\start.ps1 → python scripts\smoke.py の 3 連打で解消します。それでも直らない場合のみ、本章の個別項目に進んでください。
1切り分けの基本フロー
「フロント表示がおかしい」と感じたら、まず次の 3 段階で切り分けます。
-
smoke.py で全サービスの応答を確認
powershell
python scripts\smoke.py python scripts\smoke.py --direct既定モードと
--directモードの結果を比べて、Gateway 経由のみ FAIL か、サービス本体も FAIL かを判定します。 -
status.ps1 でプロセスの生死を確認
powershell
pwsh scripts\status.ps1PID は実在するのに smoke が FAIL = ポート bind 失敗や起動途中のクラッシュ。両方 not running なら起動失敗(§2 へ)。
-
logs/<service>.err.log を読む
FAIL になっているサービスの
err.log末尾に、ほぼ確実に原因の Python 例外 / .NET 例外 / バインドエラーが残っています。
2サービスが起動しない
2.1 ポート衝突 (address already in use)
start.ps1 出力や err.log に address already in use が出るパターン。前回の stop.ps1 が失敗してプロセスが残っているケースが大半です。
pwsh scripts\kill_by_port.ps1 -Port 8080
該当ポートを掴んでいる PID を強制終了します。Gateway (8080) / replay_parser (12345) / log_monitor (8000) / map (8001) / prepare_upload (8002) / suite_core (8003) のうち、衝突しているポートを指定してください。
このポートはハードコードのため、他アプリと衝突したら相手側を止めるしかありません。.NET 側のコード修正(Program.cs)が必要なため、緊急回避手段として留めてください。
2.2 ヘルスチェックでタイムアウト
- Python サービス(log_monitor / map / prepare_upload / suite_core):
logs/<svc>.err.logにModuleNotFoundError→../venvへのpip install -r services/requirements.txt漏れ - .NET サービス(replay_parser):
It was not possible to find any compatible framework version→ .NET 9 SDK が未インストール - Suite Core が config 読み込みエラー:
~/.fortnite-suite/config.jsonが JSON として壊れている。assets/config.template.jsonから復元するか、空{}にして起動
3サービスは上がっているが応答しない / 503
フロントから 503 が頻発する場合、まず Gateway の /health でどの上流が落ちているかを特定します。
curl http://localhost:8080/health
応答 JSON 内の upstreams に各サービスの reachable 状況が出ます。落ちているサービスの logs/<svc>.log を確認し、必要なら全停止 → 全起動で復旧させてください。
/health と /api/health は別物
/health は死活確認({status, service, ts})、/api/health は ffmpeg/ffprobe の検出結果({ffmpeg: {...}, ffprobe: {...}})です。Gateway 経由でも同様(/api/prepare-upload/health vs /api/prepare-upload/api/health)。混同しないでください。
4OBS 連携が動かない
設定ページの「OBS 録画フォルダ」バッジが 緑(OBS WebSocket)にならない場合は、次のチェックリストを順番に確認します。
| 確認項目 | NG 時の対処 |
|---|---|
| OBS Studio が起動しているか | OBS を起動 → suite_core を再起動(stop.ps1 + start.ps1) |
| OBS の Tools → WebSocket Server Settings で「Enable WebSocket server」がオンか | 有効化、ポート 4455 / 認証パスワードを確認 |
services/log_monitor_api/.env の OBS_HOST / OBS_PORT / OBS_PASSWORD が OBS 側と一致しているか |
不一致なら .env を編集(01 章 §8 参照) |
| OBS を後から起動した | 取得元判定は suite_core 起動時に 1 回だけ。stop.ps1 + start.ps1 で再検出させる |
OBS WebSocket 接続失敗時は config.json の obs_recording_dir、それも無ければ既定値(%USERPROFILE%/Videos)にフォールバックします。バッジが「設定ファイル」「既定値」なのは異常ではなく、その値を使って動画一覧が出ていれば運用には支障ありません。
5動画トリミングが失敗する
5.1 ヘッダの ffmpeg/ffprobe バッジが赤(FAIL)
ffmpeg / ffprobe が PATH に通っていません。公式ビルドを解凍し、bin/ をシステム環境変数 PATH に追加 → 全サービス再起動。
ffmpeg -version
ffprobe -version
新しい PowerShell セッションで上記が動けば OK。動かない場合は環境変数の設定後に新しいウィンドウを開き直してください。
5.2 候補が空 / 「対応する動画がありません」
- 選択した
.replayの試合時刻と、録画動画のタイムスタンプが重なっていない - OBS の録画ファイルが選択リプレイの試合より後に作成された(よくある)
obs_recording_dirが間違ったフォルダを指している → 設定ページで確認
5.3 トリミング実行で 500 エラー
- 出力先ディスクが容量不足
- 入力動画が破損 / 部分的に書き込み中(OBS 録画停止前のファイルを掴んでいる)
logs/prepare_upload.err.logに ffmpeg のエラー出力が残るので、ここから判別
6リプレイ詳細が表示されない / 試合情報が空のまま
マッチ詳細で「人間プレイヤー数 / Bot 数」が空のままになる、リプレイ詳細でテキストが出ないケース。
- 初回は数秒かかるのが正常動作です。.NET の
replay_parserが.replayをパースする時間です。2 回目以降は suite_core キャッシュで即時表示 - 10 秒以上待っても出ない場合は
logs/replay_parser.err.logを確認。FortniteReplayReader系の例外が出ていれば、Fortnite のバージョン更新でフォーマットが変わった可能性があります(パーサのアップデート待ち) - 巨大リプレイ(200MB 超)/ 破損ファイルでも JSON 生成に失敗します。該当
.replayを別ツールで開けるか確認
replay_summary が null でもマッチ詳細の「試合情報」セクションだけは(時刻と長さで)表示されるよう作ってあります。他ページへの影響もありません。
7ログ監視がイベントを拾わない
7.1 「ログファイル(未検出)」バナーが出る
config.json の log_path が空、もしくは存在しないパスを指しています。設定ページで %LOCALAPPDATA%\FortniteGame\Saved\Logs\FortniteGame.log を入力し、保存してください。
7.2 トグル ON でも何も流れない
- Fortnite が起動していない → 正常動作(追記が無いので tail から何も出ない)
- Fortnite 起動中なのに無反応 →
logs/log_monitor.err.logを確認。PermissionErrorならログファイルが他プロセスにロックされている
7.3 トグル UI が ON のまま戻らない
サービス側の /api/log-monitor/status が真実、フロントのトグルはその投影です。stop.ps1 中に SSE が切断されると、稀にトグル表示だけ ON で残ります。ページをリロードするかページ移動すれば整合します。
8障害挙動の確認シナリオ
新しいマシンで運用を始める前に、わざと壊した状態で UI が落ちないかを確認しておくと安心です。
| シナリオ | 期待挙動 |
|---|---|
prepare_upload_api だけ止める |
/videos で「Prepare Upload に接続できません」系の通知。他ページは正常動作 |
~/.fortnite-suite/config.json を空 {} にする |
/settings で既定値が表示され、新しい値で保存可能 |
ffmpeg.exe を PATH から外して再起動 |
/videos ヘッダに FAIL 赤バッジ、トリミングボタンが disabled |
obs_recording_dir を存在しないパスにする |
/matches は Replay のみで埋まり、Video バッジは灰色のまま |
リプレイファイルを削除した状態で /replays/:id を開く |
500 エラー + メッセージ。他ページは正常 |
9ログの場所一覧
調査時に見るべきファイルの早見表です。<service> は gateway / replay_parser / log_monitor / map / prepare_upload / suite_core のいずれか。
| パス | 用途 |
|---|---|
logs/<service>.stdout.log |
uvicorn / .NET の起動ログ・標準出力 |
logs/<service>.err.log |
標準エラー・例外スタックトレース。まず最初に見る |
logs/<service>.log |
アプリケーションロガーの構造化ログ |
.run/<service>.pid |
start.ps1 が記録した PID。status.ps1 / stop.ps1 はここを参照 |
~/.fortnite-suite/config.json |
4 つの設定値の永続化先(03 章 §3 参照) |
services/log_monitor_api/.env |
OBS WebSocket 認証情報(01 章 §8 参照) |
logs/ 配下を ZIP にまとめ、再現手順と config.json(パスワード等の秘密情報は除去)を添えて Issue 報告してください。多くの問題は err.log 末尾 50 行で原因が特定できます。