2014年11月2日 星期日

用 netstat 監控 connection 數量

  前幾天有某台伺服器出現 Connection 爆量的問題,導致伺服器無法運作,雖然調大 Connection 就能解決問題,但還是必須了解目前系統的用量有多少,避免造成不必要的資源浪費。

 

要查看 Connection 可以用 netstat 來查看目前所有的 Connection,但做為系統管理人員小弟說過要有懶惰的美德,凡事不要自己來,讓系統自動化才是最明確的決定。

 

目標是希望可以定時監控 80 Port 的 Connection 數量

 

撰寫一隻批次檔,用到 Windows 的 netstat ,還有 Linux 的 find 來區隔來源及目的

 

 

範例1;篩選出 TCP 中 192.168.10.99 這張網卡的 80port
netstat -anp tcp | find "192.168.10.99:80" 

C:\Users\Administrator>netstat -anp tcp | find "192.168.10.99:80"
TCP 192.168.10.99:80 192.168.100.1:39082 ESTABLISHED
TCP 192.168.10.99:80 192.168.100.1:39084 ESTABLISHED
TCP 192.168.100.1:39082 192.168.10.99:80 ESTABLISHED
TCP 192.168.100.1:39084 192.168.10.99:80 ESTABLISHED

 

範例2;將 範例1 篩選出的結果計算數量
netstat -anp tcp | find "192.168.10.99:80" /c 

4

 

如果系統是 80 port 出口的話,與 user 端就會有 輸入及輸出兩筆 Connection。

雖然懶人可以用除以2 的方式來算出數量,但心裡還是覺得有出錯的機會。

 

 

 

 

由於找不到 Windows 的篩選 command ,先用了 Linux 的 cut 加入本機源的判斷。

※要在 Windows 用 Linux 的 command 可以下載 coreutils ,安裝 coreutils 你會需要擁有 libintl3.dlllibiconv2.dll ,請丟到與 cut.exe 相同目錄下。

 

建立 ConnectionMonitor.bat 批次檔
set BINPATH=D:\coreutils-5.3.0-bin\bin 
echo | set /p = %date% >> D:\log.txt
netstat -anp tcp | find "192.168.10.99:80" | %BINPATH%\cut -d " " -f 7 | find "192.168.10.99:80" /c >> D:\log.txt

 

所呈現的執行結果會是以下
201410310100 4

 

echo | set /p = %date% 是為了判讀當下執行的時間, set /p 是不希望 echo 有段行

cut -d " " -f 7  是判別到 192.168.10.99:80 之前有 7 格空格,這是比較原始的方法,如果網友有更好的方法也可以提出!

 

最後加入工作排程,並寫入 Log,一段時間後就可以得知 Connection 的狀況囉!!

Orignal From: 用 netstat 監控 connection 數量

沒有留言:

張貼留言