溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

nginx的access_log日志怎么設(shè)置

發(fā)布時(shí)間:2022-02-16 15:44:37 來源:億速云 閱讀:3433 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“nginx的access_log日志怎么設(shè)置”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“nginx的access_log日志怎么設(shè)置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

nginx 日志主要有兩條指令:1)log_format:用來設(shè)置日志格式;2)access_log:用來指定日志文件的存放路徑、格式

nginx的access_log日志怎么設(shè)置

log_format 日志格式

1、語法:

log_format name(格式名字) 格式樣式(即想要得到什么樣的日志內(nèi)容) 示例:

log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_s ent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"'
2、具體參數(shù)格式
nginx的access_log日志怎么設(shè)置
3、x_forwarded_for:

通常web服務(wù)器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_addr拿到的IP地址是反向代理服務(wù)器的iP地址。反向代理服務(wù)器在轉(zhuǎn)發(fā)請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務(wù)器地址。

:在server中設(shè)置x_forwarded_for

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

access_log

用了log_format 指令設(shè)置了日志格式之后,需要用access_log指令指定日志文件的存放路徑;

1、語法:

access_log path(存放路徑) format (自定義日志名稱) 示例:

access_log logs/access.log main;
2、設(shè)置刷盤策略:
access_log /data/logs/nginx-access.log buffer=32k flush=5s;

buffer 滿 32k 才刷盤;假如 buffer 不滿 5s 鐘強(qiáng)制刷盤。

:一般log_format在全局設(shè)置,可以設(shè)置多個(gè)。access_log 可以在全局設(shè)置,但往往是定義在虛擬主機(jī)(server)中的location中。 例如:

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''"$status" $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''"$gzip_ratio" $request_time $bytes_sent $request_length';
log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" ''"$status" $body_bytes_sent $request_time $bytes_sent $request_length ''[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]';
open_log_file_cache max=1000 inactive=60s;
server {
server_name ~^(www\.)?(.+)$;
access_log logs/$2-access.log main;
error_log logs/$2-error.log;
location /srcache {
access_log logs/access-srcache.log srcache_log;
}
}
}
3、其他:

1)error_log:

配置錯(cuò)誤日志,例如上例。

2)open_log_file_cache:

對于每一條日志記錄,都將是先打開文件,再寫入日志,然后關(guān)閉。可以使用open_log_file_cache來設(shè)置日志文件緩存(默認(rèn)是off)。 語法:

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

參數(shù)注釋如下:

  • max:設(shè)置緩存中的最大文件描述符數(shù)量,如果緩存被占滿,采用LRU算法將描述符關(guān)閉。
  • inactive:設(shè)置存活時(shí)間,默認(rèn)是10s
  • min_uses:設(shè)置在inactive時(shí)間段內(nèi),日志文件最少使用多少次后,該日志文件描述符記入緩存中,默認(rèn)是1次
  • valid:設(shè)置檢查頻率,默認(rèn)60s
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

3)日志分析:

通過對日志格式的定義,就可以使用常見的 Linux 命令行工具進(jìn)行分析了:

查找訪問頻率最高的 URL 和次數(shù):

cat access.log | awk -F ‘^A’ ‘{print $10}’ | sort | uniq -c

查找當(dāng)前日志文件 500 錯(cuò)誤的訪問:

cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’

查找當(dāng)前日志文件 500 錯(cuò)誤的數(shù)量: cat access.log | awk -F ‘^A’ ‘{if(0}’ | wc -l

查找某一分鐘內(nèi) 500 錯(cuò)誤訪問的數(shù)量:

cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | grep ’09:00’ | wc-l

查找耗時(shí)超過 1s 的慢請求:

tail -f access.log | awk -F ‘^A’ ‘{if($6>1) print $0}’

假如只想查看某些位:

tail -f access.log | awk -F ‘^A’ ‘{if($6>1) print $3″|”$4}’

查找 502 錯(cuò)誤最多的 URL:

cat access.log | awk -F ‘^A’ ‘{if($5==502) print $11}’ | sort | uniq -c

查找 200 空白頁

cat access.log | awk -F ‘^A’ ‘{if($5==200 && $8 print $3″|”$4″|”$11″|”$6}’

切割日志

Nginx 的日志都是寫在一個(gè)文件當(dāng)中的,不會(huì)自動(dòng)地進(jìn)行切割,如果訪問量很大的話,將導(dǎo)致日志文件容量非常大,不便于管理和造成Nginx 日志寫入效率低下等問題。所以,往往需要要對access_log、error_log日志進(jìn)行切割。 切割日志一般利用USR1信號讓nginx產(chǎn)生新的日志。實(shí)例:

#!/bin/bashlogdir="/data/logs/nginx"pid=`cat $logdir/nginx.pid`
DATE=`date -d "1 hours ago" +%Y%m%d%H`
DATE_OLD=`date -d "7 days ago" +%Y%m%d`for i in `ls $logdir/*access.log`; domv $i $i.$DATEdonefor i in `ls $logdir/*error.log`; domv $i $i.$DATEdonekill -s USR1 $pidrm -v $logdir"/access.log."$DATE_OLD*rm -v $logdir"/error.log."$DATE_OLD*
1、分析:
  • 將上面的腳本放到crontab中,每小時(shí)執(zhí)行一次(0 ),這樣每小時(shí)會(huì)把當(dāng)前日志重命名成一個(gè)新文件;然后發(fā)送USR1這個(gè)信號讓Nginx 重新生成一個(gè)新的日志。(相當(dāng)于備份日志)
  • 將前7天的日志刪除;
2、說明:

在沒有執(zhí)行kill -USR1 $pid之前,即便已經(jīng)對文件執(zhí)行了mv命令而改變了文件名稱,nginx還是會(huì)向新命名的文件”*access.log.2016032623”照常寫入日志數(shù)據(jù)的。原因在于:linux系統(tǒng)中,內(nèi)核是根據(jù)文件描述符來找文件的。

3、logrotates:

使用系統(tǒng)自帶的logrotates,也可以實(shí)現(xiàn)nginx的日志分割,查看其bash源碼,發(fā)現(xiàn)也是發(fā)送USR1這個(gè)信號。

讀到這里,這篇“nginx的access_log日志怎么設(shè)置”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI