[需要实践]使用PHP获取网卡实时流量带宽使用情况,shell脚本之获取网卡实时流量。

jackxiang 2014-6-5 11:18 | |
背景:PHP探针里有一个:服务器实时数据(CPU型号 [4核] ...)  网络使用状况(eth1 :  已接收 : 1.03612 GB  已发送 : 0.20958 GB) 这个是肿实现的?

[root@localhost ~]$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:1068205690 1288942839    0    0    0     0          0         0 1068205690 1288942839    0    0    0     0       0          0
  eth0:91581844 334143895    0    0    0     0          0 145541676 4205113078 3435231517    0    0    0     0       0          0
proc/net/dev 文件保存了网卡总流量信息,通过间隔一段间隔,将入网卡与出记录加起来。减去之前就得到实际速率。
php实现代码:

<?php
$dev = $argv[1]?$argv[1]:"eth0";

while(true){
        $result = file_get_contents("/proc/net/dev");

        preg_match("/{$dev}:(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)/", $result, $preg_arr);

        $lastre = $thisre;
        $lasttr = $thistr;

        $thisre = $preg_arr[1];
        $thistr = $preg_arr[2];

        $re = hbw($thisre - $lastre);
        $tr = hbw($thistr - $lasttr);
        echo "\33[2J";
        printf("\33[1;1H%-12sss\n", 'Device', 'In', 'Out');
        printf("\33[2;1H%-12sss\n", $dev, $re, $tr);
        sleep(1);
}


function hbw($size) {
        $size *= 8;
        if($size > 1024 * 1024 * 1024) {
                $size = round($size / 1073741824 * 100) / 100 . ' Gbps';
        } elseif($size > 1024 * 1024) {
                $size = round($size / 1048576 * 100) / 100 . ' Mbps';
        } elseif($size > 1024) {
                $size = round($size / 1024 * 100) / 100 . ' Kbps';
        } else {
                $size = $size . ' Bbps';
        }
        return $size;
}
?>



php怎么得到cpu 内存 网络流量的使用率


<?php
$str = shell_exec('more /proc/stat');
$pattern = "/(cpu[0-9]?)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)/";
preg_match_all($pattern, $str, $out);
echo "共有".count($out[1])."个CPU,每个CPU利用率如下:<br>";
for($n=0;$n<count($out[1]);$n++)
{
echo $out[1][$n]."=".(100*($out[1][$n]+$out[2][$n]+$out[3][$n])/($out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n]))."%<br>";
}
?>
//////////////////////////////////////////////////////////////////////
<?php
$str = shell_exec('more /proc/meminfo');
$pattern = "/(.+):\s*([0-9]+)/";
preg_match_all($pattern, $str, $out);
echo "物理内存总量:".$out[2][0]."<br>";
echo "已使用的内存:".$out[2][1]."<br>";
echo "-----------------------------------------<br>";
echo "内存使用率:".(100*($out[2][0]-$out[2][1])/$out[2][0])."%<br>";
?>
//////////////////////////////////////////////////////////////////////
<?php
$str = shell_exec('more /proc/net/dev');
$pattern = "/(eth[0-9]+):\s*([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/";
preg_match_all($pattern, $str, $out);
echo "共有".count($out[1])."个网络接口,每个网络接口利用率如下:<br>";
for($n=0;$n<count($out[1]);$n++)
{
echo $out[1][$n].":收到 ".$out[3][$n]." 个数据包,发送 ".$out[11][$n]." 个数据包<br>";
}
?>

来自:http://idsips.blog.163.com/blog/static/48001272201312092813563/


shell脚本之获取网卡实时流量:
最近一直在搞服务器监控系统,分享一下本人采集网卡实时流量的shell 脚本,写得不好的地方还请指出,共同进步一下。


使用方式:
sh /root/monitor_flow eth0 1

1 表示 进流量(RX)
2 表示 出流量 (TX)

[root@ZWCLC6X-7198 ~]# sh /root/monitor_flow eth1 2
1k


以上代码仅供参考。
代码来自:http://blog.csdn.net/youngqj/article/details/7254224

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7237/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-6-5 13:36
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]