為什麼你需要一個免費的伺服器探針系統

如果你手裡有 3 台以上的 VPS,分散在不同機房和地域,你一定經歷過這樣的場景:某台伺服器突然掛了,你完全不知道,直到客戶投訴或者服務被發現已經離線好幾個小時。

傳統的解決方案無非幾種:花錢買 UptimeRobot 之類的商業監控服務,或者自己搭一套 Prometheus + Grafana——前者功能受限,後者需要額外維護一台監控伺服器。對於個人開發者和小團隊來說,這兩種方案都不夠優雅。

CF-Server-Monitor 提供了一個更聰明的選擇:完全基於 Cloudflare 免費額度運行的多伺服器監控系統。不需要自有伺服器,不需要付費訂閱,面板、API、資料庫和即時推送全部跑在 Cloudflare 的邊緣網路上。截至目前,這個專案已經在 GitHub 上獲得 1,500+ 星標,被大量 VPS 愛好者和小團隊採用。

專案概覽:CF-Server-Monitor 是什麼

CF-Server-Monitor 是一個部署在 Cloudflare Workers 上的輕量級多伺服器監控面板,核心技術棧包括:

  • Cloudflare Workers:邊緣計算函數,處理 API 請求和 Agent 上報
  • Cloudflare D1:邊緣 SQLite 資料庫,持久化儲存監控數據
  • Durable Objects:有狀態物件,透過 WebSocket 實現前端即時推送
  • Vue.js 前端:反應式監控面板和管理後台
  • Go Agent:安裝在被監控伺服器上的輕量探針

它的設計理念很簡單:Agent 單向上報指標到 Worker,Worker 寫入 D1 並廣播給前端。沒有 WebSSH,沒有遠端命令下發,沒有主控通道——這讓它比傳統探針更安全。

核心功能一覽

功能模組 具體能力
即時監控 CPU、GPU、記憶體、交換分割區、磁碟、磁碟 IO、網路流量、連接數、程序數、負載、執行時間
歷史數據 7 天歷史圖表、長時段取樣、即時網速、月流量統計與校正
網路品質 電信/聯通/移動/BGP 節點延遲與丟包率追蹤
多視圖面板 條形圖、環形圖、表格、地圖視圖,桌面端和移動端自適應
管理後台 伺服器增刪改查、拖曳排序、隱藏伺服器、匯入匯出、批次操作
跨平台 Agent Linux、Alpine、OpenWrt、群暉 DSM、飛牛 fnOS、FreeBSD、macOS、Windows
即時推送 Durable Objects + WebSocket,Agent 上報後前端即時重新整理
告警通知 離線告警、恢復通知、到期提醒、資源負載告警
主題生態 內建主題、主題商店、第三方主題反代與預覽
多語言 前端內建中英文切換

為什麼選擇 Cloudflare Workers + D1

零成本運行

Cloudflare 的免費額度相當慷慨:

  • Workers:每天 10 萬次請求
  • D1:每天 500 萬行讀取、10 萬行寫入
  • Durable Objects:每天 10 萬次請求

CF-Server-Monitor 針對這些額度做了專門最佳化:預設 60 秒上報間隔可支援約 60 台伺服器,改為 120 秒後理論上可翻倍。歷史查詢採用取樣策略,月度數據表自動輪換,配合快取和限流設計,確保不超出免費額度。

全球邊緣計算

Cloudflare 在全球 300+ 城市有邊緣節點。Workers 運行在離使用者最近的節點上,API 回應延遲極低。D1 資料庫同樣基於邊緣架構,讀寫操作都在邊緣完成,不需要回源到中心伺服器。

免維護

沒有伺服器需要打補丁,沒有 Docker 容器需要重新啟動,沒有資料庫需要備份。Cloudflare 託管了所有基礎設施,你只需要關注被監控的伺服器本身。

與其他監控工具對比

特性 CF-Server-Monitor UptimeRobot Prometheus + Grafana Netdata
費用 免費(Cloudflare 免費額度) 免費版 50 個監控 免費(需自有伺服器) 免費(需自有伺服器)
需要自有伺服器 否 否 是 是
伺服器指標監控 CPU/記憶體/磁碟/網路全指標 僅 HTTP 狀態碼 全指標(需配置) 全指標
即時推送 WebSocket 即時推送 輪詢 需額外配置 即時
維護成本 零(Cloudflare 託管) 零 高(需維護伺服器) 中
離線告警 支援(Telegram/微信/釘釘等) 支援(有限) 需配置 Alertmanager 支援
歷史數據 7 天 依賴方案 無限(取決於儲存) 有限
安全性 單向上報,無遠端通道 N/A 需自行加固 有 WebSSH 風險

對於擁有多台 VPS 的個人開發者和小團隊,CF-Server-Monitor 在成本和便利性上有明顯優勢。如果你需要 PB 級別的歷史數據或企業級 SLA,Prometheus + Thanos 可能更合適。

系統架構解析

┌─────────────────┐     POST /update     ┌──────────────────────┐
│  Server Agent   │ ───────────────────> │  Cloudflare Worker   │
│  (Go/Shell/PS)  │                      │  (邊緣計算函數)       │
└─────────────────┘                      └──────────┬───────────┘
                                                    │
                                        ┌───────────┼───────────┐
                                        │           │           │
                                   ┌────▼───┐ ┌────▼────┐ ┌───▼────┐
                                   │  D1    │ │Durable  │ │ Vue    │
                                   │ SQLite │ │Objects  │ │前端面板 │
                                   │ 資料庫 │ │WebSocket│ │        │
                                   └────────┘ └────┬────┘ └───┬────┘
                                                    │          │
                                               ┌────▼──────────▼───┐
                                               │   瀏覽器/移動端    │
                                               │   即時數據展示     │
                                               └───────────────────┘

核心數據流:

  1. 在管理後台新增伺服器,複製安裝命令
  2. 目標伺服器安裝 Agent,按配置間隔向 Worker 傳送指標
  3. Worker 校驗 API_SECRET,寫入 D1,並透過 Durable Object 廣播即時數據
  4. 前台面板、詳情頁、管理後台和 iOS 小工具讀取同一套 API

部署實戰:從零搭建監控系統

前置準備

  • 一個 Cloudflare 帳戶(免費版即可)
  • 一個 GitHub 帳戶
  • 一個足夠複雜的 API_SECRET(同時作為 Agent 上報金鑰和初始後台密碼)

方式一:Cloudflare Workers 連接 GitHub(推薦)

這是最省心的部署方式,後續更新也方便同步。

第一步:Fork 倉庫

訪問 CF-Server-Monitor GitHub 倉庫,點擊 Fork 按鈕。

第二步:建立 Worker

  1. 登入 Cloudflare Dashboard
  2. 進入 Workers & Pages
  3. 點擊「建立 Worker」
  4. 選擇「連接 GitHub 倉庫」,匯入你 Fork 的倉庫

第三步:配置構建

  • 構建命令:npm run build:frontend
  • 部署命令:npx wrangler deploy

第四步:新增環境變數

在 Worker 的 Variables and Secrets 中新增:

變數名 值 說明
API_SECRET 你的強密碼 Agent 上報金鑰 + 初始後台密碼

第五步:部署

點擊部署,等待構建完成。部署成功後你會得到一個 xxx.workers.dev 域名。

方式二:GitHub Actions 自動部署

適合希望完全透過 GitHub 管理部署流程的使用者。

  1. Fork 倉庫
  2. 在 Cloudflare 建立 D1 資料庫(名稱建議 server-monitor-db)
  3. 複製 Cloudflare Account ID
  4. 建立 Cloudflare API Token(需要 Workers 編輯和 D1 部署權限)
  5. 在 Fork 倉庫的 Settings → Secrets → Actions 中新增:
YAML
CF_API_TOKEN: 你的 Cloudflare API Token
CF_ACCOUNT_ID: 你的 Cloudflare Account ID
D1_DATABASE_ID: D1 資料庫 ID
API_SECRET: 你的強密碼
CORS_ALLOWED_ORIGINS: (可選)允許的跨域來源

推送到 main 分支即自動部署。

方式三:一鍵部署

Deploy to Cloudflare Workers

一鍵部署適合快速體驗,但長期維護建議遷移到前兩種方式。

首次使用:登入後台與新增伺服器

登入管理後台

部署成功後訪問:

TEXT
https://你的Worker域名/admin#/admin

預設憑據:

  • 使用者名稱:admin
  • 密碼:你設定的 API_SECRET

登入後請立即修改管理員使用者名稱和密碼。 後台密碼可以與 API_SECRET 分離——Agent 上報仍使用環境變數中的 API_SECRET,但後台登入密碼可以獨立設定。

新增第一台伺服器

  1. 進入 /admin#/admin
  2. 在「伺服器管理」中填寫伺服器名稱
  3. 點擊「新增伺服器」
  4. 點擊複製按鈕,選擇目標系統和 Agent 版本
  5. 在目標伺服器上執行生成的安裝命令

後台生成的命令會自動包含伺服器 ID、Worker URL、Secret、上報間隔等參數,比手動拼接更可靠。

被監控伺服器配置:Agent 安裝與數據上報

Go Agent(推薦)

從 v2.8.3 開始,預設使用獨立的 cfsm-agent(Go 語言編寫),安裝後服務名為 cf-probe。

非 root 安裝(推薦)

支援 systemd --user 的 Linux 環境,建議使用非 root 使用者安裝:

BASH
# 切換到普通使用者
su - youruser

# 執行後台生成的安裝命令(範例)
curl -sSL https://your-worker.example.com/install | bash -s -- \
  -id 1 \
  -secret "your-api-secret" \
  -url "https://your-worker.example.com" \
  -interval 60

安裝後檔案寫入 ~/.cf-probe/,使用 systemd --user 管理自啟動。

如果希望使用者退出登入後服務仍運行:

BASH
# root 執行
loginctl enable-linger youruser

root 安裝

如果不方便使用非 root 使用者,也可以直接 root 安裝:

BASH
curl -sSL https://your-worker.example.com/install | bash -s -- \
  -id 1 \
  -secret "your-api-secret" \
  -url "https://your-worker.example.com"

Agent 常用參數

參數 說明 預設值
-id 伺服器唯一 ID 必填
-secret Agent 上報金鑰,需等於 API_SECRET 必填
-url Worker 上報地址 必填
-collect_interval 本機額外採集間隔,0 表示不額外取樣 0
-interval 上報間隔(秒) 60
-ct / -cu / -cm / -bd 自訂網路品質測試節點 內建節點
-reset_day 月流量重置日 1
-rx_correction 下行月流量校正(GB) 空
-tx_correction 上行月流量校正(GB) 空

支援的平台

  • Linux:Ubuntu、Debian、CentOS、Rocky Linux、AlmaLinux 等主流發行版
  • Alpine Linux:使用 OpenRC 管理
  • OpenWrt:路由器友好
  • 群暉 DSM:NAS 監控
  • 飛牛 fnOS:國產 NAS 系統
  • FreeBSD:BSD 系支援
  • macOS:開發機監控
  • Windows:PowerShell 版本

監控面板功能詳解

即時狀態展示

前台面板支援四種視圖模式:

  • 條形圖模式:直觀展示各伺服器 CPU/記憶體/磁碟使用率
  • 環形圖模式:緊湊展示,適合伺服器數量較多的場景
  • 表格模式:詳細數據列表,支援排序和篩選
  • 地圖模式:基於地理位置展示伺服器分佈

每種模式都支援桌面端和移動端自適應。

歷史數據與圖表

  • 7 天歷史圖表:CPU、記憶體、磁碟、網路流量的時間序列
  • 長時段取樣:歷史查詢採用取樣策略,避免 D1 超額
  • 即時網速:上傳/下載速率即時曲線
  • 月流量統計:支援流量重置日和上下行校正

網路品質監控

支援電信、聯通、移動、BGP 四網延遲與丟包率追蹤。開啟三網詳情後,首頁從 D1 最近 2 小時抽樣最多 20 個真實數據點,快取 5 分鐘。

告警通知

在管理後台 → 全域設定 → 通知中配置。支援的通知渠道:

平台 配置方式
Telegram BotFather Bot Token + Chat ID
企業微信 群機器人 Webhook URL
飛書 群機器人 Webhook URL
釘釘 自訂機器人 Webhook URL
Bark https://api.day.app/xxxx/
Server 醬 https://sctapi.ftqq.com/<SendKey>.send
Gotify https://gotify.example.com/message?token=xxx
自訂 Webhook 任意 HTTP POST 端點

告警類型包括:離線告警、恢復通知、到期提醒、資源負載告警。

進階配置

自訂域名

在 Cloudflare Dashboard 中為 Worker 綁定自訂域名:

  1. 進入 Worker 設定 → 觸發器
  2. 新增自訂域名(如 monitor.yourdomain.com)
  3. Cloudflare 會自動處理 SSL 憑證和 DNS 解析

多 Worker 聚合

如果你有多個 Worker 實例(分佈在不同 Cloudflare 帳戶),可以透過 API_BASE 環境變數聚合:

YAML
API_BASE: "https://worker1.example.com,https://worker2.example.com"

前台會同時請求多個 Worker 並合併展示。

GitHub Pages 靜態前台

專案支援將前台構建為靜態站點部署到 GitHub Pages,透過遠端 Worker API 獲取數據:

BASH
# 構建命令
npm run build:github-page

需要在 GitHub Secrets 中配置 API_BASE 指向你的 Worker 地址。

iOS Scriptable 小工具

專案提供 iOS Scriptable 小工具腳本,可在 iPhone 桌面顯示單台伺服器狀態:

  1. 安裝 Scriptable App
  2. 新建腳本,貼上 scripts/ios-scriptable-widget.js 內容
  3. 修改頂部 CONFIG.baseURL 為你的站點地址
  4. 新增 Scriptable 小工具,Parameter 填寫伺服器 ID

小工具顯示線上狀態、CPU、記憶體、磁碟、月流量、即時速率和更新時間。

安全加固

  • Turnstile 驗證:在後台安全設定中啟用 Cloudflare Turnstile,防止暴力破解
  • CORS 白名單:透過 CORS_ALLOWED_ORIGINS 限制 API 訪問來源
  • CSP 策略:自訂內容安全策略,防止 XSS 攻擊
  • JWT Secret:獨立設定 JWT 簽名金鑰,與 API_SECRET 分離

效能最佳化與成本控制

Cloudflare 免費額度最佳化

CF-Server-Monitor 內建了多項額度友好設計:

  • 月度數據表輪換:歷史數據按月分表,避免單表過大
  • 歷史查詢取樣:長時間範圍查詢自動取樣,減少 D1 讀行
  • 快取策略:三網詳情數據快取 5 分鐘,減少重複查詢
  • 限流設計:API 請求頻率限制,防止惡意刷接口

上報間隔調優

場景 建議間隔 可支援伺服器數
即時監控(60 秒) -interval 60 ~60 台
常規監控(120 秒) -interval 120 ~120 台
低功耗監控(300 秒) -interval 300 ~300 台

如果你的伺服器數量較多,建議將上報間隔調整為 120 秒或更長。對於大多數場景,2 分鐘的監控粒度已經足夠。

WSS 上報最佳化

v2.8.4 引入了 WSS(WebSocket Secure)上報能力。Agent 可以在特定時段使用 WSS 上報,提升即時數據推送及時性;非目標時段自動改用 POST,降低 Durable Objects 時長消耗。

局限性與注意事項

免費額度的邊界

  • D1 儲存上限:免費版 D1 資料庫最大 500 MB,長期運行需要定期清理歷史數據
  • Workers 請求數:每天 10 萬次請求,60 台伺服器 × 60 秒間隔 ≈ 86,400 次/天,接近上限
  • Durable Objects:免費版有並發限制,大量前端同時連接可能觸發限流

功能限制

  • 歷史數據僅 7 天:受限於 D1 免費額度,超過 7 天的數據會被取樣或清理
  • 無 WebSSH:出於安全考慮,不提供遠端終端功能(這其實是優點)
  • 依賴 Cloudflare:如果 Cloudflare 服務中斷,監控系統也會不可用

安全建議

  • 強密碼:API_SECRET 必須是隨機強密碼,不要使用預設值
  • 及時改密:首次登入後立即修改管理員使用者名稱和密碼
  • 非 root 運行:盡可能使用非 root 使用者安裝 Agent
  • 定期更新:關注專案更新,及時升級 Worker 和 Agent 版本

總結

CF-Server-Monitor 是目前最優雅的免費伺服器監控方案之一。它巧妙地利用了 Cloudflare 的免費額度,將面板、API、資料庫和即時推送全部託管在邊緣網路上,實現了真正的零成本、零維護。

適合誰:

  • 擁有多台 VPS 的個人開發者
  • 需要輕量監控的小團隊
  • 不想維護監控伺服器的使用者
  • 關注安全性的使用者(單向上報,無遠端通道)

不適合誰:

  • 需要 PB 級歷史數據的企業使用者
  • 需要 WebSSH 和遠端命令下發的使用者
  • 對 SLA 有嚴格要求的生產環境

如果你正在尋找一個免費、安全、易用的多伺服器監控方案,CF-Server-Monitor 值得一試。它可能不會替代企業級的 Prometheus + Grafana 方案,但對於個人開發者和小團隊來說,這已經足夠好了。

專案地址: https://github.com/huilang-me/CF-Server-Monitor 線上演示: https://demo.huilang.me/


常見問題(FAQ)

1. CF-Server-Monitor 真的完全免費嗎?

是的,只要你的監控規模在 Cloudflare 免費額度內(每天 10 萬次 Workers 請求、500 萬行 D1 讀取),就不需要花一分錢。預設 60 秒上報間隔支援約 60 台伺服器,改為 120 秒可以翻倍。

2. 數據存在哪裡?安全嗎?

數據儲存在 Cloudflare D1(邊緣 SQLite 資料庫)中,由 Cloudflare 託管。Agent 採用單向上報設計,不提供 WebSSH 或遠端命令下發功能,即使 Agent 被攻破也無法反向控制伺服器。

3. 支援哪些作業系統?

支援主流 Linux 發行版(Ubuntu、Debian、CentOS 等)、Alpine Linux、OpenWrt、群暉 DSM、飛牛 fnOS、FreeBSD、macOS 和 Windows。預設使用 Go 語言編寫的 Agent,效能更好,跨平台相容性更強。

4. 如何接收離線告警通知?

在管理後台 → 全域設定 → 通知中配置。支援 Telegram、企業微信、飛書、釘釘、Bark、Server 醬、Gotify 和自訂 Webhook。配置後,伺服器離線會立即推送通知。

5. 可以綁定自訂域名嗎?

可以。在 Cloudflare Dashboard 的 Worker 設定中新增自訂域名,Cloudflare 會自動處理 SSL 憑證和 DNS 解析。也支援將前台部署到 GitHub Pages 並使用自訂域名。