nginx(二)---Nginx 日志Log
- 日志配置
- 日志轮转/切割
- 日志分析
1.日志配置
1.1日志模块
官方文档 http://nginx.org/en/docs/http/ngx_http_log_module.html
日志模块的名称 ngx_http_log_module
1.2相关指令
log_format 日志格式
access_log 访问日志
error_log 错误日志open_log_file_cache 日志缓存
1.3日志的格式和命令
log_format
(一)简介
Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
(二)语法
Syntax: log_format name [escape=default|json] string ...;
name 表示格式名称
string 表示定义的格式
(三)默认值
Default: log_format combined "...";
log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式
(四)网站代理LB
例如代理服务器的日志格式就不同 :
如果Nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
$remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,
用来记录客户端IP地址和客户端请求的服务器地址。nginx代理日志格式如下:
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
(五)定义设置位置:vim /etc/nginx/nginx.conf
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志格式允许包含的变量:
$remote_addr, 远程地址: 记录客户端IP地址
$remote_user 远程用户:记录客户端用户名称
[$time_local] 本地时间:服务器自身时间
$request 请求:记录请求的URL和HTTP协议:
"GET /1.html HTTP/1.1" "GET /index.html HTTP/1.1"
$status 状态:记录请求状态:
200 404 503 100 301
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小
$http_referer 记录从哪个页面链接访问过来的 (超链接)
$http_user_agent 记录客户端浏览器相关信息 火狐 IE
$http_x_forwarded_for 代理IP
old:
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$bytes_sent 发送给客户端的总字节数 (可在主配置文件中,增加此项观c)
$msec 日志写入时间。单位为秒,精度是毫秒。
(六)提示:总有一个404提示
favicon.ico 文件是浏览器收藏网址时显示的图标,当第一次访问页面时,浏览器会自动发起请求获取页面的favicon.ico文件。当/favicon.ico文件不存在时,服务器会记录404日志。
127.0.0.1 - - [26/Jul/2015:22:25:07 +0800] “GET /favicon.ico HTTP/1.1” 404 168 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko/20100101 Firefox/36.0” “-”
127.0.0.1 - - [26/Jul/2015:22:25:07 +0800] “GET /favicon.ico HTTP/1.1” 404 168 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko/20100101 Firefox/36.0” “-“
解决办法
当一个站点没有设置favicon.ico时,access.log会记录了大量favicon.ico 404信息。
这样有两个缺点:
1.使access.log文件变大,记录很多没有用的数据。
2.因为大部分是favicon.ico 404信息,当要查看信息时,会影响搜寻效率。解决方法如下:
在nginx的配置中加入location = /favicon.ico {
log_not_found off;
access_log off;
}
以上配置说明:
location = /favicon.ico 表示当访问/favicon.ico时,
log_not_found off 关闭日志
access_log off 不记录在access.log完整配置如下:
server {
listen 80;
server_name fdipzone.com;
root /Users/fdipzone/home;access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log debug;location = /favicon.ico {
log_not_found off;
access_log off;
}location / {
index index.html index.htm index.php;
include /usr/local/etc/nginx/conf.d/php-fpm;
}
}
1.4访问日志和错误日志:access_log error_log
案例:
某条日志记录:
192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"某条日志记录含义:
192.远程主机IP
- - 用户
【2017】时间
get获得,下载,还有post提交。
/nginx-logo.png 下载图片
http版本
状态码 什么结果。对,还是错
368 大小
引用自哪个连接,主页http://192.168.100.10/
Mozilla 5.0浏览器的版本
Windows NT 客户端系统类型
-远程客户端主机地址
1.5日志缓存
(一)简介
大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的IO,与业务无关。
可以使用open_log_file_cache来设
Syntax:
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
max 1000 指的是日志文件的FD,最大的缓存数量为1000。超了怎么办,看下面
min_users 3 20秒内小于3次访问的FD,就给你清掉,结合inactive 20s 的时间。
valid 1m 检查周期为1分钟。
总结:缓存最多1000个,到了极限,每分钟开始清除掉 20秒内小于3次的文件FD.Default: open_log_file_cache off;
Context: http, server, locatition
http{} 将整个服务器所有网站,所有页面的日志进行缓存
server{} 将某一个网站的所有页面日志,进行缓存
location{}某一个页面的日志,进行缓存。
2.日志轮转/切割
2.1概况
Nginx安装,会默认启动日志轮转。
rpm -ql nginx| grep log
/etc/logrotate.d/nginx
/var/log/nginx
2.2观察日志轮转的含义
vim /etc/logrotate.d/nginx :
/var/log/nginx/*log { 待切割的日志
create 0644 nginx nginx 创建新的日志文件,属主
daily 天
rotate 10 保留10份
missingok 丢失不提示
notifempty 空文件的话,不转储(轮转)
compress 压缩
sharedscripts 轮转后脚本
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true :
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。endscript
}
2.3轮转语句
指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
2.4切割原理回顾
1.cron每小时呼唤一次anacron vim /etc/cron.hourly/0anacron
2.anacrontab以天,周,月循环往复 vim /etc/anacrontab
3.天循环 vim /etc/cron.daily/logrotate
4.立刻循环 指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
5.anacron当天的时间戳 vim /var/spool/anacron/cron.daily
6.anacron循环后的时间戳 vim /var/lib/logrotate/logrotate.status"/var/log/nginx/host.404.log" 2017-11-19-0:8:56
根据该时间确定是否轮转。
3.日志分析:准备好一份日志
3.1常用字段
$remote_addr $1 远程客户端地址
$time_local $4 本机时间
$request $7 请求URL
$status $9 状态码
$body_bytes_sent $10 请求体积
3.2测试
(一)统计2017年9月5日 PV量
grep '05/Sep/2017' cd.mobiletrain.org.log |wc -l
8点-9点间的PV量
grep '05/Sep/2017:08' sz.mobiletrain.org.log |wc -l
awk '$4>="[05/Sep/2017:08:00:00" && $4<="[05/Sep/2017:09:00:00" {print $0}' sz.mobiletrain.org.log | wc -l
(二) 统计2017年9月5日 一天内访问最多的10个IP(ip top10)
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){print i,ips[i]} } '| sort -k2 -rn | head -n10
(三)统计2017年9月5日 访问大于100次的IP
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){ if(ips[i]>100) {print i,ips[i]}} } '| sort -k2 -rn | head -n10
(四) 统计2017年9月5日 访问最多的10个页面($request top 10)
grep '05/Sep/2017' cd.mobiletrain.org.log |awk '{urls[$7]++} END{for(i in urls){print urls[i],i}}' |sort -k1 -rn |head -n10
(五)统计2017年9月5日 每个URL访问内容总大小($body_bytes_sent)
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{ urls[$7]++; size[$7]+=$10} END{for(i in urls){print urls[i],size[i],i}}' | sort -k1 -rn | head -n10
(六)统计2017年9月5日 每个IP访问状态码数量($status)
grep '05/Sep/2017' cd.mobiletrain.org.log | awk '{ip_code[$1" "$9]++} END{ for(i in ip_code){ print i,ip_code[i] } }' | sort -k3 -rn | head -n10
(七) 统计2017年9月5日 每个IP访问状态码为404及出现次数($status)
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{if($9=="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i,ip_code[i]}}'
(八)统计前一分钟的PV量
date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M);
awk -v date=$date '$0 ~ date {i++} END{print i}' sz.mobiletrain.org.log
shell中的变量在awk程序中无法使用,因为在执行AWK时,是一个新的进程去处理的,因此就需要-v 来向awk程序中传参数了,你比如在shell程序中有一个变量a=15,你在awk程序中直接使用变量a是不行的,而你用awk -v b=a, 这样在AWK程序中就可以使用变量b了!也就相当于使用a了!
# date=$(date -d '-1 minute' +%Y:%H:%M); awk -v date=$date '$0 ~ date{i++}END{print i}' /var/log/nginx/xuleilinux.access.log
(九)统计2017年9月5日 8:30-9:00,每个IP,出现404状态码的数量
awk '$4>="[05/Sep/2017:08:30:00" && $4<="[05/Sep/2017:09:00:00" {if($9=="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}' sz.mobiletrain.org.log
(十)统计2017年9月5日 各种状态码数量
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{code[$9]++} END{for(i in code){print i,code[i]}}'
百分比
grep '05/Sep/2017' sz.mobiletrain.org.log | awk '{code[$9]++;total++} END{for(i in code){printf i" ";printf code[i]"\t";printf "%.2f",code[i]/total*100;print "%"}}'
nginx(二)---Nginx 日志Log相关推荐
- 快速掌握Nginx(二) —— Nginx的Location和Rewrite
1 location详解 1.location匹配规则 Nginx中location的作用是根据Url来决定怎么处理用户请求(转发请求给其他服务器处理或者查找本地文件进行处理).location支持正 ...
- nginx日志log
一.日志配置 1.相关指令:log_format,access_log,error_log,open_log_file_cache 2.日志格式:log_format vim /etc/nginx/n ...
- nginx 获取body参数_日志分析系列(外传二):Nginx日志统一化
本系列故事纯属虚构,如有雷同实属巧合 为了完成对Nginx服务器的日志分析,小B对Q公司的Nginx日志做了统一化要求.下面是小B在统一化过程中遇到的一些知识点: Nginx日志与字段解析 Q公司的N ...
- Nginx其他配置——日志管理、网页压缩、访问控制
一.Nginx日志切割 在生产环境中每一天的日志文件都是要打包备份的,如果每天都手动的去截取日志,重命名这样就很不方便,所以我们编写一个脚本并建立一个定时任务来进行这些工作 1.编辑脚本文件,加权限 ...
- awstats linux日志分析,日志分析:用AWStats分析Nginx的访问日志,它可以统计您站点的如...
日志分析:用AWStats分析Nginx的访问日志,它可以统计您站点的如 Awstats是一个免费非常简洁而且强大有个性的统计工具.它可以统计您站点的如下信息: 一:访问量,访问次数,页面浏览量,点击 ...
- Nginx源代码分析 - 日志处理
我看Nginx源代码的时候,感觉整个系统都在传递log指针.log在nginx里是比较关键的.日志和内存分配是最基础的两个起点代码,最好是在自己写的程序框架中早点完善并实现.以免未来要用大量的精力调整 ...
- Nginx(二) 配置与调试
nginx 主配置文件在安装目录下的conf中,名字为nginx.conf: 主配置文件主要分为4部分:main(全局设置).server(主机设置).upstream(负载均衡服务器设置)和loca ...
- nginx php 错误日志,PHP 错误与异常的日志记录
提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到 ...
- nginx error_log 错误日志配置说明
nginx的error_log类型如下(从左到右:debug最详细 crit最少): [ debug | info | notice | warn | error | crit ] 例如:erro ...
- nginx服务器access_log日志分析及配置详解
本博客转载于:http://www.pythontab.com/html/2013/linuxkaiyuan_0104/96.html nginx的log日志分为access log 和 error ...
最新文章
- java threetable,Java XWPFDocument.createTable方法代码示例
- Matlab读取文本数据
- Python之路----------内置函数
- f1 score 代码_腾讯广告算法大赛冠军代码解读:稠密特征工程
- uni-app打包h5
- SpringBoot2.x Flowable 6.4.2 开源项目
- 2017.10.25 书柜的尺寸 失败总结
- 华为机试HJ6:质数因子
- [转载] Python类属性、类方法和静态方法
- java quartz实例_Java任务调度框架Quartz教程实例
- Java中设计模式之装饰者模式-3
- 一级指针易犯错误模型
- 全国DNS服务器IP地址【电信、网通、铁通】
- HTML---网络编程基础知识(2)
- Viddy上视频营销最成功的6家公司
- 小程序开发-准备工作
- Linux 2.6下Driver开发的34个变化[转贴]
- 随笔 | 近期工作感悟
- 利用留数定理计算实积分进阶例子
- rt1052 usb速率_如何才能赋予RT1052超级视频编解码能力?