Linux

如何在 Cacti 中監控 Linux 伺服器的丟包(Net SNMP)

  • July 4, 2019

我正在測試我使用iPerfUDP 協議的網路基礎設施。

我正在執行Cacti一個開源的、基於 Web 的網路監控和繪圖。Linux 伺服器中啟用了SNMP伺服器。

首先,到目前為止,Cacti能夠監控已經存在的所有模板圖表(例如,記憶體、CPU、平均負載、介面統計資訊)但我找不到Packet loss graph介面的圖表。它應該類似於 Cisco 路由器In/Out Errors/Discarded Packets,但可能使用不同的符號。有人有想法嗎?

其次,我還想繪製/繪製netstat顯示的內容。例如netstat -su顯示:

   Udp:
           1354844 packets received
           0 packets to unknown port received.
           5854 packet receive errors
           1360713 packets sent
           RcvbufErrors: 5854

我想繪製發送、接收數據包和數據包接收錯誤的圖表。這可能與SNMP NETSTAT. 換句話說,我想繪製UDP packet loss

是否有任何 python、Perl 或 bash 腳本可用於收集SNMP NETSTATUDP 數據包的數據?如果是 SNMP 查詢會更好。

我試過snmpnetstat -v2c -c public -Cs -Cp udp 172.0.1.11它只顯示的地方

udp:

然後,我嘗試snmpnetstat -v2c -c public -Cs 172.0.1.11了但它沒有顯示任何值。

tcp:
udp:
 ....

         - output errors
        icmp6 histogram:
             input     output type

第二次編輯

我已經編寫了bash 腳本,它會在我執行時準確地返回我想要的輸出,例如 ./udp_netstat.sh 172.0.1.11

   #!/bin/bash

rs="$(snmpnetstat -v2c -c public -Cs -Cp udp "$@")"
   # You have to quote "$rs" so newlines don't break
   ReceivedDatagrams="$(echo "$rs" | cut -d$'\n' -f2 | tr -s ' '| cut -d' ' -f2)"
   InvalidPort="$(echo "$rs" | cut -d$'\n' -f3 | tr -s ' '| cut -d' ' -f2)"
   DroppedDatagrams="$(echo "$rs" | cut -d$'\n' -f4 | tr -s ' '| cut -d' ' -f2)"
   DatagramRequests="$(echo "$rs" | cut -d$'\n' -f5 | tr -s ' '| cut -d' ' -f2)"

   echo "Received Datagrams:$ReceivedDatagrams Invalid port:$InvalidPort Dropped datagrams:$DroppedDatagrams Datagram requests:$DatagramRequests"

該值為"$@"cacti 的主機名設備

bash 腳本的輸出是:

Received Datagrams:258 Invalid port:63 Dropped datagrams:0 Datagram requests:471520

從數據輸入法開始,我給出了以下路徑,/usr/share/cacti/site/scripts/udp_netstat <hostname>然後根據 bash 文件輸出添加了輸入欄位和輸出。

對於數據源,我也根據 bash 文件輸出添加了數據源項,並將數據源類型設置為COUNTER。然後,我繼續到圖表模板,在其中添加了我擁有的每個輸出的行。

它似乎在添加新腳本的工作流程中,但是,到目前為止,圖中沒有顯示任何內容。

我假設輸入字元串有錯誤。

一種選擇是使用軟體包snmpnetstat附帶的命令。snmp

它允許使用-Cs-Cp參數查詢每個協議的統計資訊:

snmpnetstat

$$ COMMON OPTIONS $$ $$ -Ca $$ $$ -Cn $$ $$ -Cs $$ $$ -Cp protocol $$代理人 -Cs顯示每個協議的統計資訊。

-Cp 協議顯示有關協議的統計資訊

https://www.systutorials.com/docs/linux/man/1-snmpnetstat/

例如:

$ snmpnetstat -v2c -c public -Cs -Cp udp 192.168.0.49
udp:
         1052 total datagrams received
         1167 datagrams to invalid port
            0 datagrams dropped due to errors
         1152 output datagram requests

從那裡您可以根據 Cacti 要求解析輸出和/或格式化它。


編輯 :

如果它沒有返回這樣的值:

tcp:
udp:
ip:
            - datagrams input
            - octets received
            - hdr errors input
            - no routes input
....

這是因為您必須允許在您的 snmp 代理配置文件中查詢這些統計資訊 (OID)。

例如/etc/snmp/snmpd.conf添加:

  • 僅適用於 UDP:
view   systemonly  included   .1.3.6.1.2.1.7
  • 對全部 :
view   systemonly  included   .1.3.6.1.2.1

參考:https ://oidref.com/1.3.6.1.2.1

然後重新啟動您的 snmp 代理以應用更改。

引用自:https://serverfault.com/questions/973558