為了解決這種問題,大多數人會去編寫shell指令碼,用來檢索日誌檔案,這樣能篩掉很多無用檔案,減輕查日誌的工作量。伺服器集群部署下,同樣適用,我們可以在每台機器同樣的目錄下放乙份指令碼檔案,然後通過xshell對所有遠端會話執行指令碼,所有連線到的機器就都能執行指令碼了。
我們快速定位問題的前提是首先定位使用者的操作記錄資訊在哪個幾個檔案,然後在這個幾個檔案中找到報錯的堆疊資訊進行分析,從而找到出錯的原因。
縮小報錯檔案範圍,是查日誌提高效率的前提。
下面這段**是就是簡單的篩選日誌檔案的shell指令碼。如果你懂shell程式設計,可以在此基礎上修改,新增你自己需要的功能。
#!/bin/bash
date=$1;
key_word=$2;
#日誌檔案的基礎目錄
#基礎目錄+指定的目錄
files_path=
"$base_path
$date/"
#判斷指定目錄下是否有檔案
f_count=
$(ls $file_path|
grep
"^-"
|wc -l)
#檔案個數為0,退出指令碼if[
$f_count -eq 0 ]
then
echo
"目錄下沒有檔案"
exit
fi#否則繼續執行
#目錄下的所有檔案
files=
$(ls $files_path)
#標誌位 找到相關日誌後,把tmp下的之前的先刪除 只執行一次刪除
flag=0
echo
"start"
forfile
in$files
doecho
"find in $file"
#檔案的全路徑
f_p=
"$files_path
$file"
#統計檔案中word的個數
count=
$(grep -c $key_word $f_p)
#列印包含key_word
cat$f_p
|grep
$key_wordif[
$count -gt 0 ]
then
#找到後把tmp清了if[
$flag -eq 0 ]
then
rm -f tmp/*
fi#標誌位置為1,清除只執行一次
flag=1
cp$f_p tmp/$file
fidone
echo
"end"
假如截止到今天查詢日誌時伺服器產生了80個檔案,我要查某個使用者提的工單反饋,我們日誌裡都會列印使用者手機號,那麼我們可以這樣:
sh find.sh 2019-04
-1818300000000
這樣指令碼會拷貝使用者18300000000的所有操作記錄的日誌檔案到tmp目錄裡(與shell指令碼同目錄),然後我們對tmp下的日誌進行操作。
在日誌太多的情況下,日誌可能會被打包壓縮,我們可以改下指令碼,多一步,先把壓縮後的解壓縮再進行查詢操作。
有的公司會有更高階的做法,例如elk日誌分析平台,我們在elk上查日誌更加方便,視覺化的介面,可選擇性更強,多查詢條件等。
如何快速學好Shell指令碼?
shell 語言作為類 unix 系統的原生指令碼,有著非常實用的價值。但對於很多剛剛接觸 shell 指令碼的同學來說,搞懂 shell 語言的語法卻是一件非常困難的事情。甚至有人吐槽,或許沒有誰能清楚地說明白 shell 的語法。例如下面這兩個 shell 指令碼 bin bash a 10 i...
例項快速上手shell指令碼
初始化路徑 這個最好都在開頭寫上,意思是之後的任何語句執行只要有乙個返回的不是true就退出。這樣的好處就是保證自己的 在執行完完全是自己想要的,而不是執行了幾天發現竟然是有問題的 真的是這樣就慘了。所以,開頭一定寫上這個。如果要增加可讀性,也可以用set o errexit 字面意思就是出現err...
Shell指令碼快速入門 1
shell 是乙個用 c 語言編寫的程式,使用者可以通過shell指令碼語言來進行程式開發。與其他指令碼語言不同,shell指令碼所需的直譯器一般是內建在作業系統的,而像node.js php等指令碼語言需要手動安裝直譯器程式才可以。接下來將和大家一起來學習shell指令碼程式設計。shell直譯器...