日誌分析常見命令
- 2020 年 12 月 1 日
- 筆記
日誌中包含了程式在遇到異常情況所列印的堆棧資訊,訪間用戶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