无聊折腾自己的阿里云服务器,顺便学一波日志分析。
首先理清几个概念:
PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
uv(unique visitor),指访问某个站点或点击某条新闻的不同IP地址的人数。
我的阿里云上安装了centos系统,查看nginx日志的目录是 /home/wwwlogs/ 配置文件是nginx.conf
一般情况日志的结构如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host '
'$status $request_length $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
- remote_addr : 客户端地址
- remote_user : 客户端用户名
- time_local : 服务器时间
- request : 请求内容,包括方法名,地址,和http协议
- http_host : 用户请求是使用的http地址
- status : 返回的http 状态码
- request_length : 请求大小
- body_bytes_sent : 返回的大小
- http_referer : 来源页
- http_user_agent : 客户端名称
- request_time : 整体请求延时
wwwlogs下面有access.log和error.log 前者代表访问你服务器的ip和相应的内容,结构大概如下:
获取pv数的指令比较简单:
cat /usr/local/nginx/logs/access.log | wc -l
正常情况下,比如说只想查看访问的所有ip地址 那就只需查看第一行即可:
cat access.log|awk '{print $1}'
如果要查看ip数量的话,则:
cat /usr/local/nginx/logs/access.log | awk '{print $1}' |sort| uniq | wc -l
当然 往往我们是需要根据访问量来进行数据分析的,那么可以这么操作:
cat access.log |awk '{print $1}'|sort|uniq -c|sort -rn|more
按照访问次数来从大到小排序访问ip 结果如下:
如果想查看访问的状态码的话,那也就只需把print 1$改成print 9$ 因为状态码所处的列数是9 结果如下:
对于获取某一时刻的访问量:
cat /usr/local/class/logs/access.log | grep date | wc -l
获取的数据也可以导出 比如上面的指令可以通过
cat /usr/local/class/logs/access.log | grep 2017:13:28:55 | wc -l > access.csv
导出为csv文件
其实用来用去也就是那么几个命令:
cat:输入文件内容
grep:过滤文本
'sort':排序
'uniq':去重
'awk':文本处理
当然,复杂的网站管理肯定远不止这些,不过我这种自己用的没什么访问的小服务器。。这些也就勉强够用了。。。