nginx的log日志分为access log 和 error log
access log :记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息
error log :是记录服务器错误日志
access.log日志的形式如下:
其实nginx access日志的格式不是一成不变的,是可以自定义的。
在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式
看一下和上述日志匹配的log格式设置:
配置access log日志的存储位置及文件,注意:access.log文件是可以按日期进行分割的,方便查看及处理
nginx的log_format可以自主选择参数用于指示服务器的活动状态,默认的是:
假设将nginx服务器作为web服务器,位于负载均衡设备,nginx反向代理之后,不能获取到客户端的真实ip地址了。
原因是进过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip。通过$remote_addr变量拿到的将是反向代理服务器的ip地址,但是,反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端ip地址和原来客户端请求的服务器地址。
语法:access_log path [format [buffer=size [flush=time]]]
配置段:
gzip压缩等级
buffer设置内存缓存区大小
flush保存在缓存去中的最长时间
不记录日志:access_log off
使用默认combined格式记录日志:access_log logs/access.log 或access_log logs/access.log combined
注意:nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则报错。
此外,对于每一条日志记录,都将是先打来文件,再写入日志,然后关闭,可以使用open_log_file_cache来设置日志文件缓存(默认是off)。
系统自动切割,利用linux操作系统的定时任务,执行sh脚本,来完成日志的自动切割。
通常,在生产环境中使用 Nginx 进行反向代理和负载均衡或者各种其他处理时,良好的日志记录是非常关键的一环。通过精心配置的 Nginx 日志,我们可以获取用户的真实 ip、浏览器信息,请求处理时间,请求URL等,这样方便我们排查和回溯错误。具体要记录哪些信息,可以通过 Nginx 中的 log_format 指令定义,由它定义日志的格式。而对于使用哪种日志格式和设置日志的保存路径则由 access_log 指令指定的。另外在 Nginx 中还有一个配置服务器和请求处理过程中的错误信息的指令,那就是 error_log指令。最后,如果在配置的日志文件路径中使用了变量,我们可以通过open_log_file_cache指令来设置缓存,提升性能。对于大型的网站而言,大量的 http 请求意味着大量的日志记录,及时按天或按大小进行 Nginx 日志备份也至关重要的。
在 Nginx 的日志模块主要有2个, ngx_stream_log_module 和 ngx_http_log_module,分别表示四层的日志模块和七层的日志模块,其指令和用法都是一致的,接下来我们只针对 http 请求的日志进行说明和使用。
在 ngx_http_log_module 模块中,只3个指令,分别是 access_log、log_format 和 open_log_file_cache。这些指令具体的格式如下:
ngx_http_log_module 模块用来按某个格式来记录请求的日志。模块中的 log_format 指令就是用来设置打印日志的格式,该指令中可以使用 Nginx 中的各种变量,比如保存远端ip地址的变量$remote_addr等。一个简单的示例如下:
接下来是 access_log 指令。参考前面的指令格式。关闭日志记录,直接是写 access_log off ,如果打开 access 日志,它的写法是:
access_log 指令示例:
每一条日志记录的写入都是先打开文件再写入记录,然后关闭日志文件。如果你的日志文件路径中使用了变量,如 access_log /var/logs/$host/access.log ,为提高性能,可以使用 open_log_file_cache 指令设置日志文件描述符的缓存。可以通过 open_log_file_cache off 关闭该缓存。该指令的几个参数选项说明如下:
最后 error_log 是 错误日志配置指令,主要记录客户端访问 Nginx 出错时的日志,它不不支持自定义日志格式。通过检查错误日志,可以快速定位线上问题,所以也是很重要的。关闭错误日志的方式和 access_log不一样,没有 error_log off 这样关错误日志的用法,反而会将错误日志打到名为 off 的文件中。常用的关闭方式是:
就像在 Linux 系统中,输出到 /dev/null 的内容实际上等价于丢弃一样。
Nginx 的日志切割实现的核心是使用 nginx 命令的 reopen 参数实现,该参数的含义是重新开始记录日志文件。人工切的做法就是凌晨将日志备份,然后执行带reopen参数的命令:
执行后会重新生成 access.log 和 error.log,这就是手工切割的方式。通常我们会用 shell 脚本和定时任务来帮我我们完成自动切割。首先准备如下的 shell 脚本,它完成日志的备份以及给 nginx 进程发生 reopen 信号。
接下来,只要将这个脚本加入到 crontab 中即可,如下操作:
我们在 nginx.conf 中添加如下的日志配置:
这里我们综合了前面涉及的知识,这里只简单测试日志配置中 if 功能。我们设置请求的相应码为 3xx 和 4xx 时,日志不会记录。接下来,启动或者热加载 Nginx, 然后分别对应三个端口发送 http 请求并观察 access.log 日志:
本小节我们介绍了 log 相关的指令,包括访问日志和错误日志的指令。此外还介绍了 Nginx 中对日志切割的常用处理方法,这也是生产环境上使用日志备份的手段。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)