利用 OMS 收集 SNMP 資料

概要: 學習如何利用 OMS 收集 SNMP 的資料。

收集 SNMP 資料

簡單網路管理協定 (Simple Network Management Protocol, SNMP) 是一個為監控和配置設備而廣泛部署的管理協議標準。雖然較高等級的管理協定和保護程序通常用於伺服器,但 SNMP 仍是一個用來監控設備的可行選擇。

SNMP 資料可以用以下兩種方式收集:利用 "polls" – 管理系統將會探查 SNMP agent 以收集特定屬性的數值;利用 "traps" – SNMP agent 將會轉發事件或是通知到管理系統。traps 通常用於事件通知,而 polls 則適用於健康狀態檢測或收集性能指標。

無論是利用 polls 或 traps,SNMP 都是用物件識別碼 (Object Identifier, OID) 來標示。物件識別碼是在供應商提供的管理資訊庫 (Management Information Base, MIB) 文件中被定義或描述。

有了適用於 Linux 的高可擴展性 OMS agent,您可以從 polls 和 traps 收集 SNMP 資料並與 OMS Log Analytics 做結合。

利用 OMS 收集 SNMP Traps

有許多 SNMP Trap 接收器服務可供選擇,但一個好的 SNMP Trap 接收器大多是由多數 Linux 發行版本提供:來自 Net-SNMP 的 snmptrapd。SNMP Trap 接收器能夠為您的環境加載 MIB 文件是很重要的,因此 SNMP trap 訊息中的屬性是以其名稱描述,而非用 OID。

在下一個部分將會介紹 snmptrapd 的配置,以便用於 Linux 的 OMS agent 可以將 SNMP traps 的資料收集至 OMS Log Analytics。

安裝 snmptrapd

要在 CentOS 7、Red Hat Enterprise Linux 7、Oracle Linux 7 伺服器中安裝並啟用 snmptrapd,利用下列指令:

#Install the SNMP agentsudo yum install net-snmp#Enable the servicesudo systemctl enable snmptrapd#Allow UDP 162 through the firewall:sudo firewall-cmd --zone=public --add-port=162/udp --permanent

配置 snmptrapd

配置 snmptrapd 需要一些步驟,而這可能會因 Linux 版本而有所不同。以下範例特別適用於 Red Hat Enterprise Linux、CentOS、或 Oracle Linux。

第一個配置步驟是授權 "community" string (SNMP v1 和 v2 認證 string)。想瞭解更多有關 snmptrapd 的配置,包含 SNMP v3 認證配置的導覽,請參考:Net-SNMP documentation

編輯 snmptrapd.conf:

sudo vi /etc/snmp/snmptrapd.conf

要使用 "public" 的 community string 來允許來自所有來源的所有 OID 的 traps  – 請確保 snmptrapd.conf 文件中存在以下文字:

authCommunity log,execute,net public

 

輸入 MIB 文件

對於使用其名稱 (而非 OID) 記錄的 SNMP trap 領域,MIB 文件必須由 snmptrapd 導入。MIBs 預設的位址是  /usr/share/snmp/mibs。對於所有會發送 SNMP trap 的設備,您將要將所有相關的 MIBs 複製到此目錄。MIB 文件通常由設備供應商提供,但第三方網站 (如 www.mibdepot.com 和 www.oidview.com) 為很多設備供應商提供 MIB 的下載。有些供應商,如 APC,會為所有設備維護一個 MIB,而其他廠商,如 Cisco,則擁有數百個 MIBs。要使 snmptrapd 能夠正確加載 MIB,還必須加載所有相關的 MIBs。請確保在加載 MIB 後檢查 snmptrapd 的記錄文件,以確保在解析您的 MIB 文件時沒有遺失關聯性項目。

 

配置 snmptrapd 輸出

要將 SNMP traps 從 snmptrapd 移至 OMS agent 進行收集,有兩種選擇。第一,snmptrapd 能夠將輸入的 traps 轉發至系統記錄,而只要系統記錄是被配置為收集,其就會被 OMS agent 所收集。第二,snmptrapd 能夠將系統記錄的訊息寫入文件中,它可以由用於 Linux 的 OMS agent 進行追蹤及解析以收集。其中後者較佳,因為我們將可以將 SNMP traps 以一個新的資料類型傳送,而非作為系統記錄事件傳送。

在 Red Hat、CentOS、和 Oracle Linux,配置 snmptrapd 的輸出行為是在:/etc/sysconfig/snmptrapd (sudo vi /etc/sysconfig/snmptrapd)

以下是配置的範例:

# snmptrapd command line options# '-f' is implicitly added by snmptrapd systemd unit file# OPTIONS="-Lsd"OPTIONS="-m ALL -Ls2 -Lf /var/log/snmptrapd -F 'snmptrap \\t %a \\t %B \\t %y/%m/%l %h:%j:%k \\t %N \\t %W \\t %q \\t %T \\t %W \\t %v \\n'"

在此範例配置中的選項:

  • -m ALL: 在預設目錄中加載所有 MIB 元件。
  • -Ls2: 輸出 traps 到 syslog,到 Local2 設施。
  • -Lf /var/log/snmptrapd: 將 traps 記錄到文件 /var/log/snmptrapd。
  • -F: 定義寫到記錄文件中的 traps 的格式。

更多輸出選項可以在此處查詢。格式選項的描述可以在此處查詢。應該注意的是,snmptrapd 將 traps 和保護過程訊息 (例如服務停止/啟動) 記錄在同一個記錄文件中。在此範例中,已經定義格式須從"snmptrap"這個字開始,這使之後從記錄中過濾 snmptrap 變得比較容易。

配置用於 Linux 的 OMS Agent 來收集 SNMP Traps

若您決定要以系統記錄事件的形式收集 snmp traps,需確定您 snmptrapd 配置中定義的工具 (即-Ls2 for Local2) 是在 OMS 中配置為收集。

要藉由追蹤 snmptrapd 記錄文件收集 SNMP traps,您可以利用下列配置。要建立配置文件,執行以下指令:

sudo su omsagent -c "vi /etc/opt/microsoft/omsagent/conf/omsagent.d/snmp.conf"

OMS Agent 配置範例

<source>  @type tail  path /var/log/snmptrapd  pos_file /var/opt/microsoft/omsagent/run/snmptrapd.pos  tag my.snmp.traps  format tsv  keys Type,AgentAddress,Hostname,Date,EntepriseOID,TrapType,TrapSubType,Uptime,Attributes</source>

<filter my.snmp.traps.*>  @type grep  regexp1 Type snmptrap</filter>

<match my.snmp.*>type out_oms_apilog_level infobuffer_chunk_limit 5mbuffer_type filebuffer_path /var/opt/microsoft/omsagent/state/out_oms_api_snmp*.bufferbuffer_queue_limit 10flush_interval 20sretry_limit 10retry_wait 30s</match>

在此範例中,使用 in_tail 插件來定義一個來源,它會收集我們先前定義的 snmptrapd 記錄文件中的任何新行。對應於我們定義的 snmptrapd 輸出格式,格式被設置為 tsv ,而 keys 被定義為記錄文件中每一行的區域名稱。數據的路由被分配了一個標籤。

在先前提及過的,snmptrapd 同時將保護程序記錄和輸入的 traps 記錄到同一份文件中。因此,grep 插件就被當作過濾器。使用正常的表達式,此配置僅選擇以"snmptrap"開頭的記錄行 – 對應於為 snmptrap 輸出配置的格式。

在此配置中的output 插件使用了 OMS 的動態攝取功能,讓輸入的數據基於 OMS agent 傳來的區域名稱而被圖形化。

重新啟動保護程序

當所有的配置完成時,便可以重新啟動保護程序 (snmptrapd 和 omsagent),並開始收集 traps:

sudo systemctl restart omsagentsudo systemctl restart snmptrapd

請務必檢查記錄文件 (/var/log/snmptrapd and /var/opt/microsoft/omsagent/log/omsagent.log) 以確保沒有 syntax 或 MIB 加載錯誤。

結果

當 SNMP traps 開始流通不久後,將會顯示於 OMS 搜尋。利用動態攝取輸出插件,Type 將會顯示 traps_cl。其中 "trap" 是在資料源配置中標籤的最後一部份,而 "_cl" 表示它是一個動態資料型態。

Note:對於生產部署,建議具有多個 SNMP trap 目標/收集器 ,來避免在單機中斷的情況下遺失事件。

在 OMS 搜尋中的 APC UPS Traps

利用用於 Linux 的 OMS Agent 收集 SNMP poll 資料

SNMP polls 被用於探查狀態數據(電源運行狀況)和收集性能指標。我們也可以利用用於 Linux 的 OMS Agent 從 SNMP polls 收集資料。在此處描述的方法可用於從本地的 Linux 電腦收集一些硬體狀態,或是從網路設備探查一組 SNMP 的屬性。然而,若您有很多 SNMP 屬性或設備要輪詢,建議使用專用的電腦監控工具,以避免管理笨重的配置文件。

將 SNMP polling 結合至 用於 Linux 的 OMS Agent 的一種好方法是將 CollectD 作為一個 SNMP polling agent。CollectD 能夠穩健的實行 SNMP polling ,支援像是索引 SNMP 表的概念。

利用 CollectD 來輪詢 SNMP 的屬性

連接 CollectD 至 OMS Agent

CollectD 的 SNMP 插件的詳細文件在此處。要安裝在 Red Hat Enterprise Linux 或是 CentOS,首先需要啟用 epel 儲存庫,如此處所描述。

一旦 epel 儲存庫被啟用後,便可以利用以下指令安裝 CollectD 和 SNMP 插件:

sudo yum install collectd collectd-snmpsudo systemctl enable collectd

要從 CollectD 傳送資料至 OMS agent,可利用以下指令:

sudo /opt/microsoft/omsagent/bin/omsadmin.sh -c

Note:想瞭解更多有關 CollectD 和 OMS agent 之間的結合,請查看此文章

配置 CollectD

想完整瞭解插件配置,請參考 SNMP 插件的文件。以下是一個 collectd 配置範例,以啟用從 Cisco 網路設備收集記憶體使用率:

<Plugin snmp>   <Data "cisco_memory_pool_util">       Type "memory"       Table true        Instance "1.3.6.1.4.1.9.9.48.1.1.1.2"       Values "1.3.6.1.4.1.9.9.48.1.1.1.5"   </Data>   <Host "cisco.contso.com">       Address "10.185.94.56"       Version 2       Community "public"       Collect "cisco_memory_pool_util"       Interval 180   </Host></Plugin>

在 Collectd 配置完成後,利用以下指令重新啟動:

sudo systemctl restart collectd

請務必監控 Collectd 的記錄輸出 (是記錄文件或是 syslog 取決於配置方式) 來捕捉任何 SNMP polling 中的錯誤。

在 OMS 中來自 SNMP Polls 的指標

總結

用於 Linux 的 OMS Agent 具有可擴展性且可輕易利用 OMS 為收集增加額外的資料源。從遠端設備傳送到一台 Linux 電腦中的 snmptrapd 的 SNMP traps,其屬性將會被來自加載 mibs 的名稱所增強,並能夠透過 syslog 或是 被監控的記錄文件傳送到 OMS Agent。當 ClolectD 與 OMS Agent 結合時,提供了輪詢本地或遠端的 SNMP 屬性,並作為指標傳送至 OMS 的方法。