在前幾天的鐵人賽文章中,我們學會了如何讓 n8n 被動地處理資料(如彙整報告、回應指令)。今天,我們要更進一步,讓 n8n 主動地為我們工作,化身為一位全年無休、忠心耿耿的網站守護者。
每個 IT 人最擔心的惡夢之一,莫過於自己的個人博客、公司官網或重要的 API 服務在無人知曉的情況下掛點。雖然市面上有許多優秀的監控服務(如 UptimeRobot),但它們要嘛收費,要嘛功能受限。
今天,我們就來用 n8n 親手打造一個完全免費、功能強大的網站健康檢查系統。
我們的目標: 建立一個 n8n 工作流,每 5 分鐘自動檢查一次指定的網站。如果網站無法正常訪問(例如,HTTP 狀態碼不是 200),就立即透過 Discord 發出緊急警報。
一、核心工作流架構 (四個節點,超簡單)
這個監控系統的核心邏輯非常直觀,只需要四個節點就能串連起來:
A[Schedule: 每5分鐘觸發一次] --> B[HTTP Request: 檢查網站狀態];
B --> C{IF: 判斷狀態碼是否正常};
C -- 否 (不等於200) --> D[Discord: 發送警報];
C -- 是 (等於200) --> E[結束];
二、節點詳細設定 (手把手教學)
操作方法:從節點面板中拖拉出 Schedule 節點。
主要參數:
Mode: 選擇 Cron。這是最高級的排程模式,可以讓你定義非常精確的時間。
Cron Expression: 輸入 */5 * * * *。
這串神秘代碼的意思是:「每 5 分鐘執行一次」。你也可以根據需求調整,例如 */1 * * * * 代表每分鐘。
操作方法:新增 HTTP Request 節點。
主要參數:
URL: 輸入你要監控的網站網址,例如 https://ithelp.ithome.com.tw/。
點擊 Options → Add option,加入以下兩個關鍵設定:
勾選 Full Response:這樣我們才能獲取完整的 HTTP 回應,包含最重要的「狀態碼 (statusCode)」。
勾選 Continue on Fail:務必開啟此選項! 如果不開,一旦網站超時或返回 500 錯誤,整個 n8n 流程就會直接報錯中止,我們就收不到警報了。開啟後,即使請求失敗,流程依然會繼續,讓我們有機會處理錯誤狀態。
操作方法:新增 IF 節點。
設定條件:
Value 1: {{$json.statusCode}} (從上一個 HTTP Request 節點取得狀態碼)。
Operation: 選擇 Not Equal。
Value 2: 200。
這個條件的意思是:「如果狀態碼不等於 200」,就代表網站可能出問題了(例如 404 Not Found、500 Server Error、503 Service Unavailable)。符合此條件的資料會從 true 的出口流出。
操作方法:新增 Discord 節點,並將它連接到 IF 節點的 true 輸出端。
主要參數:
Credential: 選擇你的 Discord Bot 憑證。
Channel ID: 選擇你要接收警報的頻道。
Content: 設計一則清楚的警報訊息,例如:
text
🔴 緊急警報!
網站 {{ $json.request.url }} 可能已掛點!
狀態碼:{{ $json.statusCode }}
請立即檢查!
@everyone
你可以在訊息中使用 @everyone 或 @here 來標記頻道中的所有人,確保警報不會被忽略。
三、進階玩法:不只警報,還要記錄!
一個專業的監控系統不只會警報,還會留下紀錄。我們可以簡單地在流程中加入 Google Sheets 節點,打造一個簡易的 Uptime 歷史紀錄。
操作方法:在 IF 節點之後,無論是 true 還是 false 的路徑,都接上一個 Google Sheets 節點。
功能:將每次檢查的時間、URL、狀態碼、甚至回應時間 ($json.duration) 都記錄到試算表中。
價值:一段時間後,你就可以用這些數據來分析網站的穩定性,或是製作一個簡易的 Uptime 狀態頁面。
四、總結與展望
恭喜你!只用了四個簡單的節點,你就完成了一個 24 小時不間斷的網站監控系統。這個流程雖然簡單,卻極具實用價值,完美體現了 n8n 作為 IT 人瑞士刀的強大之處。
以此為基礎,你還可以繼續發想更多可能性:
監控多個網站:在開頭用一個 Code 節點定義一個網址列表,然後讓後續流程一一檢查。
追蹤回應時間:在 IF 節點中加入「回應時間大於 2000ms」的條件,實現網站性能監控。