由於公司會有人時不時去拉取備份日誌或者包等,zabbix和阿里雲都會出現流量告警,但具體是哪一個用戶或者哪一個進程使用的流量,不知道,告警出現後,登陸服務器查看,流量已經下來了,查看起來比較繁瑣,因此直接弄一個進程流量告警,超過閥值,把進程號,用戶,進出流量大小都輸出出來python
NetHogs是一款開源、免費的,終端下的網絡流量監控工具,它可監控Linux的進程或應用程序的網絡流量。NetHogs只能實時監控進程的網絡帶寬佔用狀況。NetHogs支持IPv4和IPv6協議,支持本地網卡以及PPP連接。shell
1.安裝nethogs
我是 centos6,安裝epel源使用一下版本
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
centos7的話,使用
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmcentos
2.使用nethogs
NetHogs提供交互式控制指令:
m : Cycle between display modes (kb/s, kb, b, mb) 切換網速顯示單位
r : Sort by received. 按接收流量排序
s : Sort by sent. 按發送流量排序
q : Quit and return to the shell prompt. 退出NetHogs命令工具數組
NetHogs 命令行參數
經常使用的參數:
-d delay for refresh rate. 數據刷新時間 如nethogs -d 1 就是每秒刷新一次
-h display available commands usage. 顯示命名幫助、使用信息
-p sniff in promiscious mode (not recommended).
-t (追蹤模式)在控制檯定時刷新各進程的收發帶寬,使用管道命令>便可實現輸出重定向
-V prints Version info.
-c 刷5次結束bash
#關鍵命令,使用如下命令進行重定向
nethogs -c 5 -d 2 -t
這裏-c刷5次,是由於,前面一次會逐漸把有流量的進程打印出來,但前面幾回的時候,會獲取不到所有,全部我打印了5次,時間間隔2秒,差很少能把全部進程流量打印出來了,若還以爲少了,能夠增大時間服務器
#編寫一下兩個腳原本實現
#第一個: 這個腳本,實現執行兩次,時間間隔是20秒,執行命令有10秒(輸出5次,每次2秒),則輸出兩次恰好1分鐘,而後加入計劃任務,1分鐘執行一次這個腳本,固然,這裏的頻率,能夠自行調整網絡
!/bin/bash count=0 while [ $count -lt 2 ] do count=$(($count+1)) /usr/sbin/nethogs -t -d 2 -c 5 > /tmp/flow_nethogs.tmp if [[ $count == 2 ]];then exit else sleep 20 fi done
#第二個:使用zabbix來讀取這個日誌文件,每分鐘執行兩次,或者更多,判斷最後一次(也就是第5次,獲取最完整的一次) 流量大小來進行輸出ide
#!/usr/bin/python #coding=utf-8 #讀取 nethogs.logs日誌,獲取流量過大的進程 #日誌路徑 log_path="/tmp/flow_nethogs.tmp" file = open(log_path,"r") message = file.read() file.close() #設置流量閥值大小,大於閥值則輸出內容 max_flow = 2048 #以Refreshing: 爲分隔符,獲得數組 mes_sp = message.split("Refreshing:") #獲得數組的最後一個元素,去掉空行 resu_str = mes_sp[len(mes_sp) - 1].strip("\n") #以換行符分割數據 resu_li = resu_str.split("\n") for proc in resu_li: proc_li = proc.split("\t") if len(proc_li) == 3: proc_name = proc_li[0] proc_send = proc_li[1] proc_rec = proc_li[2] if float(proc_send) > max_flow or float(proc_rec) > max_flow: print "進程:" + proc_name + ", 發送: " + proc_send + " KB/sec, " + "接收: " + proc_rec + " KB/sec"
超過閥值,則輸出進程信息,沒有超出,則不會輸出任何數據,因此在zabbix裏面,告警設置成 值不爲空,則告警工具
備註:nethogs針對服務器業務進程較少的一種 不會佔用多少資源,若過多,會佔用資源,能夠先根據本身的環境來測測看,nethogs方法比較簡單,能夠直接獲取進程信息等,還有一個工具是iftop,這個工具就沒這麼耗費資源了,但進程信息等,須要本身寫命令查找,後面繼續更新iftop結合zabbix來監控!!!o( ̄︶ ̄)oui