今天就跟大家聊聊有關(guān)如何利用shell腳本快速定位日志,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來堅(jiān)持追求的企業(yè)文化。 創(chuàng)新互聯(lián)建站是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于網(wǎng)站建設(shè)、成都做網(wǎng)站、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對(duì)性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場(chǎng),引領(lǐng)市場(chǎng)!
我們平時(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)鍵詞$2
date=$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 ]
then
echo "目錄下沒有文件"
exit
fi
#否則繼續(xù)執(zhí)行
#目錄下的所有文件
files=$(ls $files_path)
#標(biāo)志位 找到相關(guān)日志后,把tmp下的之前的先刪除 只執(zhí)行一次刪除
flag=0
echo "start"
for file in $files
do
echo "find in $file"
#文件的全路徑
f_p="$files_path$file"
#統(tǒng)計(jì)文件中Word的個(gè)數(shù)
count=$(grep -c $key_word $f_p)
#打印包含key_word
cat $f_p | grep $key_word
if [ $count -gt 0 ]
then
#找到后把tmp清了
if [ $flag -eq 0 ]
then
rm -f tmp/*
fi
#標(biāo)志位置為1,清除只執(zhí)行一次
flag=1
#拷貝包含關(guān)鍵詞的文件到tmp下
cp $f_p tmp/$file
fi
done
echo "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)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。