2013-07-18 95 views

回答

1

不,沒有這樣的檢查。你可以使用UserParameter來實現它。至於如何,取決於運行代理的操作系統。在Linux上,您可以使用mii-tool或ethtool來定期檢查。或者,如果您使用NetworkManager,則可以執行一些腳本並連接到D-Bus。或者您可以監視系統日誌,驅動程序通常會將日誌鏈接檢測到內核日誌。

在窗戶上,我不知道。可能netsh或ipconfig與一些findstr可以讓你輪詢狀態。或者powershell。詢問serverfault,我敢打賭你會有確切的答案。

2

所以是的UserParameter它是(甚至在Zabbix 3.0中),它的設置相當容易,至少在現代Linux機器上是如此。通過參數化UserParameter(如果您遵循...),可以定義一個參數來支持監視多個NIC;方法如下:

  1. 在一個目標框,找到UserParamter定義存儲代理的目錄,像水木清華/etc/zabbix/zabbix_agentd.d/
  2. 創建用於定義一個新的文件或修改現有的一個;我這樣做:

    cat > /etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf << EOF 
    UserParameter=net.if.link[*],cat /sys/class/net/$1/carrier 
    EOF 
    
  3. 重新啓動代理,如:service zabbix-agent restart
  4. 在的zabbix UI,對主機創建項目如下:
    • 類型:的zabbix代理(積極的,如果合適)。
    • 鍵:已到托架之間被監控的實際NIC,例如:​​,
    • 類型的信息:數值(無符號); 數據類型:十進制
    • 顯示值:爲 「服務狀態」(其顯示爲 「上/下」)
    • 應用:網絡接口

就是這樣;轉到最新數據;等待30秒左右,你的網卡狀態應該開始填充。如果鏈接關閉,則可以針對要警示的項目定義觸發器,這也可能很有用。

這是一些other ways to detect a NIC link's state;上面的cat /sys/class/net/${nic}/carrier適合我(Ubuntu 14.04服務器,物理網卡)。

+0

作爲一個即興使用'/etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf'中的以下行來提示我:#用戶參數= net.if.link [*],如果[-r/sys/class/net/$ 1 /載體];那麼cat/sys/class/net/$ 1/carrier;其他回顯0; fi' 這可以防止項目進入「不支持」狀態。 – dsteinkopf

1

@ sxc731是對的,在net.if鍵中沒有這樣的現有項目。

如果您想使此解決方案具有通用性,您可以使用發現規則來發現網絡接口。這將查找所有接口,也可以找到虛擬網橋等。但是,您可以使用正則表達式來僅匹配物理接口。我在多臺服務器上使用多個操作系統進行部署。這是我的方法:

  1. 創建或使用現有的Zabbix模板。
  2. 管理 - >常規菜單,進入正則表達式並執行以下操作:
    1. 添加新的正則表達式Physical network interface discovery
    2. 使用正則表達式^em[0-9]{1,}|p[0-9]{1,}p[0-9]{1,}|eth[0-9]{1,}|ens[0-9]{1,}$
  3. 使用密鑰net.if.discovery爲您的模板創建發現規則。
  4. 使用宏{#PHYSNET}和正則表達式@Physical network interface discovery創建過濾器。
  5. 添加項目原型鑰匙net.if.link[{#PHYSNET}]和觸發如果你需要一個。
  6. 在Zabbix客戶端服務器上創建UserParameter(示例結尾)。

使用cat /sys/class/net/$1/carrier作爲UserParameter存在一個問題。如果網絡接口已關閉(例如使用ip link set eth0 down),則cat命令的結果爲無效參數

我個人使用的用戶參數此一行代碼:

UserParameter=net.if.link[*], if [ $(cat /sys/class/net/$1/operstate) = "up" ]; then cat /sys/class/net/$1/carrier; else echo "0"; fi; 

資源: