← 返回作品列表
個人作品
上線中
Sanring 監控中台
網站流量、VPS 服務健康度與告警通知的監控平台
內部系統,無公開網址,僅提供截圖
Sanring 監控中台
1 / 4重點
- 每台 VPS 部署獨立的 C# agent 回報健康度,以唯讀方式讀取 Docker 狀態
- 整合 Cloudflare 流量、外部可用性檢查與告警,集中在單一平台
- 前端 API 型別由後端 OpenAPI 產生,契約測試防止前後端不一致
背景與目標
多個網站放在 Cloudflare 後面、Docker 服務分散在多台 VPS,沒有統一的地方看流量、健康度與告警。監控中台把這些集中起來:異常自動告警、自動產生月報,狀態紀錄以統一格式保存一年。
核心功能
- 主機與服務健康度:依 agent 回報判定狀態等級;部署重啟有寬限期避免誤報,長時間未回報即標示離線
- Cloudflare 流量:定期擷取流量數據,偵測流量異常與攻擊,並產生月報
- 告警:透過通知佇列寄送 email 並重試;維護時段與靜音設定最長 7 天
- 外部可用性檢查:定期檢查 HTTP 狀態、轉址與 SSL 到期日,與 Cloudflare 狀態合併判斷
- 狀態紀錄:單一格式、不可修改,依月分區保存
技術架構
- 後端
.NET,分為 API、Agent、共用 DTO 三個專案,API 依功能分資料夾
- 前端
Angular、Tailwind CSS、ECharts、Sanring UI
- 登入
透過 Sanring SSO 以 OIDC 登入,後端作為 BFF;所有 API 檢查權限,寫入需 MFA;程式存取使用唯讀 token
- 測試
Testcontainers 整合測試與 Playwright E2E
- 部署
Docker Compose 部署於單台小型 VPS
挑戰與解法
- 1 GB 記憶體的 VPS:只記錄狀態變化、資料降採樣,並為每個容器設定記憶體上限。
- 兩種狀態來源互相覆蓋:Cloudflare 判定與外部檢查原本會互相覆寫,改為分開儲存、取較嚴重者顯示。
- 部署後使用者全被登出:登入金鑰沒有持久化,改存到 volume。



