以前上線經(jīng)常關(guān)注日志文件中error
的情況怀酷,那么對于這種簡單的想查看上線瞬間是否有服務(wù)報錯應(yīng)該怎么操作呢煤率。
如果日志文件名成為: app_20220308.log
查看上線過程中日志是否有error
:
tail -f app_20220308.log | grep error
會用到 tail
和grep
2個命令
簡單說下這2個命令吧
tail:用于查看文件的內(nèi)容
- -f : 循環(huán)讀取,意思就是當(dāng)前比如執(zhí)行
tail -f fileName
屏幕可能顯示一條或者不顯示任何日志,但是此時有人訪問了你的日志,你的屏幕上就會多出一條相關(guān)的訪問日志 - -n<行數(shù)>: 顯示文件的尾部 n 行內(nèi)容轻腺,這個就很簡單了乐疆,不做多余解釋了
注意:tail filleName
顯示末尾的10行數(shù)據(jù)
grep: 命令用于查找文件里符合條件的字符串。
- -v 或 --invert-match : 顯示不包含匹配文本的所有行贬养〖吠粒【這個比較常用些】
- -E 或 --extended-regexp : 將樣式為延伸的正則表達式來使用。
- -i 或 --ignore-case : 忽略字符大小寫的差別误算。
注意: grep 后面接的詞語可以用引號包裹仰美,不用也沒關(guān)系,可能變成習(xí)慣很多人都愿意包裹起來
那么此時當(dāng)你好好的ip1上觀察日志情況的時儿礼,你老板來了咖杂,對你說,‘比卡丘蚊夫,去诉字,統(tǒng)計下昨天各個接口訪問量是多少’,那么此時你可能默默的打開百度了知纷,正好看到我的文章了壤圃,兄弟來,我們造作起來
先直接告訴你答案
grep api app_20220307.log | awk -F\" '{print $2}' | sort | uniq -c | sort -n -r
這句話的意思你琅轧,我要查詢文件名為app_20220307.log中包含api
的日志伍绳,對于每一行符合要求的數(shù)據(jù),用“
進行分割乍桂,分割后取第二個字符墨叛,進行統(tǒng)計,然后對于其結(jié)果集模蜡,進行排序
咱們來一個命令一個命令解釋下
grep
: 上文已經(jīng)說過了不在贅述了
akw
這個可是linux的三劍客之一漠趁,重頭戲,壓軸了
sor
:用于將文本文件內(nèi)容加以排序忍疾。sort 可針對文本文件的內(nèi)容闯传,以行為單位來排序。
- -b 忽略每行前面開始出的空格字符卤妒。
- -n 依照數(shù)值的大小排序甥绿。舉個栗子:
//假如目前統(tǒng)計出來的結(jié)果是這樣的
123 /api/url
567 /api/name
233 /api/age
那么 sort -n
之后是
123 /api/url
233 /api/age
567 /api/name
- -r 以相反的順序來排序。
uniq
:用于檢查及刪除文本文件中重復(fù)出現(xiàn)的行列则披,一般與 sort 命令結(jié)合使用共缕。uniq 可檢查文本文件中重復(fù)出現(xiàn)的行列。
- -c或--count 在每列旁邊顯示該行重復(fù)出現(xiàn)的次數(shù)士复。
- -d或--repeated 僅顯示重復(fù)出現(xiàn)的行列图谷。
awk
:是一種處理文本文件的語言翩活,是一個強大的文本分析工具。
具體語法為:
awk [選項參數(shù)] 'script' var=value file(s)
或
awk [選項參數(shù)] -f scriptfile var=value file(s)
這個命令有興趣可以自學(xué)下便贵,比較強大菠镇,對于日常日志分析有很大幫忙
簡單介紹下本文用到的一些基礎(chǔ)
- -F fs: 指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式承璃,如-F"
具體來說就是把每一行日志按照"
進行分割 - '{print $8}' 是把分割后的第8個字符打印出來
注意: 在沒有-F 時利耍,按照默認空格分割,各個$
含義如下:
$0
就是整個記錄行
$1
就是第一個字符
$4
就是第4個字符
現(xiàn)在可以搞定你老板的需求了盔粹,兄弟看你的了