前一天完成 Security Event 搜尋功能後,目前已經可以透過 Event Type、IP、Protocol 或 Signature 找到特定事件。不過 SOC 除了查看單筆事件之外,也需要快速了解目前整體事件的分布狀況。
因此今天開始加入事件統計功能,希望能夠從 SQLite 中計算事件總數、不同 Severity 的數量,以及不同 Event Type 的分布。
在 FastAPI 中新增GET /events/stats,由 Backend 直接查詢 SQLite 並回傳統計結果。
FastAPI Statistics API 回傳 Security Event 統計結果
事件總數可以透過SELECT COUNT(*) FROM events取得。
如果想統計不同 Event Type 的數量,則可以使用:
SELECT event_type, COUNT(*) AS count
FROM events
GROUP BY event_type
例如資料庫中包含 Network Scan 與 Login Attempt,就可以整理成:
Network Scan 1
Login Attempt 1
這說明了資料庫不單單只能用來儲存資料,它本身就能直接協助完成數據的統計與分析。
完成 Statistics API 後,再由 React 呼叫GET /events/stats,並將結果顯示在 Dashboard。
目前上方的統計卡片代表資料庫中所有事件的整體狀況;下方的搜尋功能則用來查看特定事件,因此即使進行搜尋,上方的整體統計數字仍然維持不變。