使用Log日志 计算带宽流量峰值
2015-03-19 15:49
381 查看
awk 19一般来说流量带宽是通过snmp协议取网卡流量画图。不过有的时候,为了优化分析或者排错,也会直接去计算服务的访问流量。方法很简单,根据日志中记录的 请求时间(squid记录的是请求响应完成时间,如果要精确,可以再减去响应时间,不过一般squid的文件不至于5分钟内还传不完的……),按每5分钟 一汇总其字节数,然后均摊到300秒上。计算全日志中最高带宽的命令行如下:
cat $ACCESS_LOG|awk -F'[: ]' '{a[$5":"$6]+=$14}END{for(i in a){print i,a[i]}}'|sort|awk '{a+=$2;if(NR%5==0){if(a>b){b=a;c=$1};a=0}}END{print c,b*8/300/1024/1024}'(日志为标准apache日志格式) 而把最后的awk改成’{a+=$2;if(NR%5==0){print $1,a*8/300/1024/1024;a=0}}’,就可以输出每5分钟时的流量值,然后用GD库画图~~(有时间看看perl的GD:Graph 模块,应该不难)案例:使用awk与sort -nr分析访问日志,找出每种请求返回状态码的请求个数:访问日志的文件格式:113.31.27.213 www.5iops.com – [15/Apr/2012:04:06:17 +0800] “GET /faq/ HTTP/1.0″ 200 2795 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.2 Safari/535.11″ 118.119.120.248, 222.215.136.44 0.003 192.168.0.25:80 200 3.31我们最常用的处理方式为:cat /home/logs/nginx/www.5iops.com.access.log|awk ‘{print $(NF-1)}’|sort -nr |uniq -c ,但其实,这个处理的效率较低:time cat /home/logs/nginx/www.5iops.com.access.log|awk ‘{print $(NF-1)}’|sort -nr |uniq -c1 200″3 “404”4 “304”7377 “200”48 “-”real 0m0.107suser 0m0.102ssys 0m0.013stime cat /home/logs/nginx/www.5iops.com.access.log|awk ‘{a[$(NF-1)]++} END{for (i in a) print i ” ” a[i]}’“304” 4“404” 3“200” 7399“-” 49200″ 1real 0m0.018suser 0m0.013ssys 0m0.008s可见使用后面的awk处理效率高10倍~另一个案例,用一行shell命令处理以下文本分析任务:有一个文本文件,内容为每行为每隔5分钟记录的带宽峰值,共一个月(共8640行),我需要计算出,每天的峰值并排序:traffic文件格式:-bash-4.1$ cat traffic.txt|more2012-04-01 00:00 1952.34mbps2012-04-01 00:05 2198.34 mbps2012-04-01 00:10 2117.07 mbps2012-04-01 00:15 2104.83 mbps2012-04-01 00:20 1878.73 mbps…一种常见解决方法:-bash-4.1$ for i in cat traffic.txt|awk '{print $1}'|sort|uniq ; do cat traffic.txt|grep $i|sort -nr -k3 |head -1 ; done2012-04-01 21:35 3876.02 mbps2012-04-02 21:15 3577.66 mbps2012-04-03 21:35 3371.59 mbps2012-04-04 21:10 3087.17 mbps2012-04-05 21:35 3202.44 mbps2012-04-06 20:45 3703.53 mbps2012-04-07 20:40 4177.43 mbps2012-04-08 14:25 3837.9 mbps2012-04-09 20:50 3082.46 mbps…更高效的解决方法:-bash-4.1$ cat traffic.txt |awk ‘{if($3 > a[$1])a[$1]=$3} END{for(i in a)print i ” ” a[i]}’2012-04-28 5369.812012-04-19 3474.732012-04-29 4824.242012-04-10 2979.912012-04-01 3876.022012-04-20 3866.192012-04-11 3548.732012-04-02 3577.662012-04-30 4077.35…经对比,后面一种方法处理执行效率仍然高10倍.可见活用awk对文本或日志分析处理效率明显提高.本文来自:Linux教程网
相关文章推荐
- 使用MapReduce计算框架统计CDN日志IP数、流量等数据
- 如何计算 一个音视频文件 (.ts)文件 (包含pcr信息). 播放所使用的带宽
- java中log日志的使用(完全版)
- 使用数据库脚本方式分析SqlServer2005数据库中的LOG日志
- 使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
- 使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
- 使用Lex将log日志转换为HTML
- linux 使用 syslog 服务,将出错信息输入到 “/var/log/message” 系统日志文件中去
- Linux下使用crontab来执行定时任务计划----执行每晚12点多执行移动log日志文件操作
- SQL Server 使用Log Explorer恢复日志方法 转自CSDN论坛
- 使用Lumigent Log Explorer对SQL Server事务日志进行分析,对SQL Server事务、操作进行撤销
- iptables学习与研究四(使用LOG记录失败日志)
- Symbian调试——使用Log日志
- Sync Service for ADO.NET 程序调试 - 使用Tracing生成LOG(数据同步的日志) [DEVICE篇]
- 基于APACHE访问日志分析(access_log)的广告流量统计系统
- java中log日志的使用(完全版)
- DB2在导入数据时,如果数据量过大,出现事务日志满的错误(Database transaction log is full)该如何解决,commitcount使用
- 使用ACE日志策略时遇到的问题:DLL::open failed for ACE: Error: check log for details Unable to find service 'Logger'
- 计算某次http get使用的网络流量
- 使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)