在Docker环境中,我试图将Nginx的访问日志保存到文件中却遇到了困难
环境
Docker:4.20.1
Nginx:1.23
Docker:4.20.1 版本
Nginx:1.23 版本
以下是「記事的摘要」的中文翻译:
为了进行性能调优,我们打算使用名为alp的工具来分析访问日志,并测量每个端点的执行时间。但是,我们尝试更改Nginx的.conf文件中的日志输出位置时,并没有成功保存,为此我们苦苦挣扎。最后的结论是,在Docker的默认设置下,Nginx的日志文件设置了符号链接,解除这个符号链接后成功保存了日志。
目录
更改Nginx的access_log输出目标
删除符号链接
更改Nginx的access_log输出路径。
可以通过修改/etc/nginx/nginx.conf文件来更改Nginx的配置。
通过以下方式进行更改,可以更改日志的输出位置。(通常的保存位置是/var/log/nginx/access.log)
http{
access_log <File PATH>;
}
尝试更改保存路径并重新执行,但文件仍然未保存而直接输出到标准输出了…?
在Docker桌面中查找相关文件并执行 ls -l 命令后发现,确认为 /dev/stdout。
# ls -l var/log/nginx
total 0
lrwxrwxrwx 1 root root 11 May 23 08:51 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 May 23 08:51 error.log -> /dev/stderr
}
这个箭头似乎表示了符号链接的设置。由于符号链接在其他文章中有不同的解释,所以在此不详细说明,但它类似于指针。
换句话说,由于输出目标已经被链接,所以设置将日志输出到/var/log/nginx/access.log,但实际上被重定向到了sdtout。
符号化删除
我参考了有关编辑符号链接的文章。
似乎可以通过unlink <文件名>来删除,所以我马上试了一下(请注意我正在使用cd命令进行层级移动)。
# unlink access.log
# ls -l
total 0
lrwxrwxrwx 1 root root 11 May 23 08:51 error.log -> /dev/stderr
只需一种选项:
可以确认通过unlink命令删除了符号链接的设置。
只需要重新启动Docker镜像(虽然我对这些术语不是很了解,但应该不需要从容器中重新构建),日志就会被保存好了!!
结束
这次我们对Docker环境中Nginx日志保存方面进行了调查。
Docker真难啊…。