某天要把一台舊主機加入監控,我問了一圈:「它的 IP 是多少?跑 Windows 還是 Linux?帳號由誰保管?」結果資訊散落在聊天紀錄、Excel 和某位同事的記憶裡。那一刻我才發現,做監控以前,得先知道公司到底有哪些機台。因此我把設定檔當成第一份可持續維護的機台名冊。
一開始很想讓表單直接改 JSON,後來發現這樣很危險。現在由 config_io.py 集中處理讀取、驗證與儲存;validate_hosts 先擋掉不完整資料,save_host 才真的寫入。密碼也不放在 JSON。
這樣新同事加入或新機台進來時,只要照同一份名冊登錄,不必再靠口耳相傳。
hosts = list(config.get("hosts", []))
hosts[index] = host
validate_hosts(hosts)
config["hosts"] = hosts
_write(path, config)
這是流程節錄;重點是所有設定入口都先通過集中驗證,再進行持久化。
完整實作還要處理新增索引、密碼保存與原子寫入;文章片段刻意只保留「先驗證、後落盤」的順序。
new_host = {
"name": "File Server",
"type": "winrm",
"host": "192.0.2.10",
"port": 5985,
"username": "monitor",
"warning_percent": 80,
"critical_percent": 90,
}
validate_hosts([new_host])
save_host(CONFIG_PATH, config, 0, new_host, password)
範例使用文件專用 IP,公開文章中不要放入公司的真實位址與帳號。
設定頁初期允許直接送出表單,空白主機名稱、文字格式的連接埠,甚至重複資料都可能被寫進 JSON。錯誤通常要到下一輪監控才爆出來,很難追查。我把驗證集中到 validate_hosts,寫入前先檢查必要欄位、資料型別與合理範圍,並讓失敗結果回到畫面顯示。後來新增設定欄位時,也先補預設值與相容處理,避免舊設定檔升級後無法啟動。
今天我學到,機台設定是整套系統共同依賴的資料契約。下一篇會處理最敏感的帳號與密碼,避免方便成為安全風險。