이 글은 일상적으로 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에 제공되는 시간 형식)을 도입하여 사용자 정의하는 것입니다. 변수가 있으므로 컴파일할 필요가 없습니다. $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》goaccess nginx.log -a > nginx.html
날짜 형식 최적화
$time_iso8601
모양은 2023-03-29T16:58:49+08: 00
$time_local
은 14/Nov/2022:08:28:14 +0000
형식입니다. $time_local 형식이 별로 예뻐 보이지는 않지만 '연, 월, 일, 시, 분, 초'가 눈에 더 보기 좋기 때문에 로그 형식을 맞춤설정할 때 시간 형식은 다음과 같습니다. <code>$time_iso8601로도 선택되었습니다.
docker-compose code>를 사용하고 있습니다. 환경 변수를 직접 구성할 수 있습니다. 🎜
Dockerfile
에서 한 번에 컴파일하는 것입니다. 🎜rrreee🎜위의 두 단계 후에도 여전히 작동하지 않는 일부 하위 버전의 nginx가 있습니다. 이는 tzdata
시간대 데이터 패키지가 누락되었기 때문일 수 있습니다. 🎜rrreee🎜위 단계를 수행하면 nginx 로그의 형식과 시간이 내가 원하는 대로 되어야 합니다. 🎜🎜🎜 nginx 로그 분석 도구를 공유하세요🎜🎜🎜"goaccess 》🎜🎜goaccess nginx.log -a > nginx.html
🎜이 도구는 nginx 로그를 쉽고 빠르게 분석할 수 있으며 많은 정보를 시각적으로 표시하여 다음과 같은 문제를 빠르게 찾을 수 있습니다. 인터페이스 호출 수(특정 인터페이스 관련), 방문자 수 등 🎜🎜🎜🎜🎜🎜추천 학습: "🎜Nginx 사용 튜토리얼🎜"🎜🎜위 내용은 nginx 로그를 일별로 최적화하는 방법을 자세히 설명하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!