最新消息:

linux单机根据ip查看流量

ip admin 3546浏览 0评论

我们有些机房是双线机房,一般的机器上面只有2个网卡,而我们搭建网络,一般有外网,内网,由于是双线,就存在电信跟网通2个ip,再加一个内网ip,就存在3个ip,这样的话,在同一个网卡上面就同时存在电信的ip以及网通的ip就不可避免,这个时候,我们想知道这个机器电信跑了多少的流量,网通跑了多少的流量,系统也没有提供相关的查看方法,在互联网上面找了一圈,也没有找到相关的工具,最后没有办法,只能自动动手,丰衣足食.花了一点点时间,学习一下systemtap,下面就贴一下我写的一个简单的脚本程序,具体如下:

global net_ip_read, net_ip_write

probe tcp.recvmsg {
    if (size <= 0) next;
    sk = @defined($sk) ? $sk : $sock->sk;
    ip = tcpmib_local_addr(sk)
    if (ip)
       net_ip_read[ip] <<< size;
}

probe tcp.sendmsg {
    if (size <= 0) next;
    sk = @defined($sk) ? $sk : $sock->sk;
    ip = tcpmib_local_addr(sk);
    if (ip)
        net_ip_write[ip] <<< size;
}

probe end {
    printf("IP             Recev_KBittSend_KBitn");
    foreach([ip] in net_ip_read) {
        n_sk_rx = @count(net_ip_read[ip])
        n_sk_tx = @count(net_ip_write[ip])
        printf("%st%dtt%dn",
                ip_ntop(htonl(ip)),
                n_sk_rx ? @sum(net_ip_read[ip])/1024*8 : 0,
                n_sk_tx ? @sum(net_ip_write[ip])/1024*8 : 0);
    }

    delete net_ip_read
    delete net_ip_write
}

运行方法

stap traffic.stp -c "sleep 1"

得到的结果如下

traffic

要运行该脚本记得先安装systemtap这个软件,同时记得给内核安装kernel-debuginfo安装包,另外这里面只是利用tcp的相关接口,统计到的单机每一个ip的流量,如果你的机器上面运行的是udp的服务,统计到的数据将不准确,仔细查看了systemtap里面的相关接口,也没有找到udp相关的查看方法,由于我们的机器上面大部分都是跑的tcp的服务,基本没有提供udp的服务,故基本能满足我的需求,另外大家也可以把脚本改一改,很容易就可以实现每秒实时的显示流量,我这个脚本为了让他在后台运行,方便统计,写成只运行一次.

 

转载请注明:爱开源 » linux单机根据ip查看流量

您必须 登录 才能发表评论!