nginx的access_log日志怎么设置

nginx的access_log日志怎么设置

本文小编为大家详细介绍“nginx的access_log日志怎么设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“nginx的access_log日志怎么设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

nginx 日志主要有两条指令:1)log_format:用来设置日志格式;2)access_log:用来指定日志文件的存放路径、格式

log_format 日志格式

1、语法:

log_format name(格式名字) 格式样式(即想要得到什么样的日志内容) 示例:

log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"'

2、具体参数格式

3、x_forwarded_for:

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_addr拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

:在server中设置x_forwarded_for

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

access_log

用了log_format 指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;

1、语法:

access_log path(存放路径) format (自定义日志名称) 示例:

access_loglogs/access.logmain;

2、设置刷盘策略:

access_log/data/logs/nginx-access.logbuffer=32kflush=5s;

buffer 满 32k 才刷盘;假如 buffer 不满 5s 钟强制刷盘。

:一般log_format在全局设置,可以设置多个。access_log 可以在全局设置,但往往是定义在虚拟主机(server)中的location中。 例如:

http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''"$status"$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"''"$gzip_ratio"$request_time$bytes_sent$request_length';log_formatsrcache_log'$remote_addr-$remote_user[$time_local]"$request"''"$status"$body_bytes_sent$request_time$bytes_sent$request_length''[$upstream_response_time][$srcache_fetch_status][$srcache_store_status][$srcache_expire]';open_log_file_cachemax=1000inactive=60s;server{server_name~^(www\.)?(.+)$;access_loglogs/$2-access.logmain;error_loglogs/$2-error.log;location/srcache{access_loglogs/access-srcache.logsrcache_log;}}}

3、其他:

1)error_log:

配置错误日志,例如上例。

2)open_log_file_cache:

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off)。 语法:

open_log_file_cachemax=N[inactive=time][min_uses=N][valid=time];

参数注释如下:

  • max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
  • inactive:设置存活时间,默认是10s
  • min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
  • valid:设置检查频率,默认60s

open_log_file_cachemax=1000inactive=20svalid=1mmin_uses=2;

3)日志分析:

通过对日志格式的定义,就可以使用常见的 Linux 命令行工具进行分析了:

查找访问频率最高的 URL 和次数:

cataccess.log|awk-F‘^A’‘{print$10}’|sort|uniq-c

查找当前日志文件 500 错误的访问:

cataccess.log|awk-F‘^A’‘{if($5==500)print$0}’

查找当前日志文件 500 错误的数量: cat access.log | awk -F ‘^A’ ‘{if(0}’ | wc -l

查找某一分钟内 500 错误访问的数量:

cataccess.log|awk-F‘^A’‘{if($5==500)print$0}’|grep’09:00’|wc-l

查找耗时超过 1s 的慢请求:

tail-faccess.log|awk-F‘^A’‘{if($6>1)print$0}’

假如只想查看某些位:

tail-faccess.log|awk-F‘^A’‘{if($6>1)print$3″|”$4}’

查找 502 错误最多的 URL:

cataccess.log|awk-F‘^A’‘{if($5==502)print$11}’|sort|uniq-c

查找 200 空白页

cataccess.log|awk-F‘^A’‘{if($5==200&&$8print$3″|”$4″|”$11″|”$6}’

切割日志

Nginx 的日志都是写在一个文件当中的,不会自动地进行切割,如果访问量很大的话,将导致日志文件容量非常大,不便于管理和造成Nginx 日志写入效率低下等问题。所以,往往需要要对access_log、error_log日志进行切割。 切割日志一般利用USR1信号让nginx产生新的日志。实例:

#!/bin/bashlogdir="/data/logs/nginx"pid=`cat$logdir/nginx.pid`DATE=`date-d"1hoursago"+%Y%m%d%H`DATE_OLD=`date-d"7daysago"+%Y%m%d`foriin`ls$logdir/*access.log`;domv$i$i.$DATEdoneforiin`ls$logdir/*error.log`;domv$i$i.$DATEdonekill-sUSR1$pidrm-v$logdir"/access.log."$DATE_OLD*rm-v$logdir"/error.log."$DATE_OLD*

1、分析:

  • 将上面的脚本放到crontab中,每小时执行一次(0 ),这样每小时会把当前日志重命名成一个新文件;然后发送USR1这个信号让Nginx 重新生成一个新的日志。(相当于备份日志)
  • 将前7天的日志删除;

2、说明:

在没有执行kill -USR1 $pid之前,即便已经对文件执行了mv命令而改变了文件名称,nginx还是会向新命名的文件”*access.log.2016032623”照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。

3、logrotates:

使用系统自带的logrotates,也可以实现nginx的日志分割,查看其bash源码,发现也是发送USR1这个信号。

读到这里,这篇“nginx的access_log日志怎么设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-02-16 23:48:05
收藏
分享
海报
0 条评论
41
上一篇:如何使用Nginx定义Header头信息 下一篇:Nginx服务器怎么开启SSL
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码