nginx 调试日志

nginx 要启用调试日志,需要在预编译源码的时候使用 configure 配置 nginx 以支持构建期间的 debug。命令如下:

./configure --with-debug

然后就可以在 nginx.conf 配置文件中使用 error_log 指令设置 debug 级别,配置如下:

error_log /path/to/log debug;

要验证 nginx 是否配置为支持调试,请运行 nginx -V 命令,然后查看 configure arguments 中是否存在 --with-debug 配置,如下:

hxstrive@ubuntu:~/Desktop$ nginx -V
nginx version: nginx/1.20.1
built by gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) 
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --with-debug ...

预构建的 Linux 包为使用 nginx-debug 二进制文件调试日志提供开箱即用的支持,该二进制文件可以使用命令运行。命令如下:

# 普通版本
service nginx stop
# 开启 debug 调试的版本
service nginx-debug start

然后设置 debug 级别。 Windows 的 nginx 二进制版本总是使用 debug 日志构建,因此只需设置调试级别就足够了。

注意:在不指定 debug 级别的情况下重新定义日志将禁用 debug 日志。在下面的示例中,在 server 级别重新定义日志会禁用此 server 的 debug 日志:

error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log;
        #...
    }
}

为了避免这种情况,应该注释掉重新定义日志的行,或者还应该添加 debug 级别规范:

error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log debug;
        #...
    }
}

选定客户端调试日志

nginx 中也可以只为选定的客户端地址启用 debug 日志,配置如下:

error_log /path/to/log;

events {
    debug_connection 192.168.1.1;
    debug_connection 192.168.10.0/24;
}

记录到循环内存缓冲区

调试日志可以写入循环内存缓冲区,我们可以将循环内存缓冲区想象为一个表格,该表格只允许保存n条数据,依次从0开始存储,直到n-1条数据。此时,如果还有日志需要保存,则继续从0开始进行保存。

配置循环内存缓冲区如下:

error_log memory:32m debug;

即使在高负载下,将 debug 级别日志记录到循环内存缓冲区也不会对性能产生重大影响。在这种情况下,可以使用如下所示的 gdb 脚本提取日志:

set $log = ngx_cycle->log

while $log->writer != ngx_log_memory_writer
    set $log = $log->next
end

set $buf = (ngx_log_memory_buf_t *) $log->wdata
dump binary memory debug_log.txt $buf->start $buf->end
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号