因應站台流量越來越大,除了在硬體效能上的監控,也可以抓取 TCP connection 在 cacti 繪製
其實原理和 netstat -tun | grep “192.168.10.10:80” | wc -l 的是一樣的
在這篇將監控 IP 並且指定 80 port
Cacti 加入 TCP Connection Templates
Step.1 先下載 TCP Connection Templates 範本 & 執行檔
Step.2 將 tcp_conns.sh 放到 /var/www/html/cacti/scripts/
$ unzip tcp_conns.zip $ cd tcp_conns $ mv tcp_conns.sh /var/www/html/cacti/scripts/ $ chown nginx.nginx /var/www/html/cacti/scripts/tcp_conns.sh
Step.3 再來到 Cacti 管理介面將 TCP Connection Templates 檔匯入
到 「Import Templates」→「Import Templates from Local File」→ 選擇檔案匯入。
Step.4 匯入模板之後就會顯示已新增 Data Input、Data Template、Graph Template
由於我之前已經加入過,所以會變成 update
Step.5 然後到 Devices 去 Create Graphs for this Host
新建剛剛新增的 SNMP – Active HTTP Connections 模板,打勾後按 Create
Step.6 填入你要監控的 IP 跟 Port,然後建立
Step.7 過幾分鐘等待 Cacti 畫出圖,搞定!
如果一直無法出圖,你也可以手動用 snmpwalk 檢測,查看 tcp_conns.sh 執行的程式
#!/bin/sh conns=`/usr/bin/snmpwalk -On -c $4 -v 2c $3 .1.3.6.1.2.1.6.13.1.3.$1.$2 | /usr/bin/wc -l` /bin/echo $conns
$1 = 被檢測端的來源 IP,如你要抓取 192.168.0.1 的 tcp 就用 192.168.0.1
$2 = 被檢測端的來源 Port
$3 用於 snmp 通訊的 IP 位置
$4 snmp community
範例
$ ./tcp_conns.sh 192.168.0.1 80 192.168.0.1 public
此外也可以搜尋 OID 去畫出自己想要的圖
ipMonitor Support Portal :: Mibs
Debug:
Q: 無法畫出圖? 開啟 Graphic Template Debug Mode 查看紀錄顯示
RRDTool Says:
ERROR: the RRD does not contain an RRA matching the chosen CF
Ans: 這是由於統計的 CF Type 不同,到 Graph Template Items 將 CF Type 改為 AVERAGE 即可。
- 用 Cacti 來監控你的系統 – Nginx + Cacti Server 安裝 Round1
- 用 Cacti 來監控你的系統 – SNMP Client 設定 Round2
- 用 Cacti 來監控你的系統 – 用C語言的 spine 來撈資料 Round3
- 用 Cacti 來監控你的系統 – thold 告警通知功能 Round4
- 用 Cacti 來監控你的系統 – 自訂你的總流量、總頻寬圖 Round6
請問你的tcp_conns.sh裡面的變數有4個,但是你的範本在輸入時卻只有兩個輸入,IP跟PORT?
hi Tommas
只需要提供被檢測端的變數數值,$3 , $4 會抓取目前這台主機所建立的模版參數!
請問下目前範本的連結有問題,無法下載,請問你可以再提供新連結嗎?
hi Tommas
連結已更新,謝謝!
感謝板主的回覆,不過目前的問題,仍是卡在不出圖,從rra的資料夾看檔案是有數據,但是就是沒辦法出圖,目前仍沒找到解決方法,使用的cacti版本是0.8.8h版本!不知道版大有沒有遇過這樣的問題!?是因為我有安裝 manage plugin 套件的關係嗎?
hi Tommas
若 rrd 有數值,但是無法出圖的話,這樣你必須檢查 rra/*.rrd 的權限是否正確。
在console > Data Input Methods > SNMP – Get TCP Connections By IP And Port Number of Remote Machine > Input String 的 sh /scripts/tcp_conns.sh 這部分要修改嗎? 我的snmp的密碼是使用 public,那這個部分要修改嗎?$4是寫在範本內容裡面嗎?
還有預設的tcp_conns.sh
conns=`/usr/bin/snmpwalk -On -c $4 -v 1 $3 .1.3.6.1.2.1.6.13.1.3.$1.$2 | /usr/bin/wc -l`
這樣我抓不到值,我更改為以下這樣才能抓到值
conns=`/usr/bin/snmpwalk -On -c $4 -v 1 $3 .1.3.6.1.2.1.6.13.1.3.$1|grep “.$2 “| /usr/bin/wc -l`
hi Tommas:
你可以直接使用 snmpwalk 測試
$ /usr/bin/snmpwalk -On -c pubilc -v 2v localhost .1.3.6.1.2.1.6.13.1.3
oid 為 .1.3.6.1.2.1.6.13.1.3,你提供的這個用法並沒有錯
(1) .1.3.6.1.2.1.6.13.1.3.$1 | grep “.$2”
這個用法是將 $1 帶入的 IP 過濾出來,在使用 grep 過濾出 .80 的 oid
(2) .1.3.6.1.2.1.6.13.1.3.$1.$2
這是用法是我很明確的知道我需要哪一個IP與Port
感謝回覆~目前已找到問題且能完整出圖~不知道為什麼,匯入目前網路上分享的很多範本都不正常,連版大提供的範本也是相同問題,撈的到數據但是出不了圖。後來再自行新增Graph Templates 和Data Templates後才能正常出圖,或許是0.8.8h版的問題也說不定!感謝版大耐心回覆~謝謝!
hi Tommas
恭喜獲得數據,如有更詳細的解決方法也歡迎你分享。
后来好像直接沿用Data Input Methods另外再自行建立Graph Templates 和 Data Templates,才可以出图!