Loading... # [linux小白也能实现nginx日志按天优化!](https://mp.weixin.qq.com/s/qldW_oSHz7xVxKBLz5kqpg) 前言: 接着上一篇文章《记一次nginx拦截爬虫》,发现服务器nginx日志非常不好看,时间长了一大堆都在一个文件里边(甚至几年的),对于我这种linux小白就不友好了,所以想把日志分文件,这样至少我们去查看日志的时候会方便很多: 按天分文件 直接上nginx.conf配置 user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time'; #引入time_iso8601模块 设置时间 日期变量 map $time_iso8601 $logdate { #'~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})' $ymdh; '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; default 'date-not-found'; } #日志存放目录 access_log /var/log/nginx/access-$logdate.log main; #日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 open_log_file_cache max=10; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; #隐藏http版本号 server_tokens off; } 这样就会按照天生成日志文件;这里边最重要的就是引入$time_iso8601(这个是nginx里边自带的一个时间格式)进行自定义变量,不需要额按编译。 日期格式优化 nginx自带两种时间格式: $time_iso8601 形如 2023-03-29T16:58:49+08:00 $time_local 形如 14/Nov/2022:08:28:14 +0000 可以看出$time_local的格式看起来不是很美妙,对于我自己来说肯定按照 ‘年月日时分秒’ 这样看更顺眼一些,所以我们在自定义日志格式的时候,时间格式也是选择的是$time_iso8601。 时间怎么和我们本地时间一致 时间格式顺眼了,但是发现时间还是UTC时区的时间,怎么处理呢: 我这边使用的是docker-compose,可以直接配置环境变量。 version: '3' services: d_nginx: container_name: c_nginx environment: TZ: 'Asia/Shanghai' 第二种就是Dockerfile中编译,一劳永逸。 FROM nginx:1.20.1-alpine #定义时区参数 ENV TZ=Asia/Shanghai 有一些低版本的nginx做了以上两步还是不得行,有可能是因为缺少了tzdata时区数据包。 FROM nginx:1.12.1-alpine #将alpine的源更换成阿里云的源 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories #定义时区参数 ENV TZ=Asia/Shanghai #安装时区数据包 RUN apk add --update tzdata #设置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone 经过上边的步骤nginx日志里边的格式和时间应该就是我自己想要的了。 给大家分享一个nginx日志分析工具 goaccess: 地址:https://github.com/allinurl/goaccess goaccess nginx.log -a > nginx.html 这个工具能方便快速的分析nginx日志,能可视化的展示很多信息,帮助我们快速定位问题;比如接口的调用量(具体到某一个接口),访问者数量等等。 前言: 接着上一篇文章《记一次nginx拦截爬虫》,发现服务器nginx日志非常不好看,时间长了一大堆都在一个文件里边(甚至几年的),对于我这种linux小白就不友好了,所以想把日志分文件,这样至少我们去查看日志的时候会方便很多: 按天分文件 直接上nginx.conf配置 user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time'; #引入time_iso8601模块 设置时间 日期变量 map $time_iso8601 $logdate { #'~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})' $ymdh; '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; default 'date-not-found'; } #日志存放目录 access_log /var/log/nginx/access-$logdate.log main; #日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 open_log_file_cache max=10; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; #隐藏http版本号 server_tokens off; } 这样就会按照天生成日志文件;这里边最重要的就是引入$time_iso8601(这个是nginx里边自带的一个时间格式)进行自定义变量,不需要额按编译。 日期格式优化 nginx自带两种时间格式: $time_iso8601 形如 2023-03-29T16:58:49+08:00 $time_local 形如 14/Nov/2022:08:28:14 +0000 可以看出$time_local的格式看起来不是很美妙,对于我自己来说肯定按照 ‘年月日时分秒’ 这样看更顺眼一些,所以我们在自定义日志格式的时候,时间格式也是选择的是$time_iso8601。 时间怎么和我们本地时间一致 时间格式顺眼了,但是发现时间还是UTC时区的时间,怎么处理呢: 我这边使用的是docker-compose,可以直接配置环境变量。 version: '3' services: d_nginx: container_name: c_nginx environment: TZ: 'Asia/Shanghai' 第二种就是Dockerfile中编译,一劳永逸。 FROM nginx:1.20.1-alpine #定义时区参数 ENV TZ=Asia/Shanghai 有一些低版本的nginx做了以上两步还是不得行,有可能是因为缺少了tzdata时区数据包。 FROM nginx:1.12.1-alpine #将alpine的源更换成阿里云的源 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories #定义时区参数 ENV TZ=Asia/Shanghai #安装时区数据包 RUN apk add --update tzdata #设置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone 经过上边的步骤nginx日志里边的格式和时间应该就是我自己想要的了。 给大家分享一个nginx日志分析工具 goaccess: 地址:https://github.com/allinurl/goaccess goaccess nginx.log -a > nginx.html 这个工具能方便快速的分析nginx日志,能可视化的展示很多信息,帮助我们快速定位问题;比如接口的调用量(具体到某一个接口),访问者数量等等。 ![lqp881wl.png](http://flt-pan.58heshihu.com/blog/typecho/lqp881wl.png) 最后修改:2023 年 12 月 28 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏