nginx日誌分析——用sed彩色標記特定內容

實時過濾日誌

只顯示nginx訪問日誌中返回500狀態碼的日誌行:css

tail -f access_log.log | grep 500 --color

在此輸入圖片描述

注意: tail -f 以後,只能使用管道一次,以下命令將無任何輸出nginx

tail -f access_log.log | grep 500 | grep 500

用顏色標記日誌中的特定內容

好比,nginx日誌格式爲:正則表達式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';

日誌內容爲:tomcat

192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /tomcat.png HTTP/1.1" 304 0 "http://192.168.1.9/" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-"
192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-"
192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-nav.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-"
192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-upper.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-"
192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-middle.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-"
192.168.1.181 - - [13/Apr/2011:15:19:10 +0800] "GET /bg-button.png HTTP/1.1" 304 0 "http://192.168.1.9/tomcat.css" "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0" "-"
192.168.1.114 - - [13/Apr/2011:15:19:37 +0800] "GET / HTTP/1.0" 200 12220 "-" "-" "-"
192.168.1.114 - - [13/Apr/2011:15:20:22 +0800] "GET / HTTP/1.0" 200 12220 "-" "-" "-"

需求:標出返回狀態碼非200的請求日誌

若是用grep只能用過濾方式,以下命令:code

grep -v "200" access_log.log

用sed能夠用顏色標出非200的狀態碼:orm

爲了拼出sed的正確正則表達式,咱們先從標記200爲綠色開始圖片

sed 's/200/\x1b[32m&\x1b[0m/g' access_log.log

在此輸入圖片描述

說明:echo打印彩色字符時,使用八進制符號\033,可是在sed中不支持八進制,必須使用16進制:\x1brem

下一步,把狀態碼3XX標爲黃色:form

sed 's/3[0-9][0-9]/\x1b[33m&\x1b[0m/g' access_log.log

但請注意,nginx日誌行中其餘地方也有數字,上面的匹配不夠精確

下一步,把HTTP/1.0" 或者 HTTP/1.1"以後的3位數標記顏色:

sed 's/\(HTTP\/1\.[01]" \)\(3[0-9][0-9]\)/\1\x1b[33m\2\x1b[0m/g' access_log.log

在此輸入圖片描述

再下一步,若是狀態碼以後的返回數據量大於1K,就標記紅色:

sed 's/\(HTTP\/1\.[01]" [0-9][0-9][0-9] \)\([0-9]\+\)[0-9][0-9][0-9]/\1\x1b[31m[\2KB]\x1b[0m/g' access_log.log

在此輸入圖片描述

相關文章
相關標籤/搜索