如何调整Docker中nginx的日志级别详解
目录
- Intro
- Nginx Dockerfile
- New conf
- More
- References
Intro
最近发现我们的一个应用产生了很多日志,而这些日志大多都是 nginx 的 access_log,我们默认会把标准输出收集到 es 里分析应用日志,但是很多都是 access_log 就可能会掩盖掉真实的错误日志,所以可能有时候我们并不想输出这些 access_log,示例如下:
文章图片
Nginx Dockerfile
去 Github 上扒了一下 Nginx 的 Dockerfile, docker-nginx/Dockerfile at master · nginxinc/docker-nginx (github.com)
文章图片
可以看到 nginx 默认会把 access_log 和 error_log 链接到标准输出中,这也就是为什么我们在docker logs 或者 kubectl logs的时候能够看到 access_log
我们可以在容器里执行 cat /etc/nginx/nginx.conf 来查看默认的 nginx配置
文章图片
【如何调整Docker中nginx的日志级别详解】default nginx conf
从上面可以看出来 error_log 的级别是 notice,如果有需要也可以配置成 warn/error,具体的日志配置可以参考官方文档介绍,可配置的日志级别有:debug, info, notice, warn, error, crit, alert, emerg
access_log 可以使用 off 直接禁用掉或者使用另外一个 path,这样就不会直接输出到标准输出中,就不会有那么多的日志了
New conf
知道配置怎么修改了就比较方便了,只需要把我们新改的配置替换掉默认的配置就可以了,新的配置如下:
usernginx; worker_processesauto; error_log/var/log/nginx/error.log error; pid/var/run/nginx.pid; events {worker_connections1024; }http {include/etc/nginx/mime.types; default_typeapplication/octet-stream; access_logoff; sendfileon; #tcp_nopushon; keepalive_timeout65; #gzipon; include /etc/nginx/conf.d/*.conf; }
然后在 Dockerfile 里用新的配置覆写默认的配置:
# Copy custom nginx configCOPY /conf/nginx.conf /etc/nginx/nginx.conf
More
如果你想记录 access_log 但是不想直接,可以配置 access_log 为另外的文件名即可,就会写入对应配置的文件中,但不会直接输出到标准输出,也就不会造成采集的日志很多都是 access_log
如果不想记录,不关心 access_log 可以直接使用 off 配置禁用 access_log,如果想选择性地记录比如 2xx/3xx 不记录,其他情况记录也是可以的,nginx 文档上也有介绍,可以根据自己需要进行选择
map $status $loggable {~^[23]0; default 1; }access_log /path/to/access.log combined if=$loggable;
References
- https://notestack.io/public/configure-nginx-logging-in-a-docker-container/874f1253-cf1a-4c62-9d2d-467ab23c258d
- https://docs.nginx.com/nginx/admin-guide/monitoring/logging/
- https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/Dockerfile
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树
- Linux下面如何查看tomcat已经使用多少线程
- thinkphp|thinkphp 3.2 如何调用第三方类库