跳至主要内容

04 — 資料模型

標準事件與 BigQuery schema

一個 envelope 把所有來源正規化。共通欄位是強型別欄位,方便快速篩選;來源專屬的 payload 放在單一 JSON 欄位。

欄位

欄位說明型別必填
event_id事件唯一識別碼(UUID)STRING
occurred_at事件在來源端發生的時間TIMESTAMP
received_atAPI 收到 log 的時間 · partition key · 由 API 補齊TIMESTAMP
source_system來源系統名稱(jenkins、vault…)STRING
source_instance來源的特定 instance / 環境STRING
action執行的動作 / 事件名稱STRING
outcome動作結果(SUCCESS、FAILURE、DENIED)STRING
severity嚴重程度(INFO、WARN、ERROR)STRING
actor_id發起動作的主體 / 帳號STRING
target_id動作影響的目標資源STRING
correlation_id串連跨服務操作的 trace IDSTRING
ingest_client_id由 API 驗證通過的 Zitadel client · 來自 JWT subjectSTRING
metadata來源專屬欄位,可擴充的 JSONJSON

BigQuery DDL

CREATE TABLE audit.audit_logs (
event_id STRING NOT NULL,
occurred_at TIMESTAMP NOT NULL,
received_at TIMESTAMP NOT NULL,
source_system STRING NOT NULL,
source_instance STRING,
action STRING NOT NULL,
outcome STRING,
severity STRING,
actor_id STRING,
target_id STRING,
correlation_id STRING,
ingest_client_id STRING,
metadata JSON
)
PARTITION BY DATE(received_at)
CLUSTER BY source_system, action;
PARTITIONreceived_at 每日分區——減少掃描量,並可設定保留期到期。
CLUSTER以 source 與 action 叢集——多數篩選都命中這兩欄,降低讀取位元組數。