Windows 主機終於能收資料後,我把目標轉向跑 Git、資料庫與內部服務的 Ubuntu 機器。本來以為 SSH 登得進去,剩下只是執行幾行命令;實際測試後才發現,同一條命令在不同主機上可能有不同輸出,有些帳號還沒有足夠權限。跨平台監控真正麻煩的地方,就藏在這些小差異裡。
例如 parse_df 不會把每個掛載點都拿來告警;像 /boot/efi 很小,放進來只會一直嚇人。遇到 timeout、權限不足或缺少指令時,我也不讓整輪監控失敗,而是把原因整理成可讀訊息。
我的做法是把 SSH 的麻煩留在 collector 裡,往上只交付統一資料。這樣再加新的 Linux 主機時,Dashboard 不用跟著改。
def remove_ssh_boot_efi(snapshot):
for host in snapshot.get("hosts", []):
if host.get("type") == "ssh":
host["disks"] = [
disk for disk in host.get("disks", [])
if disk.get("mount") != "/boot/efi"
]
return snapshot
小小的過濾規則能減少無效告警,但也必須交代它適用的環境前提。
這是依目前環境建立的業務規則;若其他公司真的需要監控 EFI 分割區,就應改成可明確設定的排除清單。
sample = """Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 100000 72000 28000 72% /
/dev/sda1 512000 6000 506000 2% /boot/efi
"""
disks = parse_df(sample)
snapshot = remove_ssh_boot_efi({
"hosts": [{"type": "ssh", "disks": disks}],
})
print(snapshot["hosts"][0]["disks"])
以固定文字測試 parser,比每次連真實 SSH 主機更快速,也能重現特定格式問題。
實測時曾出現磁碟使用率解析錯位,原因是 df 的輸出會受到空白、掛載點與系統環境影響;另外 /boot/efi 容量很小,經常被誤判成重要警告。我修正 parse_df,依欄位規則解析並排除不需監控的掛載點,而不是依固定字元位置切割。SSH timeout 或指令不存在時,也改為只標記該主機資料失敗,不讓例外中止其他主機的收集工作。
今天我學到,SSH 能連上不代表資料就能可靠使用,環境差異要在 collector 內消化。下一篇會統一 Windows 與 Linux 的快照格式。