nginx 日誌對於大部分人來說是個未被發掘的寶藏,總結之前做某日誌分析系統的經驗,和大家分享一下 nginx 日誌的純手工分析方式。
預設的格式:
相信大部分用過 nginx 的人對預設 nginx 日誌格式配置都很熟悉,對日誌的內容也很熟悉。但是預設配置和格式雖然可讀,但是難以計算。
比如,設定 buffer,buffer 滿 32k 才刷盤;假如 buffer 不滿 5s 鐘強制刷盤的配置如下:
access_log /data/logs/nginx-access.log buffer=32k flush=5s;
這決定了是否實時看到日誌以及日誌對磁碟 io 的影響。
nginx 日誌能夠記錄的變數還有很多沒出現在預設配置中:
比如:請求資料大小:$request_length
返回資料大小:$bytes_sent
請求耗時:$request_time
所用連線序號:$connection
當前連線發生請求數:$connection_requests
nginx 的預設格式不可計算,需要想辦法轉換成可計算格式,比如用控制字元 ^a (mac 下 ctrl+v ctrl+a 打出)分割每個字段。
log_format 的格式可以變成這樣:
這樣之後就通過常見的 linux 命令列工具進行分析了:
1.查詢訪問頻率最高的 url 和次數:
cat access.log | awk -f '^a' '' | sort | uniq -c
2.查詢當前日誌檔案 500 錯誤的訪問:
cat access.log | awk -f '^a'''
3.查詢當前日誌檔案 500 錯誤的數量:
cat access.log | awk -f '^a''' | wc -l
4.查詢某一分鐘內 500 錯誤訪問的數量:
cat access.log | awk -f '^a''' | grep
'09:00
' | wc-l
5.查詢耗時超過 1s 的慢請求:
tail -f access.log | awk -f '^a'''
假如只想檢視某些位:
tail -f access.log | awk -f '^a'''
6.查詢 502 錯誤最多的 url:
cat access.log | awk -f '^a''' | sort | uniq -c
7.查詢 200 空白頁
cat access.log | awk -f '^a'''
8.檢視實時日誌資料流
tail -f access.log | cat -e 或者 tail -f access.log | tr'^a''|'
9.統計訪問最多的ip
tail -n 10000 access_log | awk''|sort|uniq -c|sort -rn|head -10 | more
10.通過日誌檢視當天訪問次數最多的時間段
tail -n 1000 access_log | awk''|cut -c 14-21 |sort|uniq -c|sort -rn|head -10|more
11.統計訪問最多的url
tail -n 10000 access_log |awk -f '"'''| sort|uniq -c| sort -rn| head -20 | more
或者cat access_log |awk -f '"'
''| sort|uniq -c| sort -rn| head -20 | more
總結照著這個思路可以做很多其他分析,比如 ua 最多的訪問;訪問頻率最高的 ip;請求耗時分析;請求返回包大小分析;等等。
這就是乙個大型 web 日誌分析系統的原型,這樣的格式也是非常方便進行後續大規模 batching 和 streaming 計算。
link:
Nginx 日誌分享
nginx 日誌對於大部分人來說是個未被發掘的寶藏,總結之前做某日誌分析系統的經驗,和大家分享一下 nginx 日誌的純手工分析方式。預設的格式 相信大部分用過 nginx 的人對預設 nginx 日誌格式配置都很熟悉,對日誌的內容也很熟悉。但是預設配置和格式雖然可讀,但是難以計算。比如,設定 bu...
nginx經驗分享
nginx alert could not open error log file open usr local var log nginx error.log failed 13 permission denied 那代表我們沒有操作許可權,只需要在命令前加上sudo,即可以最高許可權去操作,如 ...
nginx分享檔案
1 在同乙個區域網 2 安裝好nginx,會nginx的基本使用 1 開啟cmd,輸入ipconfig 2 在無線區域網介面卡wlan下的ipv4位址可看到本機的ip位址 server error page 500 502 503 504 50x.html location 50x.html 在ng...