nginx的日志分析
来源:互联网 发布:万方数据库怎么检索 编辑:程序博客网 时间:2024/05/21 07:00
- nginx日志设置
安装完nginx后,配置文件nginx.conf里的http模块下,日志格式默认是注释掉的。
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;
在上面log_format指令的下面一行添加
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time';
然后在vhost/lee.conf下添加
access_log logs/lee.access.log main;
重新加载nginx
/usr/local/nginx/sbin/nginx -s reload
浏览器访问首页后,可以在logs/lee.access.log下看到访问日志
192.168.2.100 - - [29/Nov/2017:21:34:29 +0800] "GET /misc.php?mod=patch&action=ipnotice&_r=0.6885789419146087&inajax=1&ajaxtarget=ip_notice HTTP/1.1" 200 65 "http://192.168.2.118/home.php?mod=space&uid=1&do=profile" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36" 0.037
- 参数含义
符号- 代表空log_format 定义日志格式main 定义调用的日志名称$remote_addr 访问的客户端ip地址$remote_user 访问的客户端用户名称$time_local 访问的时间,本地客户端的时间$request http协议内容和用户请求的URL,注意双引号$status 返回http请求的状态$body_bytes_sent 发送给客户端的字节数,不包括响应头,单位是字节$http_referer 记录从哪个链接页面访问过来的,一般http://开头,注意双引号$http_user_agent 客户端浏览器的相关信息,包括版本,浏览器的爬虫访问等$request_time 请求处理时间,与dns/对方收不收到无关等,仅仅是本身处理的时间,单位秒,精度毫秒,越小越好,有时候显示0,瞬间处理,是因为客户端访问的时候本身读取的是浏览器缓存,比如图片,缓存状态码是304$server_name 虚拟主机名称$http_x_forwarded_for 请求方的真实ip地址$upstream_status upstream的状态$ssl_protocol ssl协议版本$bytes_sent 发送给客户端的总字节数$connection_requests 当前一个连接获得的请求数量$request_length 请求的长度,包含了请求行/请求头/请求内容$msec 记录日志写入时间,需要消耗i/o$upstream_response_time 后端的接受与处理,程序的响应时间,服务从后端建立连接开始到接收数据然后关闭连接之间的总时间有时候$http_referer内容会显示空,也就是符号-,就是无从查到从哪里来访问本页面的链接,有可能是直接在服务器里使用curl -s 网址,从而直接访问页面内容。
把上面logs/lee.access.log下的日志内容分割来看
1.192.168.2.100 访问的客户端ip \
2.- remote_user为空 \
3.[29/Nov/2017:21:34:29 +0800] 访问的时间 \
4.”GET /misc.php?mod=patch&action=ipnotice&_r=0.6885789419146087&inajax=1&ajaxtarget=ip_notice HTTP/1.1” 访问的方式,访问的页面url,访问的http协议 \
5.200 返回的状态 \
6.65 发送给客户端的字节数 \
7.”http://192.168.2.118/home.php?mod=space&uid=1&do=profile” 从哪个页面访问过来的 \
8.”Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36” 客户端方面的信息,浏览器是谷歌,win系统等 \
9.0.217 请求处理时间,一般越小越好 \
- 常用日志信息查询
查看不同ip的数量
cat lee.access.log | awk {'print $1'} | sort | uniq | wc –lawk {'print $1'} lee.access.log | uniq | wc -l
查看访问量前20的ip
awk {'print $1'} lee.access.log | sort | uniq -c | sort -nr | head -20
查看pv总量
awk '{print $7}' lee.access.log | wc -l
查看404等错误页面出现次数大于20
awk '{if ($9~/502|499|500|503|404/) print $1,$9}' lee.access.log | sort |uniq -c | sort -r | awk '$1 > 1 {print $2}'
查看访问量前2名的页面
awk '{print $7}' lee.access.log |sort -n | uniq -c | sort -nr | head -2
查看处理时间大于2秒的页面,显示处理时间/url/访客ip
awk '$NF > 0.1 {print $NF,$7,$1}' lee.access.log
查看某个时间段的访问量
awk '/29\/Nov\/2017:21:50:21/,/29\/Nov\/2017:22:02:07/ {print $0}' lee.access.log | wc –lsed -n '/29\/Nov\/2017:21:50:21/,/29\/Nov\/2017:22:02:07/p' lee.access.log | wc -l
备注:
1) nginx代理到后端的apache,此时apache的访问日志中访问ip为nginx服的ip而不是真实访问ip。
在ngingx.conf配置文件中的location下添加
proxy_set_header X-Real-IP $remote_addr;
在http.conf配置文件中,把
LogFormat "%h %l %u %t \"%r\" %>s %b" common
修改为
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b" common
也就是把%h替换为%{X-Real-IP}i。
重新加载nginx和apache,再次访问,就可以看到真实的访问ip。
- nginx的日志分析
- 使用 awstats 分析 Nginx 的访问日志
- 使用 awstats 分析 Nginx 的访问日志
- 使用 awstats 分析 Nginx 的访问日志
- 有关nginx日志分析的一点记录
- 使用AWStats分析Nginx的访问日志
- 使用awstat分析Nginx的访问日志
- nginx安全日志分析脚本的编写
- Nginx日志中有用的分析脚本
- hive 分析nginx的access.log日志
- awk分析nginx日志
- nginx错误日志分析
- Linux Nginx日志分析
- awstats分析nginx日志
- nginx 日志分析
- nginx分析日志
- Nginx 日志分析
- nginx日志模块分析
- Linux 管理本地用户账户
- 状压DP
- 《什么是流式思维?》读后自认为的精华内容
- 欢迎使用CSDN-markdown编辑器
- MyBatis 动态SQL
- nginx的日志分析
- mysql(3):基础,常用命令句使用(2)--中集
- linux部署php运行环境,apache+mysql+php
- 用AJAX的时候出现XMLHttpRequest cannot load
- 12.06课堂笔记以及作业
- 中北大学NUC2017新生赛1001/NOJ-1981
- 面积最大的矩形
- 1076. Wifi密码 (15)
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结