使用Nginx日志计算服务器带宽.md
概述
一般来说,服务器的带宽都会通过网络设备SNMP或者zabbix监控来采集,可是当整体流量过大,需要单个域名去分析带宽的时候,SNMP监控或者zabbix就无能为力了。
nginx的日志中记录了$body_bytes_sent 字段,表示发送给客户端的字节数(不包括响应头的大小),通过计算该字段,然后乘以合理的TCP和HTTP损耗,就可以得出带宽的值。
效果
如下所示,第一张图是通过SNMP获取的网络设备数据,第二张图是通过nginx日志采集的数据分析出来的结果。
实现方法
shell脚本代码
#!/bin/bash
#get date
DATE=`date +%Y-%m-%dT%H:%M -d "2 min ago"`
#pick log
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)}' `
#pick spider log
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)}' `
#TCP损耗+9%,最终单位是Mbps
echo "WEB : $TOTALBYTE1 Mbps"
echo "SPIDER: $TOTALBYTE2 Mbps"
#submit
/usr/bin/zabbix_sender --zabbix-server 10.1.1.165 --port 10051 -s "vhost-nginxcount" -k web-bandwidth-2 -o $TOTALBYTE1
/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%左右。
这种方法适合HTTP站点,HTTPS站点损耗更大,不要用这个方法计算。
转载请注明:IPCPU-网络之路 » 使用Nginx日志计算服务器带宽