日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

簡介

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

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

grep查找日志

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

# 查找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

查看某個時間段的日志

有時,需要查看某個時間段的日志,比如凌晨2點15分系統(tǒng)出現(xià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實際并不解析時間,它們只是按正則匹配,匹配到第一個正則時,開始輸出行,直到遇到第二個正則關(guān)閉,所以如果你的日志中沒有能匹配第二個正則的行,將導(dǎo)致一直輸出到尾行!所以一般需要將第二個正則變寬松點,如上面的/2022-06-24T02:1[6-9]/,以避免出現(xiàn)這種情況

查看最后10條錯誤

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

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

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

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

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

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

awk分段查找

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

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

# 查找異常日志,并保留異常棧
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個換行,使得awk一段一段的輸出
  3. /Exception/代表過濾出包含正則Exception的段

使用less查看

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

tail -n 10000 app.log | less

看日志時,有一個很常見的需求,就是很多日志都是當(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)了一個oom killer日志!

使用vim查看

less可以一行一行的排除,但如果要一段一段的排除,如日志中經(jīng)常會有一些常見且無影響的錯誤日志,這種情況可以通過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ī)則中輸入'\!/訂單號不存在/'并回車,這代表排除段中包含訂單號不存在的段,排除后又發(fā)現(xiàn)很多沒有找到該昵稱異常。
  4. 接著輸入:再按上箭頭快速獲取上次輸入內(nèi)容,并補充&& \!/沒有找到該昵稱/,將這種常見異常也過濾掉。
  5. 哦豁,發(fā)現(xiàn)了一個NullPointerException異常!

其它工具

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

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

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

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

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

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

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

總結(jié)

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


新聞標(biāo)題:如何高效查看Linux日志文件!
標(biāo)題鏈接:http://www.5511xx.com/article/cdshcee.html