配置nginx只打印延迟超过0.1s和非2XX的accesslog

背景

当业务accesslog全开时,写入es的qps达到了10W,评估后觉得不太值得,所以考虑抽样打印。查看相关文档后发现目前我们使用的nginx版本不支持抽样打印,所以考虑其他解决方案。经过分析,其实我们一般排查问题只需要非20X和延迟较高的访问日志,于是设置nginx只打印延迟超过0.1s和非2XX的accesslog。

具体配置

注意:以下以下为全局配置,要放到http配置内,不能放到server配置内

map $upstream_response_time $u_r_t {
    default 0;
    ~(\d+).[1-9][0-9][0-9] 1;
}

map $status $loggable{
    default 0;
    ~^[345] 1;
}

access_log      /dev/stdout json buffer=10K if=$u_r_t; #json是前面定义的日志模板名
access_log      /dev/stdout json buffer=10K if=$loggable;
posted @ 2022-03-23 23:52  打个酱油6161  阅读(98)  评论(0编辑  收藏  举报