監控 Netstat 中的 TCP 數據
通過Netstat命令,我們能獲取TCP數據,監控它們有助于了解系統。
如果Netstat版本比較老的話,那么運行時可能會遇到下面的錯誤信息:
- error parsing /proc/net/netstat: Success
假設操作系統是CentOS,讓我們看看如何確認netstat隸屬于哪個軟件包:
shell> rpm -qf $(which netstat) net-tools-<VERSION>
如上所示,得知Netstat屬于Net-tools軟件包,通常升級它就可以修復錯誤了:
shell> yum update net-tools
在「Netstat -s」中,TCP數據分為Tcp和TcpExt兩部分,本文監控的是前者:
Tcp: 10549129725 active connections openings 10556220620 passive connection openings 28458277 failed connection attempts 3248285 connection resets received 234 connections established 289641890208 segments received 229159129140 segments send out 805264756 segments retransmited 1388430 bad segments received. 438683428 resets sent
既然是監控,直覺就是監控這些數據絕對值的變化情況,我最開始就是這么做的:定期把絕對值發送給Graphite,可惜最終出來的監控圖基本是一條直線!為什么會這樣?因為絕對值實在是太大了,大到浮動個幾百幾千的話,肉眼根本看不出來!此時絕對值意義不大,我們需要的是相對值的變化情況,如下代碼可以在命令行下直接運行:
while true; do netstat -s | grep -A 10 Tcp: | awk 'NR>1 {$1=$1; print}' printf "\n" sleep 1 done | awk -v RS="" -v FS="\n" '{ for (i = 1; i <= NF; i++) { VALUE = substr($i, 0, index($i, " ") - 1) if (NR > 1) { printf("%10d", VALUE - DATA[i]) } DATA[i] = VALUE } if (NR > 1) { printf("\n") } }'
太晚了,準備看片兒去了,細節問題我就不解釋了,大家自己琢磨吧。