Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Cacti 整合 SNMP 自定義腳本監控實戰:以 TCP 連線數為例

編輯:Linux 教學

前言

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 extendAgent 端統計後主動上報高效、準確、擴充性強

二、Agent 端部署:撰寫統計腳本並註冊 SNMP

1. 建立統計腳本 /etc/tcpconn.sh

#!/bin/sh
# 統計 TCP ESTABLISHED 連線數
conn=$(netstat -s -t | grep 'connections established' | awk '{print $1}')
echo $conn

chmod +x /etc/tcpconn.sh

2. 修改 /etc/snmp/snmpd.conf 註冊

# 格式:exec OID 名稱 路徑
exec .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/tcpconn.sh

重啟服務:systemctl restart snmpd

3. 驗證採集

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.*)

三、Cacti 端建立 Data Template 與 Graph Template

1. Data Template(資料採集定義)

  • Console → Templates → Data Templates → Add
  • Name: TCP Connections - Established
  • Data Source → Data Input Method: Get SNMP Data
  • Internal Data Source Name: tcpConnEstab
  • OID: .1.3.6.1.4.1.2021.18.101.1

2. Graph Template(圖形呈現定義)

  • Console → Templates → Graph Templates → Add
  • Name: |host_description| - TCP Conn - ESTABLISHED
  • Graph Template Items → Add:
    • Data Source: 選上方建立的 Data Template
    • Graph Item Type: AREA(區域填色)
    • Color: 任選
    • Text Format: Current Connections
  • 再 Add 一項 GPRINT:
    • Consolidation Function: LAST
    • Text Format: Current: %8.0lf

3. 套用至裝置

Devices → 選目標主機 → Associated Graph Templates → Add 上述 Graph Template → Create Graphs for this Host。

四、擴充應用:CPU、記憶體、Squid 快取命中率

CPU 使用率腳本 /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

Squid 記憶體快取命中率 /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. 腳本必須可執行且輸出純文字(每行一值)。
  2. SNMP extend OID 固定在 .1.3.6.1.4.1.2021.<編號>,101.* 為輸出值區。
  3. Cacti Data Template 的 OID 必須精確到 .101.1、.101.2 等具體葉節點。
  4. 大量自訂監控建議統一管理腳本目錄,並用版控追蹤變更。

總結

透過 snmpd.conf 的 exec 指令,任意 Shell/Perl/Python 腳本皆可變身 SNMP 監控指標,極大擴展 Cacti 監控廣度。掌握「腳本→註冊→驗證→建模→繪圖」五步曲,即可應對各類非標準監控需求。

Copyright © Windows教程網 All Rights Reserved