跳到內容

資料模型

說明 Framedash SDK 收集與傳送的遙測資料結構。

每個事件都是一個 GameTelemetryEvent,以 Protobuf 序列化後透過 TelemetryBatch 傳送至 POST /v1/events。每個事件對應 ClickHouse events 資料表中的一列。結構描述是固定的(於 telemetry.proto 定義);遊戲專屬資料可存放在彈性的 attributes / metrics 對應中,但值必須維持在下方的攝取限制內。

欄位型別說明
event_namestring事件識別碼,例如 player_death,或自動事件 session_start / perf_heartbeat
timestamp_usint64事件發生時間(Unix epoch 微秒,以 DateTime64(6) 儲存)。
session_idstring遊戲工作階段識別碼。
player_idstring明確的玩家識別碼。SDK 收集的唯一 PII。COPPA 模式下會被清除。
map_idstring用於空間分析的地圖 / 關卡識別碼。
build_idstring建置版本。
platformstring引擎回報的平台名稱(Unity 為 Application.platform,UE 為 IniPlatformName,Godot 為 OS.GetName())。
engine_versionstring引擎版本(Unity 為 Application.unityVersion,UE 為 FEngineVersion,Godot 為 Engine.GetVersionInfo()["string"])。
sourceenum事件來源:player / automated / unspecified
欄位型別說明
positionVector3(x、y、z 浮點數)世界空間位置。以 position_x / position_y / position_z 儲存。
camera_yawfloat(選填)攝影機水平旋轉(度)。0 = 正北,順時針,範圍 [0, 360)。當 SDK 不擷取攝影機時不存在。
camera_pitchfloat(選填)攝影機垂直旋轉(度)。-90 = 正下方,+90 = 正上方。

camera_yawcamera_pitch 會一起傳送,或完全不傳送。缺少該值表示「未擷取」,而非 0。

由 SDK 自動收集,特別是在每 10 秒傳送一次的 perf_heartbeat 事件中:

欄位型別單位 / 備註
fpsfloat每秒影格數
frame_time_msfloat毫秒
gpu_time_msfloat毫秒
game_thread_msfloatCPU 遊戲執行緒時間(ms)。0 = 未收集
render_thread_msfloatCPU 算繪執行緒時間(ms)。0 = 未收集
memory_used_bytesint64位元組

Unity SDK 0.1.3、UE5 SDK 0.1.6 和 Godot SDK 0.1.4 新增了兩項自動收集的效能訊號。兩者都會進入 perf-diff(建置比對)迴歸閘門和儀表板圖表。

  • map_load:由 BeginMapLoad / EndMapLoadReportMapLoad 在地圖或關卡載入完成時發出的專用自動事件。它攜帶 metrics["load_time_ms"]attributes["map_name"],並刻意將 map_id 留空,從而不進入空間熱力圖和啟用閘門。
  • io.read_bytes / io.read_time_ms / io.read_ops:以相對上一次 heartbeat 的增量附加到 perf_heartbeatmetrics 對應的磁碟讀取計數器。只有在真正擷取到樣本之後才會出現。自動來源在 Unity 上僅限 Editor / Development Build(AsyncReadManagerMetrics),在 UE5 上為選擇性開啟(bTrackDiskIo),在 Godot 上僅限手動(ReportIoSample)。

各引擎的 API 和執行緒規則見各 SDK 指南。

受支援的 SDK 會把各記憶體分類的用量作為 mem.* 指標附加到 perf_heartbeat 和帶位置的事件上。可用的鍵與收集方式因引擎而異。

  • UE5 SDK 0.1.7 及更新版本mem.vram 以及依賴 LLM 的 mem.textures / mem.meshes / mem.audio。三者都需要 opt-in(bTrackMemoryDetail,預設關閉);mem.vram 無需 LLM,但在無頭 / -nullrhi 執行中不會附加(此時是鍵缺失,而非 0)。
  • Unity SDK 0.1.4 及更新版本mem.vrammem.heap。自動收集,無需 opt-in。
  • Godot SDK 0.1.5 及更新版本mem.vrammem.texturesmem.buffers。自動收集,無需 opt-in。

三者都放在 metrics 對應中,未追蹤的分類會讓該鍵缺失(表示「未收集」,與已收集的 0 不同)。mem.vram 同時也是 perf-diff(建置比對)的比較指標。各引擎細節見 UE5 SDKUnity SDKGodot SDK 指南。

遊戲專屬內容脈絡透過兩個彈性對應傳送,無需變更結構描述:

欄位型別說明
attributesmap<string, string>字串鍵值對,例如 weapon: "rifle"。COPPA 模式下整體捨棄。
metricsmap<string, double>數值量測值,例如 damage: 42.5

攝取管線會驗證每個解碼後的事件。如果批次中任何一個事件超出這些限制,該批次可能在請求時被拒絕,或在非同步處理期間被整體丟棄。因此,自訂 SDK 和原始 Protobuf 傳送方應在 flush 前鉗制取值。官方 Unity、UE5 與 Godot SDK 會在用戶端套用這些鉗制。

欄位限制
timestamp_us必須在過去 30 天內,且不得超過未來 48 小時。
event_name / session_id必填且不可為空。event_name 最多 128 個字元,session_id 最多 64 個字元。
player_id, map_id, build_id各最多 128 個字元。
source, platform, engine_version各最多 64 個字元。
position_x / position_y / position_z必須是有限數字,絕對值不超過 1e9
fps0 到 1000 之間的有限數字。
frame_time_ms / gpu_time_ms / game_thread_ms / render_thread_ms0 到 10000 之間的有限毫秒值。
memory_used_bytes0 到 64 GiB 之間的整數。
attributes最多 50 個項目;key 最多 64 個字元;value 最多 512 個字元。
metrics最多 50 個項目;key 最多 64 個字元;value 必須是有限數字。
camera_yaw / camera_pitch必須同時存在或同時省略。yaw 正規化為 [0, 360),pitch 正規化為 [-90, 90]

SDK 傳送 TelemetryBatch(即 GameTelemetryEvent 清單)。API 金鑰與 SDK 版本透過 HTTP 標頭(X-API-KeyX-SDK-Version)傳輸,而非放在酬載內文中。

自訂傳送方應將傳送時的 HTTP 請求本文(若使用 gzip,則為壓縮後)維持在 126,000 bytes 以內。生產攝取會以 413 拒絕更大的本文;官方 SDK 會在明顯低於該上限時 flush。