Rumah >Operasi dan penyelenggaraan >Nginx >Terangkan secara terperinci cara mengoptimumkan log nginx mengikut hari
Artikel ini membawakan anda pengetahuan yang berkaitan tentang nginx terutamanya cara mengoptimumkan log nginx setiap hari. Rakan-rakan yang berminat boleh lihat di bawah.
Kata Pengantar:
Berikutan artikel sebelumnya "Ingat perangkak pemintasan nginx", saya mendapati log pelayan nginx sangat jelek, dan sudah lama Banyak daripada mereka berada dalam satu fail (walaupun beberapa tahun), yang tidak mesra kepada orang baru Linux seperti saya, jadi saya ingin membahagikan log ke dalam fail, supaya sekurang-kurangnya ia akan menjadi banyak. lebih mudah untuk kami menyemak log:
Bahagi fail mengikut hari
Konfigurasikan nginx.conf secara langsung
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; }
Dengan cara ini, log fail akan dijana mengikut hari; perkara yang paling penting di sini ialah memperkenalkan$time_iso8601
(Ini adalah format masa yang disertakan dengan nginx) Pembolehubah tersuai tidak perlu dikompilasi.
Pengoptimuman format tarikh
nginx disertakan dengan dua format masa: $time_iso8601
berbentuk seperti 2023-03-29T16:58:49+08:00
$time_local
Nampak macam 14/Nov/2022:08:28:14 +0000
Nampak sangat format $time_local
bagi saya memang lebih sedap mata memandang dalam bentuk 'tahun, bulan, hari. jam, minit dan saat', jadi kami menyesuaikan log Semasa memformat, format masa juga dipilih sebagai $time_iso8601
.
Mengapakah waktu konsisten dengan waktu tempatan kita?
Format masa memang sedap mata memandang, tetapi saya dapati masa masih dalam zon waktu UTC berurusan dengannya:
Saya menggunakan docker-compose
🎜>, anda boleh mengkonfigurasi pembolehubah persekitaran secara langsung.
version: '3' services: d_nginx: container_name: c_nginx environment: TZ: 'Asia/Shanghai'
Kaedah kedua ialah menyusun dalam Dockerfile
sekali dan untuk semua.
FROM nginx:1.20.1-alpine #定义时区参数 ENV TZ=Asia/Shanghai
Terdapat beberapa versi nginx yang lebih rendah yang masih tidak berfungsi selepas melakukan dua langkah di atas Ini mungkin kerana tzdata
paket data zon waktu tiada.
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
Selepas langkah di atas, format dan masa dalam log nginx sepatutnya seperti yang saya mahukan.
Saya ingin berkongsi dengan anda alat analisis log nginx
《goaccess》goaccess nginx.log -a > nginx.html
Alat ini boleh menjadi mudah dan pantas Menganalisis log nginx boleh memaparkan banyak maklumat secara visual untuk membantu kami mencari masalah dengan cepat seperti bilangan panggilan antara muka (khusus untuk antara muka tertentu), bilangan pelawat, dsb.
Kajian yang disyorkan: "Tutorial penggunaan Nginx"
Atas ialah kandungan terperinci Terangkan secara terperinci cara mengoptimumkan log nginx mengikut hari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!