Cacti 是基於 RRDtool 的圖形化監控工具,搭配 SNMP 可輕鬆採集主機指標。但預設 MIB 有時無法滿足需求(如 Lighttpd 當前連線數),此時可透過 SNMP extend(exec)機制,讓 Agent 執行本地腳本並回傳自訂數值,再由 Cacti 繪圖。本文完整示範從腳本撰寫、SNMP 設定、Cacti 模板建立到圖形呈現的全流程。
| 方案 | 做法 | 缺點 |
|---|---|---|
| snmpget 直讀 TCP MIB | .1.3.6.1.2.1.6.9.0 | 數值常不準(僅統計 ESTABLISHED) |
| snmpwalk 全抓再數行 | .1.3.6.1.2.1.6.13.1.3 | wc -l | 大量連線時效能極差,易 timeout |
| 本地腳本 + SNMP extend | Agent 端統計後主動上報 | 高效、準確、擴充性強 |
/etc/tcpconn.sh#!/bin/sh
# 統計 TCP ESTABLISHED 連線數
conn=$(netstat -s -t | grep 'connections established' | awk '{print $1}')
echo $conn
chmod +x /etc/tcpconn.sh
/etc/snmp/snmpd.conf 註冊# 格式:exec OID 名稱 路徑
exec .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/tcpconn.sh
重啟服務:systemctl restart snmpd
snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.2021.18.101.1
# 回傳:UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "488"
關鍵 OID:.1.3.6.1.4.1.2021.18.101.1(輸出值位於 ucdavis.18.101.*)
TCP Connections - EstablishedtcpConnEstab.1.3.6.1.4.1.2021.18.101.1|host_description| - TCP Conn - ESTABLISHEDCurrent ConnectionsCurrent: %8.0lfDevices → 選目標主機 → Associated Graph Templates → Add 上述 Graph Template → Create Graphs for this Host。
/etc/cpu_usage.sh#!/bin/sh
idle=$(sar -u 1 3 | grep Average | awk '{print $8}')
used=$(echo "100 - $idle" | bc -l -s)
echo $used
echo $idle
註冊 OID:exec .1.3.6.1.4.1.2021.19 cpuUsage /etc/cpu_usage.sh
回傳兩行:used、idle → Cacti 建立兩個 Data Source 對應 .101.1、.101.2。
/etc/mem_usage.sh#!/bin/sh
used=$(/usr/bin/free -m | grep Mem | awk '{print $3}')
total=$(/usr/bin/free -m | grep Mem | awk '{print $2}')
echo $used
echo $total
/usr/local/bin/squidmemhits.sh#!/bin/sh
PATH=$PATH:/usr/local/squid/bin
export PATH
# 抓取 Memory hits 百分比的兩個數值
squidclient -t 1 -h localhost -p 3128 mgr:info | grep "Memory hits" | cut -d"%" -f2 | awk '{print $5}'
squidclient -t 1 -h localhost -p 3128 mgr:info | grep "Memory hits" | cut -d"%" -f3 | awk '{print $3}'
snmpd.conf:exec .1.3.6.1.4.1.2021.50 squidmemhits /usr/local/bin/squidmemhits.sh
.1.3.6.1.4.1.2021.<編號>,101.* 為輸出值區。.101.1、.101.2 等具體葉節點。透過 snmpd.conf 的 exec 指令,任意 Shell/Perl/Python 腳本皆可變身 SNMP 監控指標,極大擴展 Cacti 監控廣度。掌握「腳本→註冊→驗證→建模→繪圖」五步曲,即可應對各類非標準監控需求。