nginx access_log日誌簡介
nginx 日誌主要有兩條指令:
1)log_format:用來設置日誌格式;
2)access_log:用來指定日誌文件的存放路徑、格式
log_format 日誌格式
1、語法:
log_format name(格式名字) 格式樣式(即想要得到什麼樣的日誌內容)
示例:
2、具體參數格式
3、x_forwarded_for:
通常web伺服器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,通過$remote_addr拿到的IP地址是反向代理伺服器的iP地址。反向代理伺服器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的伺服器地址。
註:在server中設置x_forwarded_for
access_log
用了log_format 指令設置了日誌格式之後,需要用access_log指令指定日誌文件的存放路徑;
1、語法:
access_log path(存放路徑) format (自定義日誌名稱)
示例:
2、設置刷盤策略:
buffer 滿 32k 才刷盤;假如 buffer 不滿 5s 鍾強制刷盤。
註:一般log_format在全局設置,可以設置多個。access_log 可以在全局設置,但往往是定義在虛擬主機(server)中的location中。
例如:
3、其他:
1)error_log:
配置錯誤日誌,例如上例。
2)open_log_file_cache:
對於每一條日誌記錄,都將是先打開文件,再寫入日誌,然後關閉。可以使用open_log_file_cache來設置日誌文件緩存(默認是off)。
語法:
參數注釋如下:
max:設置緩存中的最大文件描述符數量,如果緩存被佔滿,採用LRU演算法將描述符關閉。
inactive:設置存活時間,默認是10s
min_uses:設置在inactive時間段內,日誌文件最少使用多少次後,該日誌文件描述符記入緩存中,默認是1次
valid:設置檢查頻率,默認60s
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
3)日誌分析:
通過對日誌格式的定義,就可以使用常見的 Linux 命令行工具進行分析了:
查找訪問頻率最高的 URL 和次數:
查找當前日誌文件 500 錯誤的訪問:
查找當前日誌文件 500 錯誤的數量:
查找某一分鐘內 500 錯誤訪問的數量:
查找耗時超過 1s 的慢請求:
假如只想查看某些位:
查找 502 錯誤最多的 URL:
查找 200 空白頁
切割日誌
Nginx 的日誌都是寫在一個文件當中的,不會自動地進行切割,如果訪問量很大的話,將導致日誌文件容量非常大,不便於管理和造成Nginx 日誌寫入效率低下等問題。所以,往往需要要對access_log、error_log日誌進行切割。
切割日誌一般利用USR1信號讓nginx產生新的日誌。實例:
1、分析:
將上面的腳本放到crontab中,每小時執行一次(0 ),這樣每小時會把當前日誌重命名成一個新文件;然後發送USR1這個信號讓Nginx 重新生成一個新的日誌。(相當於備份日誌)將前7天的日誌刪除;
2、說明:
在沒有執行kill -USR1 $pid之前,即便已經對文件執行了mv命令而改變了文件名稱,nginx還是會向新命名的文件」*access.log.2016032623」照常寫入日誌數據的。原因在於:linux系統中,內核是根據文件描述符來找文件的。
3、logrotates:
使用系統自帶的logrotates,也可以實現nginx的日誌分割,查看其bash源碼,發現也是發送USR1這個信號。


※IBM超級計算機評美國科技產業最謹慎CEO 馬斯克登頂
※Linux 預設命令行——Bash
TAG:Linux資訊速推 |