日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何高效查看Linux日志文件!

簡(jiǎn)介

日常分析問題時(shí),會(huì)頻繁地查看分析日志,但如果蠻力去查看日志,耗時(shí)費(fèi)力還不一定有效果,因此我總結(jié)了在Linux常用的一些日志查看技巧,提升日志閱讀效率。

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),常德網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:常德等地區(qū)。常德做網(wǎng)站價(jià)格咨詢:13518219792

grep查找日志

在我們查找某些異常日志時(shí),經(jīng)常需要同時(shí)查看異常前面或后面的一些日志,因?yàn)橛袝r(shí)前面或后面的日志就已經(jīng)標(biāo)識(shí)出異常原因了,而grep的-A-B、-C選項(xiàng)就提供了這種功能,如下:

# 查找ERROR日志,以及它的后10行
$ grep -A 10 ERROR app.log

# 查找ERROR日志,以及它的前10行
$ grep -B 10 ERROR app.log

# -C代表前10行和后10行
$ grep -C 10 ERROR app.log

查看某個(gè)時(shí)間段的日志

有時(shí),需要查看某個(gè)時(shí)間段的日志,比如凌晨2點(diǎn)15分系統(tǒng)出現(xiàn)報(bào)警,上班后我們想看看這段時(shí)間的日志,看能不能找到點(diǎn)線索,方法如下:

# 導(dǎo)出02:14到02:16分的日志
awk '/2022-06-24T02:14/,/2022-06-24T02:1[6-9]/' app.log > app0215.log

# 使用sed也是可以的
sed -n '/2022-06-24T02:14/,/2022-06-24T02:1[6-9]/p' app.log > app0215.log

注:awk與sed實(shí)際并不解析時(shí)間,它們只是按正則匹配,匹配到第一個(gè)正則時(shí),開始輸出行,直到遇到第二個(gè)正則關(guān)閉,所以如果你的日志中沒有能匹配第二個(gè)正則的行,將導(dǎo)致一直輸出到尾行!所以一般需要將第二個(gè)正則變寬松點(diǎn),如上面的/2022-06-24T02:1[6-9]/,以避免出現(xiàn)這種情況

查看最后10條錯(cuò)誤

更多情況是,上班時(shí)發(fā)現(xiàn)系統(tǒng)有報(bào)警,于是想立馬看看剛剛發(fā)生了什么,即查找最近的異常日志,如下:

# 最容易想到的是tail,但有可能最后1000行日志全是正常日志
$ tail -n 1000 app.log | less

# 最后10條異常, tac會(huì)反向讀取日志行,然后用grep找到10個(gè)異常日志,再用tac又反向一次就正向了  
$ tac app.log | grep -n -m10 ERROR | tac

還有一種是從剛報(bào)警的時(shí)間點(diǎn)開始導(dǎo)出到尾行,比如從2分鐘前的5點(diǎn)15分開始導(dǎo)出,如下:

$ tac app.log | sed '/2022-06-24T17:15/q' | tac > app1715.log

原理與上面類似,只不過是換成了sed,sed默認(rèn)會(huì)輸出處理的每一行,而q指令代表退出程序,所以上面程序含義是從日志末尾開始輸出日志,直到遇到正則/2022-06-24T17:15/停止輸出。

awk分段查找

對(duì)于像Java程序,異常日志一般會(huì)是一段一段的,且每段帶有異常棧,如下:

但grep是一行一行過濾的,如何一整段一整段的過濾異常棧呢?awk就提供了這種功能,當(dāng)將awk中RS變量指定為空時(shí),awk就會(huì)一段一段的讀取并處理文本,如下:

# 查找異常日志,并保留異常棧
awk -v RS= -v ORS='\n\n' '/Exception/' app_error.log | less
  1. -v RS=等效于-v RS='',設(shè)置RS變量為空,使得awk一段一段地讀取日志
  2. -v ORS='\n\n'設(shè)置ORS變量為2個(gè)換行,使得awk一段一段的輸出
  3. /Exception/代表過濾出包含正則Exception的段

使用less查看

一般情況下,使用less可以更快速的查看日志,比如通過tail -n10000取出最近1w條日志,通過less查看,如下:

tail -n 10000 app.log | less

看日志時(shí),有一個(gè)很常見的需求,就是很多日志都是當(dāng)前不需要關(guān)心的,需要將它們過濾掉,less提供了&/的功能,可快速過濾掉不想看的日志,從而找到問題日志,如下:

操作步驟:

  1. 先輸入&,再輸入!進(jìn)入Non-match過濾模式。
  2. 然后輸入正則netns,再按Enter,排除掉這種正常的日志,過濾后又發(fā)現(xiàn)有很多drop_caches日志。
  3. 然后也是先輸入&,再輸入!,再直接按上箭頭快速獲取上次的輸入內(nèi)容,再接著輸入|drop_caches,將drop_caches日志也過濾掉。
  4. 哦豁,發(fā)現(xiàn)了一個(gè)oom killer日志!

使用vim查看

less可以一行一行的排除,但如果要一段一段的排除,如日志中經(jīng)常會(huì)有一些常見且無影響的錯(cuò)誤日志,這種情況可以通過vim配合awk排除,如下:

tail -n 10000 app_error.log | vim -  


操作步驟:

  1. 先輸入:,進(jìn)入vim的命令模式
  2. 再輸入%!awk -v RS= -v ORS='\n\n' ...,執(zhí)行awk命令,其中%代表當(dāng)前文件所有內(nèi)容,!代表執(zhí)行命令,所以%!代表將當(dāng)前文件內(nèi)容輸入到命令中
  3. 然后awk規(guī)則中輸入'\!/訂單號(hào)不存在/'并回車,這代表排除段中包含訂單號(hào)不存在的段,排除后又發(fā)現(xiàn)很多沒有找到該昵稱異常。
  4. 接著輸入:再按上箭頭快速獲取上次輸入內(nèi)容,并補(bǔ)充&& \!/沒有找到該昵稱/,將這種常見異常也過濾掉。
  5. 哦豁,發(fā)現(xiàn)了一個(gè)NullPointerException異常!

其它工具

有時(shí)為節(jié)省磁盤空間,日志會(huì)壓縮成*.gz格式,這也是可以直接查看的,如下:

# 類似cat,同時(shí)解壓并輸出內(nèi)容
zcat app.log.gz  

# 類似grep,同時(shí)解壓并查找內(nèi)容
zgrep -m 10 ERROR app.log.gz  

# 類似less,同時(shí)解壓并查看內(nèi)容
zless app.log.gz

而在處理時(shí)間方面,dateutils工具包用起來會(huì)更方便一些,如下:

# CentOS7安裝dateutils
$ wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/d/dateutils-0.4.9-1.el8.x86_64.rpm && rpm -Uvh dateutils-0.4.9-1.el8.x86_64.rpm
# Ubuntu安裝dateutils
$ apt install dateutils

# 根據(jù)時(shí)間范圍過濾日志,可指定時(shí)間串格式
$ cat dmesg.log | dategrep -i '%a %b %d %H:%M:%S %Y' '>=2022-06-24T12:00:00 && 

注:Ubuntu中對(duì)命令進(jìn)行了改名,dategrep叫dateutils.dgrep,dateconv叫dateutils.dconv

總結(jié)

這些工具組合起來還是很強(qiáng)大的,這也是為什么即使在公司有日志平臺(tái)的情況下,依然還是有很多人會(huì)去使用命令行!


分享文章:如何高效查看Linux日志文件!
文章URL:http://www.dlmjj.cn/article/cdshcee.html