我一直在寻找一个可以监控网站“带宽”使用情况的工具,我说的不是加载了多少 MB/数据,而是服务器的实际输出速度,为了澄清我的意思,我将使用一个例子,
我的服务器的互联网连接速度为 100/MBs,我希望能够监控这 100/MBs 中的使用了多少,并将其记录下来(作为后台进程)。
我尝试过不同类型的工具,例如 Zabbix、Nagios 和 ntopng(ntop),它们都是有用的工具,但它们似乎都无法记录实际的服务器速度/速度使用情况。目前我仍然安装了 Ntop(ng),但我无法让它做我想要它做的事情。(全天候记录数据至关重要)
原因在于,由于我托管了人们可以下载的文件,我的互联网连接速度有时会达到上限,因此我希望能够监控何时/多久达到上限。
我的服务器是运行 Apache 2.2 的 Ubuntu 12.04,我不知道是否需要它,但以防万一:我的域为每个域设置了虚拟主机。
我感谢任何能得到的帮助和提示。
答案1
听起来您正在尝试通过测量日志中记录的 Web 服务器输出来监控整个网络带宽 - 这还不够,因为它不包括任何 TCP/IP 协议开销或其他流量(任何 SSH、FTP、数据库或服务器可能参与的其他流量)。
你需要关注的是接口统计任何服务器监控工具(如 Zabbix 和 Nagios)都具有此功能,例如使用 collectd 时,您可以使用接口模块(https://collectd.org/wiki/index.php/Plugin:Interface) 来监控给定接口或 iptables 模块上的所有流量(https://collectd.org/wiki/index.php/Plugin:IPTables)来监控符合某些过滤规则的流量(这样您可以更详细地分析使用的带宽)。
答案2
我将使用一个脚本(我最喜欢的是带有“re”模块的python)来解析Apache访问日志
例如:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] “GET /apache_pb.gif HTTP/1.0” 200 2326
最后一个元素是传输到客户端的字节数。您需要不断添加这个数字并以固定频率打印或记录,以得出从上次运行到此刻传输到客户端的总字节数。
有关 Apache 访问日志的更多信息,请参见:http://httpd.apache.org/docs/2.2/logs.html
#!/bin/env python
import time, sys, re
regex = re.compile(r'\s+([0-9]+)$')
def fetch_bytes(file, bytes):
for line in file:
match = regex.search(line)
if match:
bytes = int(match.group(1))
yield bytes
def main():
Access_File = "apache_access_log"
try:
with open(Access_File) as file:
gen = None
while True:
for i in range(1001):
gen = fetch_bytes(file, bytes)
#bytes += sum(gen)
#prints how much KB has been transferred in the time duration
print "%s\t%dKB" % (time.strftime("%H:%M:%S"), (sum(gen)/1024))
time.sleep(120)
except IOError:
print "Could not locate the apache log file"
sys.exit(1)
if __name__ == '__main__':
main()