最新消息:网站迁移至香港,数据恢复中。

使用Nginx日志计算服务器带宽

IT技术 ipcpu 1106浏览

使用Nginx日志计算服务器带宽.md

概述

一般来说,服务器的带宽都会通过网络设备SNMP或者zabbix监控来采集,可是当整体流量过大,需要单个域名去分析带宽的时候,SNMP监控或者zabbix就无能为力了。

nginx的日志中记录了$body_bytes_sent 字段,表示发送给客户端的字节数(不包括响应头的大小),通过计算该字段,然后乘以合理的TCP和HTTP损耗,就可以得出带宽的值。

效果

如下所示,第一张图是通过SNMP获取的网络设备数据,第二张图是通过nginx日志采集的数据分析出来的结果。

实现方法

shell脚本代码

  1. #!/bin/bash
  2. #get date
  3. DATE=`date +%Y-%m-%dT%H:%M -d "2 min ago"`
  4. #pick log
  5. TOTALBYTE1=`grep "$DATE" /var/log/nginx/access.log |awk '{print $11}' | awk '{sum+=$1} END {printf ("%.2f\n",sum*8/60/1024/1024*1.09)}' `
  6. #pick spider log
  7. TOTALBYTE2=`grep "$DATE" /var/log/nginx/spider.log |awk '{print $11}' | awk '{sum+=$1} END {printf ("%.2f\n",sum*8/60/1024/1024*1.09)}' `
  8. #TCP损耗+9%,最终单位是Mbps
  9. echo "WEB : $TOTALBYTE1 Mbps"
  10. echo "SPIDER: $TOTALBYTE2 Mbps"
  11. #submit
  12. /usr/bin/zabbix_sender --zabbix-server 10.1.1.165 --port 10051 -s "vhost-nginxcount" -k web-bandwidth-2 -o $TOTALBYTE1
  13. /usr/bin/zabbix_sender --zabbix-server 10.1.1.165 --port 10051 -s "vhost-nginxcount" -k spider-bandwidth-2 -o $TOTALBYTE2

注意事项

nginx日志必须全部打开,包括图片等静态文件的日志,要不然会出现偏差。
TCP损耗可以根据自己的网络状况来调整,我这里采用了9%,一般CDN厂商会使用10%-15%左右。

转载请注明:IPCPU--网络之路 » 使用Nginx日志计算服务器带宽