需要获取迄今为止的服务器带宽使用情况(以字节为单位)

需要获取迄今为止的服务器带宽使用情况(以字节为单位)

我正在编写一个 CRON/PHP 脚本,它将每 5 分钟检查一次服务器统计数据(CPU/RAM/SSD)并将信息记录到数据库中。这样,我将能够查看不同时间段的服务器使用情况。

我也想知道一天中什么时候使用了多少带宽。我希望有一个计数器总是在增加。然后我可以每 5 分钟读取一次文件并计算出差值。

我现在使用的替代解决方案是:

bwm-ng -o plain -u bytes -T sum -c 1 -t $(( 1000 * 5 * 60 ))

但是后者的问题在于需要 5 分钟才能返回结果。因此,有人能建议如何处理一直存储数据使用情况的文件的问题吗?

答案1

我认为最简单的方法是使用iptables

在顶部添加一行iptables与所有内容匹配的行,然后切断输出iptables -L -v -n并将iptables -Z计数器归零。

它快速而又粗糙,但它可能会满足您的需求。

答案2

在命令行上,有很多工具可以完成这项工作。如果你对现有的虎鲸仙人掌穆宁, 和即时消息工具,看看IBM 的 nmon。这可以交互运行,但也可以输出数据到:/var/log/nmon。这是一个选项。

答案3

Munin 并不是特别重量级的,但无论如何:获取信息的最基本命令就是简单的ifconfig

eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:x.x.x.x  Bcast:x.x.x.x  Mask:255.255.255.0
          inet6 addr: xxx Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:108930219 errors:0 dropped:10 overruns:0 frame:0
          TX packets:12486564 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2734738082 (2.7 GB)  TX bytes:2665032097 (2.6 GB)
          Interrupt:11 Base address:0x8000 

看到带有? 的行RX bytes了吗?使用

使用netstat -s/proc/net/netstat,您可以深入了解更多特定协议。

答案4

使用 iptables 的快速而粗糙的演示。您应该能够自己弄清楚如何根据自己的需要进行修改。

#!/bin/bash
iptables -I INPUT
iptables -I OUTPUT
iptables -Z
while true
do
    iptables -L -Z  INPUT  -v -n | awk 'NR==3 { print "INPUT bytes " $2 }'
    iptables -L -Z  OUTPUT  -v -n | awk 'NR==3 { print "OUTPUT Bytes " $2 }'
    sleep 20
done

这使

INPUT bytes 0
OUTPUT Bytes 108
INPUT bytes 270K
OUTPUT Bytes 1777K
INPUT bytes 1760K
OUTPUT Bytes 12M
INPUT bytes 40
OUTPUT Bytes 216

请注意,每次运行时,都会在 INPUT 和 OUTPUT 链中添加一个新的空白规则,这不是什么好事。

相关内容