Myluzh Blog

Nginx日志格式化输出,日志切割

发布时间: 2024-2-28 文章作者: myluzh 分类名称: Nginx 朗读文章


0x01 日志格式化输出
root@iZbp12bkuvg20e1j3y9gtvZ:/etc/logrotate.d# cat /etc/nginx/nginx.conf 

http {
        # ...
        log_format main escape=none
          '$remote_addr - $remote_user [$time_iso8601] "$request_method $scheme://$host$request_uri" '
          '$status $body_bytes_sent "$http_referer" '
          '"$http_user_agent" "$http_x_forwarded_for" time=$request_time upstream_addr=$upstream_addr'
          '\n $request_body';
          
        access_log /var/log/nginx/access.log main;
        error_log /var/log/nginx/error.log;
        # ...
当你定义Nginx日志格式时,你可以指定使用哪些变量来记录不同的信息。在你提供的日志格式中,每个变量都代表着不同的信息
  • $remote_addr: 客户端的IP地址。
  • $remote_user: 客户端发送请求时提供的用户名。通常情况下为空。
  • [$time_local]: 记录访问时间,使用本地时间格式。
  • "$request_method: 请求方法,如GET、POST等。
  • $scheme: 请求所使用的协议方案,如http或https。
  • $host: 请求的主机名。
  • $request_uri: 包含请求的URI和查询字符串的完整请求地址。
  • $args: 请求中的参数。
  • $status: 服务器响应的状态码。
  • $body_bytes_sent: 发送给客户端的字节数。
  • "$http_referer": 表示请求来源的URL。
  • "$http_user_agent": 客户端的User-Agent,用于标识客户端的浏览器和操作系统等信息。
  • "$http_x_forwarded_for": X-Forwarded-For头部,用于记录客户端真实IP地址,当请求通过代理服务器时会添加该头部。
这些变量可以帮助你记录非常详细的访问日志,方便后续分析和监控。
0x02 日志切割
1、按照编号保存,最多保存14天
root@iZbp12bkuvg20e1j3y9gtvZ:/etc/logrotate.d# cat /etc/logrotate.d/nginx 

/var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}
2、按照日期保存,最多14天
root@iZbp12bkuvg20e1j3y9gtvZ:/etc/logrotate.d# cat /etc/logrotate.d/nginx
 
/var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        dateext
        # 可选:设置日期格式,这里使用默认的'%Y%m%d',即年月日格式
        #dateformat -%Y%m%d
        
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}

这段代码是用于配置Nginx日志分割的Logrotate规则。
  • daily: 每天执行一次日志分割。
  • missingok: 如果日志文件不存在,不报错并继续执行。
  • rotate 14: 保留14个旧日志文件。
  • compress: 对旧的日志文件进行压缩。
  • dateext:使用dateext选项使压缩文件名包含日期。
  • delaycompress: 在下一次日志分割时才对上一次的日志文件进行压缩。
  • notifempty: 如果日志文件为空,不进行日志分割。
  • create 0640 www-data adm: 创建新的日志文件时,设置文件权限为0640,属主为www-data,属组为adm。
  • sharedscripts: 在所有的日志文件都处理完毕后才执行一次脚本
  • prerotate和postrotate: 在日志文件被分割前后执行的命令。
  • invoke-rc.d nginx rotate >/dev/null 2>&1: 在日志分割后通过invoke-rc.d命令重启Nginx服务。
总的来说,这段配置代码指示Logrotate每天对Nginx的日志文件进行分割,保留14个旧日志文件,并在分割前后执行相应的脚本和命令。0x02 日志切割
日志文件的分割配置通常会在logrotate等工具中进行设置。你可以检查一下系统中的logrotate配置文件,通常在/etc/logrotate.d/目录下,找到与Nginx相关的配置文件,查看是否有针对Nginx日志文件的分割配置。

标签: nginx logging logrotate log_format access_log error_log

发表评论