美文网首页
根据status值分割nginx日志

根据status值分割nginx日志

作者: 码农工号9527 | 来源:发表于2021-12-21 15:29 被阅读0次

    从nginx 1.7版本开始,access_log日志文件中支持if语句判断。根据这个功能,我们可以根据status值分割nginx日志,正常200的访问记录放一个文件,404或者500等再放另外一个文件。对于后续分析nginx日志可能有用。

    语法:

    access_log path [format [buffer=size [flush=time]] [if=condition]];
    
    The if parameter (1.7.0) enables conditional logging.
    A request will not be logged if the condition evaluates to “0” or an empty string
    

    值是0时,access_log就不会记录日志。具体配置方法如下。

    在nginx.conf代码块中添加如下内容:

    map $status $status_1 {
        ~^1  1;
        default 0;
    }
    map $status $status_2 {
        ~^2  1;
        default 0;
    }
    map $status $status_3 {
        ~^3  1;
        default 0;
    }
    map $status $status_4 {
        ~^4  1;
        default 0;
    }
    map $status $status_5 {
        ~^5  1;
        default 0;
    }
    

    这个配置的意思 $status 是1开头的时候,就将 $status_1 的值 置为 1,否则默认值为 0,其他依次类推

    定义好判断值后,在具体server代码块中添加类似如下:

    server {
    
        ......
    
        access_log  /data/wwwlogs/access_log_status1.log  combined if=$status_1;
        access_log  /data/wwwlogs/access_log_status2.log  combined if=$status_2;
        access_log  /data/wwwlogs/access_log_status3.log  combined if=$status_3;
        access_log  /data/wwwlogs/access_log_status4.log  combined if=$status_4;
        access_log  /data/wwwlogs/access_log_status5.log  combined if=$status_5;
     }
    

    添加后reload重新载入nginx,可以看到nginx日志已经根据Status返回值正常分割。

    有关access_log参数的官方说明,语法如下:

    access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
     
    access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
     
    access_log syslog:server=address[,parameter=value] [format [if=condition]];
    

    buffer=size 为存放日志的缓冲区大小,flush=time 为将缓冲区的日志刷到磁盘的时间,gzip[=level] 表示压缩级别,[if=condition] 表示其他条件,一般场景这些参数都无需配置,极端优化时才可能考虑这些参数。

    access_log off中的off,表示不记录访问日志。
    如果不指定日志格式就会采用默认的combined格式记录日志。
    默认配置:access_log logs/access.log combined;
    放置位置在:http, server, location, if in location, limit_except中。

    更多操作,可以参考此地址:https://help.aliyun.com/document_detail/41274.html

    相关文章

      网友评论

          本文标题:根据status值分割nginx日志

          本文链接:https://www.haomeiwen.com/subject/vuexqrtx.html