您的位置:首页 > 运维架构 > Nginx

Linux下Nginx日志分析

2015-12-18 09:29 639 查看


Access logs

以nginx默认的日志格式为例:
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"


各字段的含义分别是:
$remote_addr
 请求者IP
$remote_user
 HTTP授权用户,如果不使用Http-based认证方式,其值为空
[$time_local]
 服务器时间戳
"$request"
 HTTP请求类型(如GET,POST等)+HTTP请求路径(不含参数)+HTTP协议版本
$status
 服务器返回的状态码(如200,404,5xx等)
$body_bytes_sent
 服务器响应报文大小,单位byte
"$http_referer"
 referer字段值
"$http_user_agent"
 User Agent字段

以下列举常用的日志分析命令


根据状态码进行请求次数排序

cat access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -r


输出样例:
210433 200
38587 302
17571 304
4544 502
2616 499
1144 500
706 404
355 504
355 301
252 000
9 403
6 206
2 408
2 400


或者使用awk:
awk '{print $9}' access.log | sort | uniq -c | sort -r


上例显示有704次404请求,接下来是如何找到这些请求的URL
awk '($9 ~ /404/)' access.log | awk '{print $7}' | sort | uniq -c | sort -r


输出样列:
21 /members/katrinakp/activity/2338/
19 /blogger-to-wordpress/robots.txt
14 /rtpanel/robots.txt


接下来考虑如果找到这些请求的IP地址,使用命令:
awk -F\" '($2 ~ "/wp-admin/install.php"){print $1}' access.log | awk '{print $1}' | sort | uniq -c | sort -r


输出样例:
14 50.133.11.248
12 97.106.26.244
11 108.247.254.37
10 173.22.165.123


php后缀的404请求(通常是嗅探)
awk '($9 ~ /404/)' access.log | awk -F\" '($2 ~ "^GET .*\.php")' | awk '{print $7}' | sort | uniq -c | sort -r | head -n 20


按URL的请求数排序

awk -F\" '{print $2}' access.log | awk '{print $2}' | sort | uniq -c | sort -r


url包含XYZ:
awk -F\" '($2 ~ "ref"){print $2}' access.log | awk '{print $2}' | sort | uniq -c | sort -r


1,查看apache进程:

ps aux | grep httpd | grep -v grep | wc -l

2,查看80端口的tcp连接:

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

3,通过日志查看当天ip连接数,过滤重复:

cat access_log | grep "20/Oct/2008" | awk '{print $2}' | sort | uniq -c | sort -nr

4,当天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

5,当天访问页面排前10的url:

cat access_log | grep "20/Oct/2008:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

6,用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr

<pre>

接着从日志里查看该ip在干嘛:

<pre lang="php">

cat access_log | grep 122.102.7.212| awk '{print $1"\t"$8}' | sort | uniq -c | sort -nr | less

7,查看某一时间段的ip连接数:

grep "2006:0[7-8]" www20060723.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l

 

通过日志查看当天ip连接数,过滤重复
cat access.log | grep "20/Mar/2011" | awk '{print $3}' | sort | uniq -c | sort -nr

 

当天访问页面排前10的url:
cat access.log | grep "20/Mar/2011" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

 

找出访问次数最多的10个IP
awk '{print $3}' access.log |sort |uniq -c|sort -nr|head

 

找出某天访问次数最多的10个IP

cat /tmp/access.log | grep "20/Mar/2011" |awk '{print $3}'|sort |uniq -c|sort -nr|head

当天ip连接数最高的ip都在干些什么:
cat access.log | grep "10.0.21.17" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

找出访问次数最多的几个分钟
 awk '{print $1}' access.log | grep "20/Mar/2011" |cut -c 14-18|sort|uniq -c|sort -nr|head
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: