日誌分析(1)常見命令

你個小禿頭發表於2020-12-01

  日誌中包含了程式在遇到異常情況所列印的堆疊資訊,訪間使用者IP地址、請求url、應用響應時間、記憶體垃圾回收資訊,以及系統開發者在系統執行過程中想列印的任何資訊。通過異常堆疊,可以定位到依賴的誰當機了,產生問題的程式bug的行,對異常進行修復;通過訪問IP和請求url和引數,排查是否遭到攻擊,以及攻擊的形式;通過應用的響應時間、垃圾回收,以及系統load來判斷系統負載,是否需要增加機器;通過執行緒dump,判斷是否死鎖及執行緒阻塞的原因;通過應用的GC (Garbage Collection, 即記憶體回收)日誌,對系統程式碼和JVM記憶體引數進行優化,減少GC次數與stop the world時間,優化應用響應時間。

  而想要通過日誌分析得出系統產生問題的原因,首先我們需要熟悉日誌分析的相關命令和指令碼從日誌中篩選出有價值的內容

1.常見命令

cat命令檢視檔案內容

如果日誌檔案較小可以直接用cat命令列印出來,如果日誌檔案較大請不要這樣做,開啟一個過大的檔案可能會佔用大量的系統資源,從而影響系統的對外服務

 cat 檔名  

cat -n 檔名 可以檢視行號

 more和less分頁顯示檔案

cat缺點在於:一旦執行無法進行互動和控制,more可以分頁的展示檔案

按Enter鍵顯示檔案下一行

按空格鍵便是下一頁

F鍵顯示下一屏內容

B鍵顯示下一屏內容

另一個 less 命令在於它可以支援內容查詢

 輸入/user即可

tail檢視檔案尾

因為日誌一般都是以追加的形式寫入的,新寫的內容一般都在檔案末尾處

 -n 引數後跟的數字表示顯示檔案最後幾行,如果為4則顯示檔案最後四行

 -f 可以讓程式不退出,並且持續的顯示檔案新增的行

 head檢視檔案頭

與tail類似

 sort 內容排序

sort預設是按照字串順序排序的

 -n 按照數字排序

 -r 按照逆序排列

 -k 指定排序的列

 -t 指定列分隔符

例項:

先cat一下我們的檔案,可以看到數字是無序的

 我們使用 sort -n  和 sort -n -r 可以發現檔案進行了一次增序和降序的排序 

 為了熟悉 -k  和 -t 我自己寫了一個例子

同樣是先cat一下檔案,我們的目的是要根據第二列的數字進行排序

 我們就可以輸入 sort -k 2 -t ' ' -n b.txt ,就是對第二列的資料進行排序,通過空格來區分列

 wc字元統計

 wc -l 檢視檔案的行數

wc -c 檢視檔案包含的位元組數

 wc -L 檢視檔案中最長的行的長度

 wc -w 檢視檔案中有多少個單詞

uniq 查出重複的行

uniq可以用來顯示檔案中行重複的個數,或者顯示僅出現一次的行,以及僅僅顯示重複的行

uniq去重針對的僅是連續的兩行,因此他經常和sort一起用

 以上是檔案內容

通過sort排序,再通過uniq去重統計

 -c 在每行前加上出現的次數

 -u 顯示只出現一次的行

 -d 展示出現重複的 行

grep字串查詢

  grep 可以查詢檔案中符合條件的字串,如果檔案內容符合就會把這行列印

   grep -c  顯示查詢到的行號

grep的查詢也支援正規表示式例如查詢u開頭r結尾的字串

find檔案查詢

如果只知道檔名稱不知道,檔案路徑那我們就需要 find 命令了

 我們也可以查詢以txt結尾的檔案

 我們還可以使用find命令遞迴的列印當前目錄

 find . -print 

 expr表示式求值

實際操作中,嚐嚐需要對錶達式進行求值,使用expr指令,能夠對運算表示式或者字串進行運算求值

注意:乘法運算時需要用反斜槓(\)對 *進行轉義

 

 

 URL訪問工具

想在命令列下通過http協議訪問網頁文件,就要用到 curl 工具,它支援HTTP,HTTPS,FTP,Telnet等多種協議,常被用來在命令列下抓取網頁和監控Web伺服器狀態

這裡僅簡單的介紹他一些常用的用法比如發起網頁請求

 

 加上 -i 返回帶header的文件

  -I 只返回header資訊

 

2.實際需求

單條命令還是無法成氣候的,需要將命令組合起來來使用才會更有效率

比如說我們的日誌是這樣的(資料都是偽造的)

 

174.119.232.29 GET www.xxx1.com 404 12312
174.119.232.29 GET www.xxx2.com 200 657
174.119.124.30 GET www.xxx1.com 500 123
174.119.232.30 GET www.xxx3.com 200 1421
174.119.232.30 GET www.xxx4.com 301 4554
174.646.232.29 GET www.xxx4.com 404 45
174.546.232.29 GET www.xxx2.com 302 123
174.453.232.34 GET www.xxx1.com 303 4345
174.119.232.29 GET www.xxx5.com 404 753
174.123.232.29 GET www.xxx1.com 404 78678
174.119.232.36 GET www.xxx5.com 400 764
174.546.232.29 GET www.xxx8.com 200 43
174.546.232.29 GET www.xxx3.com 200 123
174.567.232.78 GET www.xxx2.com 200 786
174.119.232.29 GET www.xxx5.com 404 786
174.119.232.83 GET www.xxx7.com 404 7673
174.453.232.72 GET www.xxx1.com 200 37
174.119.232.50 GET www.xxx9.com 404 767
174.534.232.96 GET www.xxx1.com 200 112

1.檢視請求訪問量

查詢訪問量前五的ip地址

cat access.log |cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -5

2.檢視最耗時最多的頁面

cat access.log |sort -k 5 -n -r | head -10

相關文章