调整 Docker 中 nginx 的日志级别
調(diào)整 Docker 中 nginx 的日志級別
Intro
最近發(fā)現(xiàn)我們的一個應(yīng)用產(chǎn)生了很多日志,而這些日志大多都是 nginx 的 access_log,我們默認會把標準輸出收集到 es 里分析應(yīng)用日志,但是很多都是 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
我們可以在容器里執(zhí)行 cat /etc/nginx/nginx.conf 來查看默認的 nginx ?配置
default nginx conf從上面可以看出來 error_log 的級別是 notice,如果有需要也可以配置成 warn/error,具體的日志配置可以參考官方文檔介紹,可配置的日志級別有:debug, info, notice, warn, error, crit, alert, emerg
access_log 可以使用 off 直接禁用掉或者使用另外一個 path,這樣就不會直接輸出到標準輸出中,就不會有那么多的日志了
New conf
知道配置怎么修改了就比較方便了,只需要把我們新改的配置替換掉默認的配置就可以了,新的配置如下:
user??nginx; worker_processes??auto;error_log??/var/log/nginx/error.log?error; pid????????/var/run/nginx.pid;events?{worker_connections??1024; }http?{include???????/etc/nginx/mime.types;default_type??application/octet-stream;access_log??off;sendfile????????on;#tcp_nopush?????on;keepalive_timeout??65;#gzip??on;include?/etc/nginx/conf.d/*.conf; }然后在 Dockerfile 里用新的配置覆寫默認的配置:
#?Copy?custom?nginx?config COPY?/conf/nginx.conf?/etc/nginx/nginx.confMore
如果你想記錄 access_log 但是不想直接,可以配置 access_log 為另外的文件名即可,就會寫入對應(yīng)配置的文件中,但不會直接輸出到標準輸出,也就不會造成采集的日志很多都是 access_log
如果不想記錄,不關(guān)心 access_log 可以直接使用 off 配置禁用 access_log,如果想選擇性地記錄比如 2xx/3xx 不記錄,其他情況記錄也是可以的,nginx 文檔上也有介紹,可以根據(jù)自己需要進行選擇
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
總結(jié)
以上是生活随笔為你收集整理的调整 Docker 中 nginx 的日志级别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同学,解决下这个 Bug!
- 下一篇: 多线程环境下,程序真是危机四伏