请选择 进入手机版 | 继续访问电脑版
查看: 626|回复: 1

shell脚本如何监控程序占用带宽?

11

主题

11

帖子

125

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
125
admin 发表于 2015-12-10 20:04:40 | 显示全部楼层 |阅读模式

众所周知,使用iftop能监控所有程序占用的网络带宽,一般情况下,手动执行iftop就可查看。但现在需要使用脚本来监控程序占用的带宽,遇到的问题真不是一点半点,现记录如下,希望能给其它运维人带来更多的帮助。


中途所遇到的难点:

1.iftop把结果重定向到文本中,是图形格式的。

重定向到文本中的内容,全部是一行,根本无法用脚本取值。最开始我使用python读取这个文件,得到所有特殊符号,找到规律,然后使用sed替换成规范的格式。终于在自己测试机上完成,能展示出正常的格式。当放到线上机器时,特殊符号变了又变成乱糟糟的了。网上找了很久的资料,终于找到了解决方法:iftop 1.0-pre之后的版本都能输出文本格式,之前用的是iftop 0.7版本。当晚心里有种流泪的感觉,弄了一天,结果有简单现成的方法。。。


2.一个程序不仅仅只使用一个端口。

  原以为程序仅仅监听一个端口进行通信,后来询问研发得知,当这个程序是服务端的时候,端口是固定的;当这个程序主动访问外面的时候,端口是随机的。所以要想监控的准确,必须找到这个程序打开的所有端口。解决方法是:用netstat所这个程序的所有端口找出来。


3.iftop输出的流量单位不一样,且没有调整一致的命令。

单位不一样,里面有Mb,Kb,b单位,需要进行换算。我的解决方法是:把Mb替换成*1000,Kb替换成空,把b直接不要过滤掉。最后用bc一算直接得结果。




4.程序发送占用带宽好算,接收带宽不好算。

  根据第2步找到的几个端口,过滤出发送出去的流量一加就可以。但是接收的怎么算?见上边图中第一条流量,有"<="的则为接收流量,"<="这些行都是未知的IP与端口,怎么把它过滤出来得出结果??我的解决方法是:把"=>"行和"<="放两个临时文件中,图中有"=>"的行第一列都有序号,那么全部是"<="行的都和它一一对应,如:发送"=>"中的是序号121315。那么"<="文件中的第121315行就是对应的接收流量。。是不是理解了?


5.shell脚本代码如下

#!/bin/sh
#author:yangrong
#mail:10286460@qq.com
#date:2014-05-14
file_name="test.txt"
temp_file1="liuliang.txt"
temp_file2="liuliang2.txt"
iftop  -Pp -Nn -t -L 100 -s 1 >$temp_file1
pragrom_list=(VueDaemon VueCenter VueAgent VueCache VueSERVER VUEConnector Myswitch Slirpvde)
#pragrom_list=(VueSERVER VueCenter)
>$file_name
for i in ${pragrom_list[@]}
do
        port_list=`netstat -plnt|grep $i|awk '{print $4}'|awk -F: '{print $2}'`
        port_all=""
        for port in $port_list
        do
                port_all="${port}|${port_all}"
                port_all=`echo $port_all|sed 's/\(.*\)|$/\1/g'`
        done
        if [[ $port_all == "" ]];then
                echo "${i}sendflow=0" >> $file_name
                echo "${i}receiveflow=0" >> $file_name
                continue
        fi
        send_flow=`cat $temp_file1 |grep -E "${port_all}"|grep -E 'Mb|Kb'|grep '=>'|awk '{print $4}'|\
        tr '\n' '+' |sed -e s/Mb/*1000/g |sed s/Kb//g |sed  's/\(.*\)+$/\1\n/g'|bc`
        #echo "cat liuliang.txt |grep -E "${port_all}"|grep -E 'Mb|Kb'|grep '=>'|awk '{print $4}'|\
        #tr '\n' '+' |sed -e s/Mb/*1000/g |sed s/Kb//g |sed  's/\(.*\)+$/\1\n/g'|bc"
        if [[ ${send_flow} == "" ]];then
                send_flow=0
        fi
        send_num=`cat $temp_file1 |grep -E "${port_all}"|grep "=>"|awk '{print $1}'`
        echo "" > $temp_file2
        for num in $send_num
        do
          cat $temp_file1 |grep  '<='|sed -n ${num}p|grep -E 'Mb|Kb' >>$temp_file2
        done
        receive_flow=`cat $temp_file2 |grep -E 'Mb|Kb'|awk '{print $4}'|\
        tr '\n' '+' |sed -e s/Mb/*1000/g |sed s/Kb//g |sed  's/\(.*\)+$/\1\n/g'|bc`
        if [[ $receive_flow == "" ]];then
                receive_flow=0
        fi
        echo "${i}sendflow=${send_flow}" >>$file_name
        echo "${i}receiveflow=${receive_flow}" >>$file_name
done



6.shell脚本执行效果

脚本中定义的进程列表为:pragrom_list=(VueDaemonVueCenter VueAgent VueCache VueSERVER VUEConnector Myswitch Slirpvde)

执行脚本的输出单位是Kb


7.附:iftop命令用法

[root@center230 python]# iftop --help

iftop: unknown option --

iftop: display bandwidth usage on aninterface by host


Synopsis: iftop -h | [-npblNBP] [-iinterface] [-f filter code]

                              [-F net/mask][-G net6/mask6]


 -h                  display thismessage #帮助信息

 -n                  don't do hostname lookups  #禁用主机解析,即不会出现IP显示域名

 -N                  don't convertport numbers to services #以数字为示端口号,如21端口不会显示成ftp

 -p                  run inpromiscuous mode (show traffic between other

                      hosts on the samenetwork segment)

 -b                  don't displaya bar graph of traffic   #b单位显示

 -B                  Displaybandwidth in bytes    #B单位显示

  -iinterface        listen on namedinterface   #指定监听的网口

  -ffilter code      use filter code toselect packets to count    

                      (default: none, but onlyIP packets are counted)

  -Fnet/mask         show traffic flowsin/out of IPv4 network  #显示指定Ipv4段流量

  -Gnet6/mask6       show traffic flowsin/out of IPv6 network  #显示指定Ipv6段流量

 -l                  display andcount link-local IPv6 traffic (default: off) #显示Ipv6的流量

 -P                  show ports aswell as hosts  #显示端口信息

  -mlimit            sets the upper limit forthe bandwidth scale  

  -cconfig file      specifies an alternativeconfiguration file

 -t                  use textinterface without ncurses #使用文本模式输出


 Sorting orders:

  -o2s                Sort by first column(2s traffic average) #2s平均流量列排序

  -o10s               Sort by second column(10s traffic average) [default] #10s平均流量列排序

  -o40s               Sort by third column(40s traffic average) #50s平均流量列排序

  -osource            Sort by source address #按源IP列排序

  -odestination       Sort by destinationaddress #按目的IP列排序


 The following options are only available in combination with -t

  -snum              print one single textoutput afer num seconds, then quit #指定刷新几次。

  -Lnum              number of lines to print #显示多少行数据。当程序多流量大时,则要显示行数多些才行。


iftop, version 1.0pre4  #版本信息。


文本输出方法:

iftop -Pp -Nn -t -L 100 -s 1 >temp_file

直接查看输iftop 即可。


iftop详细用法见网上文档。

http://www.vpser.net/manage/iftop.html



总结:

1、先尽可能的寻找已有方法。

2、基本功要杂实,对sed,awk,grep等命令要熟练使用。

3、思路要灵活多变,不能被一种方法束缚死。






本文出自 “楊雲” 博客,转载请与作者联系!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

2411

主题

2699

帖子

7853

积分

论坛元老

Rank: 8Rank: 8

积分
7853
JamTrolley 发表于 2017-5-24 00:57:25 | 显示全部楼层
Uso Viagra Ninos  Order Kamagra On Line Propecia Hilft Kamagra Oral Jelly  Cheap Kamagra Pills Kamagra Oral Jelly 10 Sachets Amoxicillin Anti  Order Zoloft Without Script Viagra E Cialis Levitra Best Meds Online  Purchase Kamagra On Line Amoxicilina In Internet Overnight Shipping Windsor Compra Kamagra  Cialis Viagra Acquistare Cialis Online Peligroso Tomar Propecia  Order Generic Kamagra Amoxicillin Side Effects Sexual Excitement Amoxicillin Rx 500  Generic Viagra Viagra Pour Les Filles Prix Du Kamagra Pfizer  Buy Tadalafil Online Buy Cheap Priligy Uk Dutasteride Dutasteridum  Kamagra En Ligne Cephalexin Dosing Amoxicillin Dosing In Neonates  Best Cialis Online Xenical Medecine How To Last Longer  How To Order Cialis Donde Comprar Viagra Femenino Viagra Wirkung Mann  Buy Cialis Online Cheap Buy Generic Viagra With Paypal Viagra Farmacia  Buy Cheap Zoloft Buy Lasix Without Prescription Buy Cyprostol Without Prescrition  Kamagra Gel Online Achat Cialis France Sans Ordonnance Kamagra Achat En Ligne  Buy Viagra Propecia Laake Buy Cialis Germany  Cialis Buy Online Propecia Nioxin Thinning Hair Buy Alli Uk  Buy Viagra Kamagra Bestellen Deutschland No Prescriptions Online Pharmacy  Prices Zoloft Propecia Spanish Venta Cialis Espana  Purchase Cheap Cialis Viagra Con Hipertension Cialis 10 Mg Generico  Generic Cialis Cheapest Instructions Priligy Posologie Zithromax Side Effects In Infants  Cost Of Viagra Cialis Generique Discount Overnight Cephalexin Online  Purchase Cialis Viagra 100 Mg Best Price Correct Viagra Dosage  Buy Cialis Online Cheap Propecia Price Canada buy accutane online safe  Generic Viagra Cheap Sale Cialis Professional Buy Cialis England  Buy Cheap Zoloft Site Viagra En Canada order accutane from canada  Vibramycin Online Buy Indometacin Tablets Augmentin And Amoxicillin In Combination  Buying Cialis Online Can I Take Keflex While Pregnant Preisvergleich Viagra Pillen  Cialis Order Viagra Next Day Delivery Calgary Cephalexin Uses Side Effects  Generic Zoloft Online isotretinoin where to purchase Canadian Pharmacy In Largo Florida  Priligy 30mg Tablets Viagra O Cialis Mejor Prix Du Cialis Forum  Generic Cialis Cheapest Cialis Mastercard Online Pharmacy No Prescription  Best Cialis Online Medicine Online Order Was Ist Kamagra Gold  Cialis Viagra Propecia Weekly Dosage Cheap Cialis Online Pharmacy  Cheap Generic Prozac Cialis Preise In Deutschland Ho Usato Cialis  Purchase Generic Cialis Fish Medicine Amoxicillin Maca Viagra Ano  Viagra Sample Canadianmed24h Keflex And Pregnancy  How To Buy Cialis Buy Cialis Soft Tabs Online
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表