1.根据访问IP统计UV
awk ‘{print $1}’ access.log | sort | uniq -c | wc -l |
2.统计访问URL统计PV
awk ‘{print $7}’ access.log | wc -l |
3.查询访问最频繁的URL
awk ‘{print $7}’ access.log | sort | uniq -c | sort -n -k 1 -r | more |
4.查询访问最频繁的IP
awk ‘{print $1}’ access.log | sort | uniq -c | sort -n -k 1 -r | more |
5.根据时间段统计查看日志
cat access.log| sed -n ‘/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p’|more
1).根据访问IP统计UV
awk ‘{print $1}’ access.log|sort | uniq -c |wc -l
2).统计访问URL统计PV
awk ‘{print $7}’ access.log|wc -l
3).查询访问最频繁的URL
awk ‘{print $7}’ access.log|sort | uniq -c |sort -n -k 1 -r|more
4).查询访问最频繁的IP
awk ‘{print $1}’ access.log|sort | uniq -c |sort -n -k 1 -r|more
5).根据时间段统计查看日志
cat access.log| sed -n ‘/14\/Mar\/2018:21/,/14\/Mar\/2018:22/p’|more
日志格式设置:
log_format abc ‘$remote_addr - $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘“$http_user_agent” “$http_x_forwarded_for” ‘
‘“$upstream_addr” “$upstream_status” “$upstream_response_time” “$request_time”’;
1
2
3
4
要筛选的日志内容:
115.192.201.137 - - [12/Sep/2016:00:00:01 +0800] “POST /process_upload/upload?ktvid=571012&dir=%5Cvod_score&filename=H20362_571012_02.10.00.00.1e.a6_20160911031948_Eva_20160910191932_201606271832_201412091434.score HTTP/1.1” 502 166 “-“ “Apache-HttpClient/4.3.5 (java 1.5)” -
1
脚本:
#!/bin/bash
read -p “请输入日志文件名:” logname
echo “IP:”
awk ‘{ip[$1]++}END{for(i in ip){print i,ip[i]}}’ $logname | sort -t ‘ ‘ -k2 -n | tail -5
echo “状态:”
awk -v FS=’”’ ‘{print $3}’ $logname | awk ‘{state[$1]++}END{for(i in state){print i,state[i]}}’ | sort -t ‘ ‘ -k2 -n | tail -5
echo “流量:”
awk -v FS=’”’ ‘{print $3}’ $logname | awk ‘{sum += $2}END{print sum/1024/1024/1024”GB”}’
echo “请求方法”
awk -v FS=’”’ ‘{print $2}’ $logname | awk ‘{way[$1]++}END{for(i in way){print i,way[i]}}’
echo “GET请求内容排序:”
grep “http://bigdata.changecan.com” $logname | grep GET | awk -v FS=’”’ ‘{print $4}’ | awk ‘{context[$1]++}END{for(i in context){print i,context[i]}}’| sort -t ‘ ‘ -k2 -n | tail
1
2
3
4
5
6
7
8
9
10
11
12
测试:
1
查看某状态下的时间段:
cat $logname | awk -F’ ‘ ‘{if ( $9 == 502 )print $0}’ | cut -d: -f1,2,3 | awk ‘{time[$4]++}END{for(i in time){print i,time[i]}}’ | sort -t’ ‘ -k2 -n > time.txt
1
统计每秒的请求数,top5的时间点(精确到秒)
awk ‘{print $4}’ access_20180319.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 5
1
统计每分钟的请求数,top100的时间点(精确到分钟)
awk ‘{print $4}’ access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100
1
统计每小时的请求数,top100的时间点(精确到小时)
awk ‘{print $4}’ access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100
1
查看当前TCP连接数
netstat -tan | grep “ESTABLISHED” | grep “:80” | wc -l
1
用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1”.”$2”.”$3”.”$4}’ | sort | uniq
1
列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前10条
cat access.log|awk ‘($NF > 1 && $7~/.php/){print $7}’|sort -n|uniq -c|sort -nr|head -10
1
统计网络连接数:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}’
SYN_RECV //一个连接请求已经到达,等待确认
ESTABLISHED //正常数据传输状态/当前并发连接数
FIN_WAIT2 //另一边已同意释放
ITMED_WAIT //等待所有分组死掉
CLOSING //两边同时尝试关闭
TIME_WAIT //另一边已初始化一个释放
LAST_ACK //等待所有分组死掉
netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”t”,state[key]}’
LAST_ACK N 即为正在等待处理的请求数,查服务器的tcp 新建连接数
1
2
3
4
5
6
7
8
9
10
访问日志格式:
log_format access ‘$remote_addr - $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘“$http_user_agent” $http_x_forwarded_for’;
$server_name:虚拟主机名称。
$remote_addr:远程客户端的IP地址。
-:空白,用一个“-”占位符替代,历史原因导致还存在。
$remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
[$time_local]:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的”+0800”表示服务器所处时区位于UTC之后的8小时。
$request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
$status:记录请求返回的http状态码,比如成功是200。
$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。请求页面大小,默认为B(byte)。
$http_referer:记录从哪个页面链接访问过来的。
$http_user_agent:客户端浏览器信息
$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
查看502状态下的时间段:
cat access_20161020.log | awk -F’ ‘ ‘{if ( $9 == 502 )print $0}’ | awk ‘{time[$4]++}END{for(i in time){print i,time[i]}}’ | sort -t’ ‘ -k2 -n > test.txt
1
http状态码:
304 - Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
400 - Bad Request 请求出现语法错误。
404 - Not Found 无法找到指定位置的资源。这也是一个常用的应答。
· 404.0 -(无) – 没有找到文件或目录。
· 404.1 - 无法在所请求的端口上访问 Web 站点。
· 404.2 - Web 服务扩展锁定策略阻止本请求。
· 404.3 - MIME 映射策略阻止本请求。
500 - Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
· 500.12 - 应用程序正忙于在 Web 服务器上重新启动。
· 500.13 - Web 服务器太忙。
· 500.15 - 不允许直接请求 Global.asa。
· 500.16 – UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
· 500.18 – URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
· 500.100 - 内部 ASP 错误。
502 - Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 亦说Web 服务器用作网关或代理服务器时收到了无效响应。
· 502.1 - CGI 应用程序超时。
· 502.2 - CGI 应用程序出错。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
流量单位换算:
1G=1024M 1M=1024KB 1KB=1024B
1 Byte(字节) = 8 bits(位)
1 Kb = 1024 bits(位)
1 KB = 1024 Bytes(字节)
1 Mb = 1024 Kb
1 MB = 1024 KB
1MB/s=8Mbps
B 和 b 分别代表 Bytes 和 bits
1
2
3
4
5
6
7
8
参考:
来访次数/访问次数(VV):
VV = VisitView(访问次数):记录所有访客1天内访问了多少次你的网站,相同的访客有可能多次访问您的网站。从访客来到您网站到最终关闭网站的所有页面离开,计为1次访问。若访客连续30分钟没有新开和刷新页面,或者访客关闭了浏览器,则被计算为本次访问结束。
独立访客(UV):
1天内相同访客多次访问网站,只计算为1个独立访客。
浏览次数(PV):
即通常说的PV(PageView)值,用户每打开1个网站页面,记录1个PV。用户多次打开同一页面PV累计多次。用以衡量网站用户访问的网页数量。
1.根据访问IP统计UV
awk ‘{print $1}’ access.log|sort | uniq -c |wc -l
1
2.统计访问URL统计PV
awk ‘{print $7}’ access.log|wc -l
1
3.查询访问最频繁的URL
awk ‘{print $7}’ access.log|sort | uniq -c |sort -n -k 1 -r|more
1
4.查询访问最频繁的IP
awk ‘{print $1}’ access.log|sort | uniq -c |sort -n -k 1 -r|more
1
5.根据时间段统计查看日志
cat access.log| sed -n ‘/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p’|more
1
按照日期提取log
sed -n ‘/Nov 21 08:02/,/Nov 21 08:03/p’ /var/log/messages
ngxtop是一个基于python的程序,可以在Python上安装。ngxtop通过实时解析nginx访问日志,并将结果(nginx服务器的有用指标)输出到终端。
主要的功能
当前有效请求
总请求计数摘要 (推荐学习:nginx教程)
按状态代码提供的总请求数(2xx,3xx,4xx,5xx)
发送平均字节
顶级远程地址
不仅能实时监控Nginx日志的访问还可以对以前的日志进行排查整理。
在Linux上安装ngxtop
首先,你需要安装PIP(Python包管理系统)
使用root凭据登录你的服务器
通过安装以下包启用EPEL存储库
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm
rpm -ivh epel-release-7-6.noarch.rpm
然后执行以下命令安装pip
yum install python-pip
最后使用下面安装ngxtop
pip install ngxtop
ngxtop使用详解
用法:
ngxtop [选项]
ngxtop [选项](print | top | avg | sum) |
ngxtop info