Net-SNMP 透過 extend 指令可輕鬆整合自訂 Shell 腳本,將業務指標(如 TCP 連線數、HTTP/Php-fpm/Memcache 埠連線數)暴露給 SNMP 監控系統。本文示範完整配置流程:從 snmpd.conf 定義 extend OID、編寫監控腳本、重啟服務驗證,到將 snmpd 日誌導向獨立檔案,避免污染系統預設 /var/log/messages。
編輯 /etc/snmp/snmpd.conf,使用新版 extend 取代舊版 exec:
# 允許 192.168.1.0/24 網段以 community public 讀取
com2sec notConfigUser 192.168.1.0/24 public
# 定義 extend OID 與對應腳本
extend .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/snmp/tcpconn.sh
extend .1.3.6.1.4.1.2021.19 tcpCurrHttp /etc/snmp/tcphttp.sh
extend .1.3.6.1.4.1.2021.20 tcpCurrPhp-fpm /etc/snmp/tcpphp.sh
extend .1.3.6.1.4.1.2021.21 tcpCurrMemcache /etc/snmp/tcpmemcache.sh
注意:OID 前綴 .1.3.6.1.4.1.2021 屬於 UCD-SNMP-MIB 企業編號,後續數字自行分配避免衝突。
所有腳本放置於 /etc/snmp/,權限 755,首行 #!/bin/sh。
#!/bin/sh
conn=$(netstat -s -t | grep 'connections established' | awk '{print $1}')
echo $conn
#!/bin/sh
netstat -an | grep ':80 ' | grep ESTABLISHED | wc -l
#!/bin/sh
netstat -an | grep ':9000 ' | grep ESTABLISHED | wc -l
#!/bin/sh
netstat -an | grep ':11211 ' | grep ESTABLISHED | wc -l
# service snmpd restart
# snmpwalk -v 2c -c public 192.168.1.4 .1.3.6.1.4.1.2021.18
輸出範例:
UCD-SNMP-MIB::ucdavis.18.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.2.1 = STRING: "tcpCurrEstab"
UCD-SNMP-MIB::ucdavis.18.3.1 = STRING: "/etc/snmp/tcpconn.sh"
UCD-SNMP-MIB::ucdavis.18.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "5023"
UCD-SNMP-MIB::ucdavis.18.102.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.103.1 = ""
其中 ucdavis.18.101.1 = "5023" 即為腳本回傳的連線數,代表監控生效。
編輯 /etc/sysconfig/snmpd.options(RedHat/CentOS)或 /etc/default/snmpd(Debian/Ubuntu):
# 原預設:OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
OPTIONS="-Lf /var/log/snmpd.log -p /var/run/snmpd.pid -a"
-Lf 指定日誌檔路徑,-p 指定 PID 檔,-a 記錄來源 IP。重啟後查看:
# service snmpd restart
# tail -f /var/log/snmpd.log
.101.1、.101.2…,適合回傳多個指標。ss -t state established 替代 netstat,速度更快。snmp_monitor 用戶,腳本以 sudo -u snmp_monitor 執行,避免 root 權限外洩。