![需要获取迄今为止的服务器带宽使用情况(以字节为单位)](https://linux22.com/image/566766/%E9%9C%80%E8%A6%81%E8%8E%B7%E5%8F%96%E8%BF%84%E4%BB%8A%E4%B8%BA%E6%AD%A2%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B8%A6%E5%AE%BD%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%88%E4%BB%A5%E5%AD%97%E8%8A%82%E4%B8%BA%E5%8D%95%E4%BD%8D%EF%BC%89.png)
我正在编写一个 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 链中添加一个新的空白规则,这不是什么好事。