發現系統存在的問題
我們可以使用下面的命令行,統計服務器返回的狀態碼,發現系統可能存在的問題。
awk '{print $9}' access.log | sort | uniq -c | sort
正常情況下,狀態碼 200 或 30x 應該是出現次數最多的。40x 一般表示客戶端訪問問題。50x 一般表示服務器端問題。
下面是一些常見的狀態碼:
- 200 - 請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
- 206 - 服務器已經成功處理了部分 GET 請求
- 301 - 被請求的資源已永久移動到新位置
- 302 - 請求的資源現在臨時從不同的 URI 響應請求
- 400 - 錯誤的請求。當前請求無法被服務器理解
- 401 - 請求未授權,當前請求需要用戶驗證。
- 403 - 禁止訪問。服務器已經理解請求,但是拒絕執行它。
- 404 - 文件不存在,資源在服務器上未被發現。
- 500 - 服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。
- 503 - 由於臨時的服務器維護或者過載,服務器當前無法處理請求。
HTTP 協議狀態碼定義可以參閱:Hypertext Transfer Protocol -- HTTP/1.1
有關狀態碼的 awk 命令示例:
1. 查找並顯示所有狀態碼為 404 的請求
awk '($9 ~ /404/)' access.log
2. 統計所有狀態碼為 404 的請求
awk '($9 ~ /404/)' access.log | awk '{print $9,$7}' | sort
現在我們假設某個請求 ( 例如 : URI: /path/to/notfound ) 產生了大量的 404 錯誤,我們可以通過下面的命令找到這個請求是來自於哪一個引用頁,和來自於什么瀏覽器。
awk -F\" '($2 ~ "^GET /path/to/notfound "){print $4,$6}' access.log