跳到內容

疑難排解

你整合了 SDK、執行了遊戲,卻沒有資料出現。請依序逐項檢查。

管線預熱後,被取用的事件會在數秒內可查詢。閒置一段時間後的第一個事件可能較慢,因為儲存後端要從冷態恢復,所以在判定傳送失敗前請等待幾分鐘。若幾分鐘後仍無資料到達,再進入傳輸檢查。

預設情況下 SDK 對傳送記錄很少,因此請先啟用詳細記錄。它會告訴你一個批次是否離開了行程,以及伺服器回傳了什麼。

  • Unity:設定 TelemetrySDK.Instance.VerboseLogging = true;(在 Initialize 前後皆可)。清除成功會記錄 [Framedash] Flushed N events (HTTP 202)
  • UE5:SDK 在 LogFramedash 類別下記錄。用 -LogCmds="LogFramedash Verbose" 啟動(或在主控台執行 Log LogFramedash Verbose)。一次傳送會記錄 SendBatch: N events -> ...,隨後是 HTTP 結果。
  • Godot:設定 TelemetrySDK.Instance.VerboseLogging = true;(在 Initialize 前後皆可)。傳輸失敗會記錄重試階梯,例如 [Framedash] Retry 1/3 in 1.0s (HTTP 0)

記錄的 HTTP 狀態會告訴你問題在哪裡:

  • 202——已接受非同步處理。請求已到達擷取佇列,但這不是持久化儲存確認;無效事件仍可能在後續驗證時被捨棄。請依下文用唯一標記確認。
  • 0(Godot)或連線逾時——傳輸層失敗(DNS、TLS、Proxy 或 IPv6),而非 API 拒絕。見下一節。
  • 401 / 403——API 金鑰缺失或沒有 events:write scope。請使用 Ingest 預設金鑰。
  • 415——Content-Type 錯誤。僅與自訂傳送有關;取用端點只接受 protobuf。官方 SDK 會為你設定。

狀態 0 或反覆的連線逾時,代表請求從未到達伺服器。請先從同一台機器確認端點健康,再隔離原因:

Terminal window
curl -4 -sv https://ingest.framedash.dev/v1/events
curl -6 -sv https://ingest.framedash.dev/v1/events

健康的主機會在遠不到一秒內經由 IPv4 回應(裸請求會回傳 4xx 結構化錯誤,這仍能證明可達)。

  • IPv6 損壞:SDK 優先 IPv4 並回退到 IPv6,但在 IPv6 出網損壞的主機上,資料開始流動前你可能仍看到一小串連線逾時。若 curl -4 成功而 curl -6 卡住,請在受影響的介面上停用 IPv6,或為 ingest.framedash.dev 新增一筆 IPv4 hosts 記錄。
  • DNS 怪癖:Godot 的 HttpRequest 使用它自己的非同步 DNS 解析器,即使作業系統解析器和 curl 成功,它也可能失敗(HTTP 0)。通常是不穩定或 split-horizon 的 DNS 路徑所致。
  • Proxy:企業 Proxy 或防火牆可能封鎖取用主機。若從同一台機器 curlhttps://ingest.framedash.dev 失敗,請先修復網路路徑再看 SDK。

Unity 和 UE5 在正常關閉或暫時性傳送失敗時,會把事件寫入磁碟上的佇列,並在下次初始化、遊戲迴圈開始 tick 後清除。強制 kill(例如 CI 逾時 kill)時不會寫入佇列,因此此時仍在緩衝中的事件會遺失。一次正常關閉的短暫無頭執行可能看起來像「什麼都沒送」,而事件其實在佇列中等待,這是預期行為:再執行一次遊戲(或讓它執行更久),排隊的批次就會清除。在 CI 中,請在 kill 行程之前等待記錄中的 HTTP 2xx 行,而不要依賴佇列。細節見各引擎的無頭指南(UnityUE5)。

Godot 沒有磁碟佇列。在 Godot SDK 0.1.5 及更新版本中,Shutdown() 會透過上限 2.5 秒的阻塞傳送同步排空緩衝。仍然沒有離線佇列,因此在該預算內傳送失敗的事件,或在排空完成前被強制終止的行程中殘留的事件,都會遺失。細節見Godot 無頭指南

Unity:批次模式下出現 “Package Manager Cancelled resolving packages”

Section titled “Unity:批次模式下出現 “Package Manager Cancelled resolving packages””

在你加入 git 套件之後,Unity 批次模式執行可能以 Package Manager Cancelled resolving packages 失敗。原因是專案建立時殘留的過期 Temp/UnityLockfile。請關閉編輯器,刪除 Temp/UnityLockfile,然後重試。

要在不用控制面板的情況下精確確認標記,請用擁有 data:admin 範圍的 Full 金鑰執行 raw SQL。Read-only 金鑰的 analytics:read 範圍可以存取彙總分析 API,但不能執行 framedash query;Ingest 金鑰的 events:write 範圍沒有讀取權限。檢查自訂傳送器時,請在每次執行時將 ingest_probe_<unique-id> 中的 <unique-id> 替換為 UUID 等值。重複使用標記可能把舊事件誤認為本次執行成功。

Terminal window
# 這個金鑰屬於哪個專案,是否有效?
framedash auth --api-key-file read.key
# 本次執行的唯一標記是否已進入持久化儲存?(Full 預設金鑰,data:admin scope)
framedash query --api-key-file full.key --project-id <id-from-the-auth-command-above> \
"SELECT count(), max(timestamp) FROM events WHERE event_name = 'ingest_probe_<unique-id>'"

Ingestevents:write)金鑰無法列舉自己的專案,因此「我在寫入哪個專案」無法從 Ingest 金鑰本身回答。請在控制面板查看,或在同一專案中建立一個 Read-only 金鑰。可選取的欄位見事件表結構