熱門分類
載入中…
目錄0%

📊 Zabbix 代理與主動監控:模板設計與觸發條件調校

    📊 Zabbix 代理與主動監控:模板設計與觸發條件調校

    在大型環境(多站點、多網段、跨防火牆、或頻寬/延遲不穩)導入 Zabbix 時,最常遇到的兩件事就是:

    • 監控點越多,Zabbix Server 壓力越大(poller / history sync / DB I/O 一起飆)。
    • 告警越多,越容易「真假難辨」(閾值太緊、抖動、重複事件、或根因沒被凸顯)。

    這篇用「Zabbix Proxy + Active Check」當作核心,帶你把模板(Template)與觸發條件(Trigger)做成可維護、可擴展、也更貼近實務的版本。


    📌 目錄


    1. Proxy 與 Active Check 的定位

    ✅ Zabbix Proxy 是什麼?

    Zabbix Proxy 是「站點側的監控前哨站」:它可以代替 Zabbix Server 去收資料、暫存資料、再回送到 Server。 好處是:

    • 降低 Zabbix Server 的直連壓力(poller 數量、連線數、跨網段延遲)。
    • 站點短暫斷線時,Proxy 可緩衝資料,恢復後再補送。
    • 跨防火牆時,Proxy 可做成「單向可控」的連線策略(更安全、更好維運)。

    ✅ Active Check(主動監控)是什麼?

    Active Check 的概念是「Agent 主動出去拿設定,再主動回報資料」:

    • Agent →(主動連線)→ Server / Proxy
    • Agent 取得待監控的 item 清單後,定期把資料 push 回去

    特別適合這些情境:

    • 站點內主機無法被 Server/Proxy 反向連回(NAT、嚴格 ACL、零信任網段)。
    • 大量端點(桌機、筆電、POS、IoT)不適合被動輪詢。
    • 希望降低 poller 壓力,改成端點分散回報。

    一句話: Proxy 解決「收集與緩衝」,Active Check 解決「連線方向與負載分散」。兩者搭起來通常就是大規模環境的標配。


    2. 架構與流量路徑(誰連誰)

    典型模式 A:Proxy 在站點內收資料(被動 + 主動混合)

    [Agents (Passive/Active)]  →  [Zabbix Proxy]  →  [Zabbix Server]  →  [DB]
    • 站點內端點多:Agent 被動(Proxy poll)或主動(Agent push)都可以。
    • 站點對外只需要允許 Proxy → Server 的一條路(更好控)。

    典型模式 B:端點主動回報到 Proxy(主動為主)

    [Agents (Active)]  →  [Zabbix Proxy]  →  [Zabbix Server]  →  [DB]
    • 跨網段、跨防火牆、NAT:只要端點能主動打到 Proxy 即可。
    • Proxy 再集中回送到 Server。

    3. Proxy 安裝與基本設定要點

    以下以「Proxy + SQLite」做示範(小中型站點很實用、部署快)。若站點很大或 Proxy 壓力高,再改 PostgreSQL/MySQL。

    3.1 Proxy 設定核心參數(zabbix_proxy.conf)

    ### Proxy identity
    Server=10.0.0.10              # Zabbix Server IP/DNS
    Hostname=SITE-A-PROXY         # 必須與 Zabbix 前台建立的 Proxy 名稱一致
    
    ### Proxy mode
    ProxyMode=0                   # 0=active proxy(Proxy 主動連回 Server)建議
    # ProxyMode=1                 # 1=passive proxy
    
    ### Local DB(示範 SQLite)
    DBName=/var/lib/zabbix/zabbix_proxy.db
    
    ### Cache / queue
    CacheSize=256M
    HistoryCacheSize=128M
    HistoryIndexCacheSize=64M
    Timeout=4
    
    ### Logs
    LogFile=/var/log/zabbix/zabbix_proxy.log
    LogFileSize=0

    建議: ProxyMode 使用 active proxy(Proxy 主動連回 Server),跨防火牆時最省事;同時你只要在 Server 側開一個清楚的接收規則即可。

    3.2 Proxy 在 Zabbix 前台的設定重點

    • Administration → Proxies:建立 Proxy,名稱要與 Hostname 完全一致。
    • Proxy mode:Active(通常更穩)
    • Hosts 指派:把站點內的主機指派到該 Proxy

    4. 主動監控(Active Check)設計策略

    4.1 Agent2(建議)Active 設定示範

    ### /etc/zabbix/zabbix_agent2.conf
    Server=127.0.0.1
    ServerActive=10.0.1.20         # Proxy IP(建議指向站點 Proxy)
    Hostname=HOST-001              # 必須與前台 host name 一致
    
    ### 主動回報頻率相關(依環境調整)
    RefreshActiveChecks=120

    若你希望「端點只出站、不入站」,那就以 Active Check 為主:

    • 防火牆只需允許 Agent → Proxy(通常 10051/tcp)。
    • Proxy 再回送 Server,不必讓 Server 直接碰站點端點。

    4.2 Active Check 的「大規模」注意事項

    • 不要把所有 item 都做成秒級更新(那會變成自己打自己)。
    • 把「高頻(10~30s)」留給關鍵服務(核心 DB / API / GW),其餘以 60~300s 為主。
    • 把「資料量巨大」的項目(例如大量 log / 多維度統計)改用 LLD 或採樣。

    5. 模板設計:Item / Trigger / Graph / LLD

    5.1 模板分層:共用層 + 角色層

    建議你把模板做成兩層(維護會差非常多):

    • 共用層:OS 基礎(CPU/RAM/Disk/Net)、時間同步、基本可用性
    • 角色層:DB、Web、Cache、Queue、Proxy、Firewall…(依主機角色套用)

    5.2 Item 設計:先決定「要回答的問題」

    一個好 Item 不是「能抓到」而已,而是要回答這幾種問題:

    • 現在狀態如何?(current)
    • 趨勢如何?(trend)
    • 根因可能在哪?(diagnostic)

    範例(Linux):

    system.cpu.util[,user]
    vm.memory.size[available]
    vfs.fs.size[/,pfree]
    net.tcp.service[http,,80]

    5.3 Trigger 設計:先做「嚴重度分級」

    實務建議至少分三級(你後續的告警路由/值班才會好做):

    • Info:可觀察,但不急(例如短暫尖峰)
    • Warning:需要處理(例如持續高負載/空間逼近)
    • High/Disaster:立即處理(服務中斷、磁碟滿、DB down)

    範例 Trigger(磁碟空間,含抖動過濾):

    {Template OS Linux:vfs.fs.size[/,pfree].max(5m)}<10
    AND
    {Template OS Linux:vfs.fs.size[/,pfree].min(5m)}<12

    上面用 max(5m)min(5m) 做「連續性」判斷,比單點值更不容易誤報。

    5.4 LLD(自動發現)策略:把「會變動的東西」交給機器

    最常用 LLD 的項目:

    • 磁碟/掛載點(新加盤、新 mount)
    • 網卡介面(新增 bond/vlan)
    • 服務/程序(多實例)

    示例:對所有掛載點自動產生剩餘空間告警(概念示意)

    LLD rule:vfs.fs.discovery
    Item prototype:vfs.fs.size[{#FSNAME},pfree]
    Trigger prototype:
      {Template OS Linux:vfs.fs.size[{#FSNAME},pfree].min(10m)}<10

    6. 觸發條件調校:去抖動、降噪、抓根因

    6.1 三個最有效的降噪技巧

    技巧 A:用時間窗判斷(min/max/avg)

    {host:key.min(5m)}<threshold

    技巧 B:用 hysteresis(回復條件不同於觸發條件)

    例如:CPU > 90% 持續 10 分鐘才告警;回復需降到 70% 持續 5 分鐘。

    技巧 C:用依賴關係(Trigger dependencies)抓根因

    當「上游斷線」時,讓下游告警被抑制,避免一斷線全站紅一片。

    • 例:站點 Gateway Ping Down → 依賴它的服務告警全部抑制
    • 例:DB Down → API error rate 的告警可以依賴 DB

    6.2 建議的調校順序(很省時間)

    1. 先把「明確中斷」類(服務 down、ping 斷、port 斷)做準。
    2. 再做「資源耗盡」類(disk、inode、memory、fd、conn)。
    3. 最後才是「效能退化」類(latency、qps、response time、queue)。

    6.3 Proxy / Active Check 特有的盲點:你要分清楚「端點問題」還是「回報路徑問題」

    • 端點真的沒資料?(agent 掛了、key 失效)
    • 端點有資料,但回報卡住?(Proxy queue、history sync)

    因此建議你在 Proxy 上也監控這些:

    • Proxy queue size / history sync 狀態
    • Proxy 自身 CPU / I/O / DB(SQLite 檔案大小、寫入延遲)
    • Proxy ↔ Server 網路延遲/丟包

    7. 上線與驗收:逐步 rollout 的做法

    1. 先挑 5 台代表性主機(不同角色:DB/Web/一般主機/站點邊界)。
    2. 模板先上共用層,觀察 48 小時,修正誤報。
    3. 再逐步加入角色層模板(每次只加一層,容易定位噪音來源)。
    4. 告警動作(email/IM/工單)最後才開,避免一開始就被洗版。

    驗收指標建議:

    • 告警數量下降,但真正異常有被抓到(噪音下降、命中率上升)
    • Proxy queue 不長期堆積(站點斷線可接受,但恢復後能追上)
    • Zabbix Server poller / DB I/O 有明顯緩解

    8. 常見問題排查清單

    8.1 Active Check 沒資料

    • 確認 host name 是否完全一致(Agent 的 Hostname vs 前台 host name)。
    • 確認 Agent 能連到 Proxy 的 10051/tcp。
    • 確認前台 host 的監控項目確實是「Zabbix agent (active)」。
    • 查看 Agent log:是否拿得到 active check 清單。

    8.2 Proxy queue 堆積很久

    • Proxy 本身資源不足(I/O、CPU、磁碟滿、DB 過大)。
    • Proxy ↔ Server 網路不穩(延遲、丟包、頻寬不足)。
    • CacheSize 太小導致頻繁 flush/重試(需調大)。

    8.3 告警太多、誤報多

    • 把「單點判斷」改成「時間窗判斷」:min/max/avg。
    • 加上依賴關係(上游斷線時抑制下游)。
    • 把告警分級,並把低嚴重度告警先不要推送到即時通知。

    FAQ

    Q1:站點要用 Proxy 的 DB 用 SQLite 還是 PostgreSQL?

    站點小(幾十到一兩百台)且你追求部署快、維護少:SQLite 通常很夠用。 若站點大、資料量高、或 Proxy 壓力長期偏高:用 PostgreSQL/MySQL 會更穩。

    Q2:Active Check 一定比 Passive 好嗎?

    不是絕對。Active 更適合「端點不可被連回」與「想把負載分散」的情境;Passive 則在內網穩定、網路拓樸單純時很直覺。 實務上常是混用:關鍵服務/跨網段端點用 Active,其餘用 Passive。

    Q3:模板要不要「一台一套」客製?

    不建議。模板的價值就是可重用與可維護。 若真的要客製,優先用:User macros({$THRESHOLD})、Host tags、或 Template inheritance(分層)。



    💬 留言聊聊你的環境

    你是用 Active、Passive,還是混用?Proxy 用 SQLite 還是 PostgreSQL?
    若你願意貼一下你的規模(主機數、站點數、DB 類型、平均告警量),我可以幫你一起把模板分層與觸發條件做得更貼近你的實際狀況。

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級