@buoge
2017-12-22T17:55:33.000000Z
字数 7159
阅读 936
善用佳软
requestID, begin,end log
========================================================================================
查找访问频率最高的 URL 和次数:
cat access.log | awk -F '^A' '{print $10}' | sort | uniq -c
查找当前日志文件 500 错误的访问:
cat access.log | awk -F ‘^A’ ‘{if(0}’
查找当前日志文件 500 错误的数量:
cat access.log | awk -F ‘^A’ ‘{if(0}’ | wc -l
查找某一分钟内 500 错误访问的数量:
cat access.log | awk -F ‘^A’ ‘{if(0}’ | grep ’09:00’ | wc-l
查找耗时超过 1s 的慢请求:
tail -f access.log | awk -F ‘^A’ ‘{if(0}’
假如只想查看某些位:
tail -f access.log | awk -F ‘^A’ ‘{if(3″|”$4}’
查找 502 错误最多的 URL:
cat access.log | awk -F ‘^A’ ‘{if(11}’ | sort | uniq -c
查找 200 空白页
cat access.log | awk -F ‘^A’ ‘{if(5==200 &&8 < 100) print 4″|”6}’
查看实时日志数据流
tail -f access.log | cat -e
或者
状态码统计
cat access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -r
1、查看独立IP访问
cat access.log | awk -F'-' '{ print 1 }'| uniq -c | wc -l
netstat -nat |awk '{print6}'|sort|uniq -c|sort -rn
netstat -anlp|grep 80|grep tcp|awk '{print 5}'|awk -F: '{print1}'|sort|uniq -c|sort -nr|head -n20
4.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
5.找查较多的SYN连接
netstat -an | grep SYN | awk '{print 5}' | awk -F: '{print1}' | sort | uniq -c | sort -nr | more
查看当前ip 0点时段访问最高的页面
cat access_log | grep "19/Dec/2014:00" | grep "119.5.89.181" | awk '{print $13}' | sort | uniq -c | sort -nr | head -n 10
网站日志分析篇1(Apache):
1.获得访问前10位的ip地址
cat access.log|awk '{print 1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[(11)]+=1}; END {for(url in counts) print counts[url], url}'
2.访问次数最多的文件或页面,取前20
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
3.列出传输最大的几个exe文件(分析下载站的时候常用)
cat access.log |awk '(7~/\.exe/){print10 " " 4 " " $7}'|sort -nr|head -20
4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
cat access.log |awk '(10 > 200000 &&7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
cat access.log |awk '(7~/\.php/){printNF " " 4 " " $7}'|sort -nr|head -100
6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access.log |awk '(NF > 60 &&7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
7.列出传输时间超过 30 秒的文件
cat access.log |awk '(NF > 30){print7}'|sort -n|uniq -c|sort -nr|head -20
8.统计网站流量(G)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
9.统计404的连接
awk '(9 ~/404/)' access.log | awk '{print9,$7}' | sort
10.蜘蛛分析
查看是哪些蜘蛛在抓取内容。
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
SHELL短语
1、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l
2、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l
3、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
4、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
5、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print 7}'
6、去掉搜索引擎统计当天的页面:
awk '{print 1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
7、查看2009年6月21日14时这一个小时内有多少IP访问:
awk '{print 1}' log_file | grep 21/Jun/2009:14 | awk '{print $2}'| sort | uniq | wc -l
8,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l
9,查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
10,通过日志查看当天ip连接数,过滤重复:
cat access_log | grep "20/Oct/2008" | awk '{print $2}' | sort | uniq -c | sort -nr
11,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
cat access_log | grep "20/Oct/2008:00" | grep "122.102.7.212" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
12,当天访问页面排前10的url:
cat access_log | grep "20/Oct/2008:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
13,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print 2"."4}' | sort | uniq -c | sort -nr
接着从日志里查看该ip在干嘛:
cat access_log | grep 122.102.7.212| awk '{print 8}' | sort | uniq -c | sort -nr | less
14,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20060723.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l
======================================================================================================================================================
http://www.infoq.com/cn/articles/nignx-log-goldmine
/data2/log/resin/zaozuo-web
// 平均每秒的请求数
less main.log | awk '{sec=substr($4,2,20);reqs++;reqsBySec[sec]++;} END{print reqs/length(reqsBySec)}'
14.0963
// 峰值每秒请求数
less access.log | awk '{sec=substr($4,2,20);requests[sec]++;} END{for(s in requests){printf("%s %s\n", requests[s],s)}}' | sort -nr | head -n 3
// 请求总数
less main.log | wc -l
1080577
// 平均每秒的请求数
less access.log | awk '{sec=substr($4,2,20);reqs++;reqsBySec[sec]++;} END{print reqs/length(reqsBySec)}'
14.0963
// 峰值每秒请求数
less main.log | awk '{sec=substr($4,2,20);requests[sec]++;} END{for(s in requests){printf("%s %s\n", requests[s],s)}}' | sort -nr | head -n 3
Page Visits Response Size Time Spent/req Moment
182 10/Apr/2016:12:53:20
161 10/Apr/2016:12:54:53
160 10/Apr/2016:10:47:23
带宽的查询:
API接口等通常消耗更多的CPU资源:
less access.log | awk '{print 7}' |sed -re 's/(.*)\?.*/\1/g' -e 's/(.*)\..*/\1/g' -e 's:/[0-9]+:/*:g' | awk '{requests[1]++;time[2} END{for(url in requests){printf("%smin %ss/req %s %s\n", time [url] / 60, time[url] /requests[url], requests[url], url)}}' | sort -nr | head -n 50
应用系统没有瓶颈,是带宽的问题?快速查看一下每秒的流量
less access.log | awk '{second=substr(10;} END {for(s in bytes){printf("%sKB %s\n", bytes[s]/1024, s)}}' | more
慢查询统计
比例:
less access.log | awk -v limit=2 '{min=substr(11>limit){slowReqs[min]++}} END{for(m in slowReqs){printf("%s%s %s%s %s\n", m,slowReqs[m]/reqs[m] * 100, "%", slowReqs[m], reqs[m])}}' | more
10/Apr/2016:12:51 0.367% 7 1905
10/Apr/2016:12:52 0.638% 12 1882
10/Apr/2016:12:53 0.548% 14 2554
机型:
less access.log | awk '{upServer=12;if(upServer == "-"){upServer="Nginx"};if(upTime == "-"){upTime=0};upTimes[upServer]+=upTime;count[upServer]++;totalCount++;} END{for(server in upTimes){printf("%s %s%s %ss %s\n", count[server], count[server]/totalCount * 100, "%", upTimes[server]/count[server], server)}}' | sort -nr
access.log | awk -F '^A' '{if(0}'
awk '(NF > 2){print0}' access.log >t02_.log
cat access.log | awk '4 >="[01//2014:14:37:50" &&4 <="[21/Jul/2014:14:38:00
===================================================================================
yum install iftop
iftop -B -N -n -i eth1
iftop界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量
常用的参数
-i设定监测的网卡,如:# iftop -i eth1
-B 以bytes为单位显示流量(默认是bits),如:# iftop -B
-n使host信息默认直接都显示IP,如:# iftop -n
-N使端口信息默认直接都显示端口号,如: # iftop -N
-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),帮助,显示参数信息
-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b使流量图形条默认就显示;
-f这个暂时还不太会用,过滤计算包用的;
-P使host信息及端口信息默认就都显示;
-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M
常用命令
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。