iT邦幫忙

0

HardwareMonitor - Day 06|把 Linux 服務機納進來:用 SSH 做跨平台蒐集

  • 分享至 

  • xImage
  •  

Day 06|把 Linux 服務機納進來:用 SSH 做跨平台蒐集

Windows 主機終於能收資料後,我把目標轉向跑 Git、資料庫與內部服務的 Ubuntu 機器。本來以為 SSH 登得進去,剩下只是執行幾行命令;實際測試後才發現,同一條命令在不同主機上可能有不同輸出,有些帳號還沒有足夠權限。跨平台監控真正麻煩的地方,就藏在這些小差異裡。

例如 parse_df 不會把每個掛載點都拿來告警;像 /boot/efi 很小,放進來只會一直嚇人。遇到 timeout、權限不足或缺少指令時,我也不讓整輪監控失敗,而是把原因整理成可讀訊息。

我的做法是把 SSH 的麻煩留在 collector 裡,往上只交付統一資料。這樣再加新的 Linux 主機時,Dashboard 不用跟著改。

本篇學習重點

  • 使用 SSH 蒐集 Linux 主機的磁碟資訊。
  • 將指令輸出轉換成可供程式使用的結構化資料。
  • 排除不需要納入容量告警的特殊掛載點。

重點程式碼:排除不需要告警的掛載點

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

小小的過濾規則能減少無效告警,但也必須交代它適用的環境前提。

程式碼運作方式

  1. 逐台查看快照中的主機,但只處理 SSH 類型。
  2. 使用 list comprehension 重建 disks,排除掛載點為 /boot/efi 的項目。
  3. 原快照結構維持不變,後續容量判斷不必知道這項例外規則。

這是依目前環境建立的業務規則;若其他公司真的需要監控 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 的快照格式。

連載頁
HardwareMonitor目錄

認識我們
聯繫我們


*提醒邦友,使用第三方服務/API 時,請務必評估資安風險與隱私保護
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言