nginx 日誌主要有兩條指令:1)log_format:用來設定日誌格式;2)access_log:用來指定日誌檔案的存放路徑、格式
log_format 日誌格式
1、語法:
log_format name(格式名字) 格式樣式(即想要得到什麼樣的日誌內容)
示例:
log_format main2、具體引數格式
3、x_forwarded_for:
通常web伺服器放在反向**的後面,這樣就不能獲取到客戶的ip位址了,通過$remote_addr拿到的ip位址是反向**伺服器的ip位址。反向**伺服器在**請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的ip位址和原來客戶端的請求的伺服器位址。
注:在server中設定x_forwarded_for
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;access_log
用了log_format 指令設定了日誌格式之後,需要用access_log指令指定日誌檔案的存放路徑;
1、語法:
access_log path(存放路徑) format (自定義日誌名稱)
示例:
access_log logs/access.log main;2、設定刷盤策略:
access_log /data/logs/nginx-access.log buffer=32k flush=5s;buffer 滿 32k 才刷盤;假如 buffer 不滿 5s 鐘強制刷盤。
注:一般log_format在全域性設定,可以設定多個。access_log 可以在全域性設定,但往往是定義在虛擬主機(server)中的location中。
例如:
http3、其他:1)error_log:}}
配置錯誤日誌,例如上例。
2)open_log_file_cache:
對於每一條日誌記錄,都將是先開啟檔案,再寫入日誌,然後關閉。可以使用open_log_file_cache來設定日誌檔案快取(預設是off)。
語法:
open_log_file_cache max=n [inactive=time] [min_uses=n] [valid=time];引數注釋如下:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;3)日誌分析:
通過對日誌格式的定義,就可以使用常見的 linux 命令列工具進行分析了:
查詢訪問頻率最高的 url 和次數:
cat access.log | awk -f 『^a』 『』 | sort | uniq -c查詢當前日誌檔案 500 錯誤的訪問:
cat access.log | awk -f 『^a』 『』查詢當前日誌檔案 500 錯誤的數量:
cat access.log | awk -f 『^a』 『』 | wc -l
查詢某一分鐘內 500 錯誤訪問的數量:
cat access.log | awk -f 『^a』 『』 | grep 』09:00』 | wc-l查詢耗時超過 1s 的慢請求:
tail -f access.log | awk -f 『^a』 『』假如只想檢視某些位:
tail -f access.log | awk -f 『^a』 『』查詢 502 錯誤最多的 url:
cat access.log | awk -f 『^a』 『』 | sort | uniq -c查詢 200 空白頁
cat access.log | awk -f 『^a』 『』切割日誌nginx 的日誌都是寫在乙個檔案當中的,不會自動地進行切割,如果訪問量很大的話,將導致日誌檔案容量非常大,不便於管理和造成nginx 日誌寫入效率低下等問題。所以,往往需要要對access_log、error_log日誌進行切割。
切割日誌一般利用usr1訊號讓nginx產生新的日誌。例項:
#!/bin/bashlogdir="/data/logs/nginx"1、分析:2、說明:在沒有執行kill -usr1 $pid之前,即便已經對檔案執行了mv命令而改變了檔名稱,nginx還是會向新命名的檔案」*access.log.2016032623」照常寫入日誌資料的。原因在於:linux系統中,核心是根據檔案描述符來找檔案的。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`; do
mv $i $i.$date
done
for i in `ls $logdir/*error.log`; do
mv $i $i.$date
done
kill -s usr1 $pid
rm -v $logdir"/access.log."$date_old*rm -v $logdir"/error.log."$date_old*
3、logrotates:
使用系統自帶的logrotates,也可以實現nginx的日誌分割,檢視其bash原始碼,發現也是傳送usr1這個訊號。
nginx access log 完全關閉
最近在配置本地nginx開發環境時,發現乙個問題,當server段不指定access log時,並且http段中也未指定任何 access log引數時,它會預設寫到logs access.log這個檔案,也就是access log預設值就是 logs access.log 而且是所有server的...
2007 09 22 日誌 轉折日
最近太忙了,忙到真的連看自己blog的時間都沒有了 更別提更新了 看著各種排名的全線飄綠 慘不忍睹,我的那個心啊,哇涼哇涼的啊 不過,忙碌的工作收穫也是巨大的 我們的團隊取得了驕人的成績!在此,我對團隊的每個成員表示衷心的感謝。我相信,中國的外包史上將銘刻這幾位同事的名字,他們是 成績歸成績,缺點也...
2007 09 22 日誌 轉折日
最近太忙了,忙到真的連看自己blog的時間都沒有了 更別提更新了 看著各種排名的全線飄綠 慘不忍睹,我的那個心啊,哇涼哇涼的啊 不過,忙碌的工作收穫也是巨大的 我們的團隊取得了驕人的成績!在此,我對團隊的每個成員表示衷心的感謝。我相信,中國的外包史上將銘刻這幾位同事的名字,他們是 成績歸成績,缺點也...