>  기사  >  운영 및 유지보수  >  nginx 로그를 일별로 최적화하는 방법을 자세히 설명하세요.

nginx 로그를 일별로 최적화하는 방법을 자세히 설명하세요.

藏色散人
藏色散人앞으로
2023-03-31 14:48:492126검색

이 글은 일상적으로 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 {
        #&#39;~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})&#39; $ymdh;
        &#39;~^(?<ymd>\d{4}-\d{2}-\d{2})&#39; $ymd;
        default &#39;date-not-found&#39;;
    }

    #日志存放目录
    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

날짜 형식 최적화

rrreee🎜두 번째 방법은 Dockerfile에서 한 번에 컴파일하는 것입니다. 🎜rrreee🎜위의 두 단계 후에도 여전히 작동하지 않는 일부 하위 버전의 nginx가 있습니다. 이는 tzdata 시간대 데이터 패키지가 누락되었기 때문일 수 있습니다. 🎜rrreee🎜위 단계를 수행하면 nginx 로그의 형식과 시간이 내가 원하는 대로 되어야 합니다. 🎜🎜🎜 nginx 로그 분석 도구를 공유하세요🎜🎜🎜"goaccess 》🎜🎜goaccess nginx.log -a > nginx.html🎜이 도구는 nginx 로그를 쉽고 빠르게 분석할 수 있으며 많은 정보를 시각적으로 표시하여 다음과 같은 문제를 빠르게 찾을 수 있습니다. 인터페이스 호출 수(특정 인터페이스 관련), 방문자 수 등 🎜🎜🎜🎜🎜🎜추천 학습: "🎜Nginx 사용 튜토리얼🎜"🎜🎜

위 내용은 nginx 로그를 일별로 최적화하는 방법을 자세히 설명하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제