溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何利用shell腳本快速定位日志

發(fā)布時(shí)間:2021-11-11 16:44:07 來源:億速云 閱讀:123 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)如何利用shell腳本快速定位日志,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

我們平時(shí)查日志,在測(cè)試環(huán)境,日志文件只有幾個(gè)的情況下,我們可以通過找時(shí)間接近的文件然后根據(jù)關(guān)鍵詞定位報(bào)錯(cuò)位置,大不了都查一遍,這都可以忍受。但是在實(shí)際的生產(chǎn)環(huán)境下,服務(wù)器集群部署,每天的日志非常多非常多,每臺(tái)機(jī)器都會(huì)有幾十個(gè)甚至多達(dá)上百個(gè)、數(shù)百個(gè)日志文件產(chǎn)生。遇到問題需要查詢?nèi)罩緯r(shí),你會(huì)發(fā)現(xiàn)如果一個(gè)個(gè)文件去查,你會(huì)崩潰掉。因?yàn)檫@是很費(fèi)時(shí)的重復(fù)性工作,而且也不一定能查到。

為了解決這種問題,大多數(shù)人會(huì)去編寫shell腳本,用來檢索日志文件,這樣能篩掉很多無用文件,減輕查日志的工作量。服務(wù)器集群部署下,同樣適用,我們可以在每臺(tái)機(jī)器同樣的目錄下放一份腳本文件,然后通過xshell對(duì)所有遠(yuǎn)程會(huì)話執(zhí)行腳本,所有連接到的機(jī)器就都能執(zhí)行腳本了。

我們快速定位問題的前提是首先定位用戶的操作記錄信息在哪個(gè)幾個(gè)文件,然后在這個(gè)幾個(gè)文件中找到報(bào)錯(cuò)的堆棧信息進(jìn)行分析,從而找到出錯(cuò)的原因。

縮小報(bào)錯(cuò)文件范圍,是查日志提高效率的前提。

下面這段代碼是就是簡(jiǎn)單的篩選日志文件的shell腳本。如果你懂shell編程,可以在此基礎(chǔ)上修改,添加你自己需要的功能。

#!/bin/bash#日期$1 關(guān)鍵詞$2date=$1;key_word=$2;
#日志文件的基礎(chǔ)目錄base_path=/home/logs/application/#基礎(chǔ)目錄+指定的目錄files_path="$base_path$date/"
#判斷指定目錄下是否有文件f_count=$(ls $file_path|grep "^-"|wc -l)#文件個(gè)數(shù)為0,退出腳本if [ $f_count -eq 0 ]thenecho "目錄下沒有文件"exitfi#否則繼續(xù)執(zhí)行#目錄下的所有文件files=$(ls $files_path)#標(biāo)志位 找到相關(guān)日志后,把tmp下的之前的先刪除 只執(zhí)行一次刪除flag=0echo "start"for file in $filesdoecho "find in $file"#文件的全路徑f_p="$files_path$file"#統(tǒng)計(jì)文件中Word的個(gè)數(shù)count=$(grep -c $key_word $f_p)#打印包含key_wordcat $f_p | grep $key_wordif [ $count -gt 0 ]then#找到后把tmp清了if [ $flag -eq 0 ]thenrm -f tmp/*fi#標(biāo)志位置為1,清除只執(zhí)行一次flag=1#拷貝包含關(guān)鍵詞的文件到tmp下cp $f_p tmp/$filefidoneecho "end"

其中base_path是日志文件的根目錄,假設(shè)我們的日志都是在/home/logs/application/下,每天生成一個(gè)日期命名的文件夾放當(dāng)天的的日志文件,2019-04-18,切割的多個(gè)日志文件除固定前綴以外加上索引。

例如,我們的日志文件是這樣命名的:

/home/logs/application/2019-04-18/application_20190418_0.log/home/logs/application/2019-04-18/application_20190418_1.log/home/logs/application/2019-04-18/application_20190418_2.log.../home/logs/application/2019-04-18/application_20190418_80.log

假如截止到今天查詢?nèi)罩緯r(shí)服務(wù)器產(chǎn)生了80個(gè)文件,假如要查某個(gè)用戶提的工單反饋,因?yàn)槲覀內(nèi)罩纠锒紩?huì)打印用戶手機(jī)號(hào),所以我們可以這樣查:

sh find.sh 2019-04-18 18300000000

這樣腳本會(huì)拷貝用戶18300000000的所有操作記錄的日志文件到tmp目錄里(與shell腳本同目錄),然后我們對(duì)tmp下的日志進(jìn)行操作。

在日志太多的情況下,日志可能會(huì)被打包壓縮,我們可以改下腳本,多一步,先把壓縮后的解壓縮再進(jìn)行查找操作。

有的公司會(huì)有更高級(jí)的做法,例如elk日志分析平臺(tái),我們?cè)趀lk上查日志更加方便,可視化的界面,可選擇性更強(qiáng),多查詢條件等。

看完上述內(nèi)容,你們對(duì)如何利用shell腳本快速定位日志有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI