当前位置:

细说nginx日志按天优化

访客 2023-08-20 776 0

前言:

按天分文件

细说nginx日志按天优化

直接上nginx.conf配置

usernginx;worker_processes2;error_log/var/log/nginx/error.logwarn;pid/var/run/nginx.pid;events{worker_connections1024;}http{include/etc/nginx/mime.types;default_typeapplication/octet-stream;log_formatmain'$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.logmain;#日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效open_log_file_cachemax=10;sendfileon;#tcp_nopushon;keepalive_timeout65;#gzipon;include/etc/nginx/conf.d/*.conf;#隐藏http版本号server_tokensoff;}

这样就会按照天生成日志文件;这里边最重要的就是引入$time_iso8601(这个是nginx里边自带的一个时间格式)进行自定义变量,不需要额按编译。

日期格式优化

  • nginx自带两种时间格式:
    $time_iso8601形如2023-03-29T16:58:4908:00
    $time_local形如14/Nov/2022:08:28:140000
    可以看出$time_local的格式看起来不是很美妙,对于我自己来说肯定按照‘年月日时分秒’这样看更顺眼一些,所以我们在自定义日志格式的时候,时间格式也是选择的是$time_iso8601

  • 时间怎么和我们本地时间一致
    时间格式顺眼了,但是发现时间还是UTC时区的时间,怎么处理呢:
    我这边使用的是docker-compose,可以直接配置环境变量。

version:'3'services:d_nginx:container_name:c_nginxenvironment:TZ:'Asia/Shanghai'

第二种就是Dockerfile中编译,一劳永逸。

FROMnginx:1.20.1-alpine#定义时区参数ENVTZ=Asia/Shanghai

有一些低版本的nginx做了以上两步还是不得行,有可能是因为缺少了tzdata时区数据包。

FROMnginx:1.12.1-alpine#将alpine的源更换成阿里云的源RUNsed-i's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g'/etc/apk/repositories#定义时区参数ENVTZ=Asia/Shanghai#安装时区数据包RUNapkadd--updatetzdata#设置时区RUNln-snf/usr/share/zoneinfo/$TZ/etc/localtime&&echo'$TZ'>/etc/timezone

经过上边的步骤nginx日志里边的格式和时间应该就是我自己想要的了。

给大家分享一个nginx日志分析工具

《goaccess》
goaccessnginx.log-a>nginx.html
这个工具能方便快速的分析nginx日志,能可视化的展示很多信息,帮助我们快速定位问题;比如接口的调用量(具体到某一个接口),访问者数量等等。

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~