Notifications
在日誌中查找字元串以設置警報並生成執行緒轉儲
如果日誌文件中的字元串(找到相關字元串),我需要編寫一個腳本來創建和警告並獲取執行緒轉儲 -
/tmp/area.log
. 到目前為止,我可以在 2 個單獨的腳本中執行此操作,但希望將它們合併為一個。腳本 1:創建警報
filelocation=$1 string=$2 count=$(cat $1 | grep -i "$2" | wc -l) if [[ "$count" -ge 1 ]]; then echo "WARNING: There are $count occurrences of $2 in log file" exit 1 else echo "OK: No lines with $2 in log file" exit 0 fi
腳本 2:創建執行緒轉儲
#!/bin/bash PID=$(ps -ef | grep java | awk '{print $2}') N=3 INTERVAL=5 for ((i=1;i<=$N;i++)) do # d=$(date +%Y%m%d-%H:%M:%S) # dump="/tmp/Threaddump-$PID-$d.txt" dump="/tmp/ThreadDump-`hostname`-`date '+%F-%H:%M:%S'`.gz" echo $i of $N: $dump /opt/jdk1.8.0_121/jdk1.7.0_40/bin/jstack -l $PID > $dump sleep $INTERVAL done
很簡單,希望你在日誌中找到字元串時要求進行執行緒轉儲。
因此,當您的腳本 1 在日誌中找到字元串時,您需要執行執行緒轉儲腳本。為此,您需要在
if [[ "$count" -ge 1 ]];
true 塊中包含執行緒轉儲腳本。filelocation=$1 string=$2 count=$(cat $1 | grep -i "$2" | wc -l) if [[ "$count" -ge 1 ]]; then echo "WARNING: There are $count occurrences of $2 in log file" PID=$(ps -ef | grep java | awk '{print $2}') N=3 INTERVAL=5 for ((i=1;i<=$N;i++)) do # d=$(date +%Y%m%d-%H:%M:%S) # dump="/tmp/Threaddump-$PID-$d.txt" dump="/tmp/ThreadDump-`hostname`-`date '+%F-%H:%M:%S'`.gz" echo $i of $N: $dump /opt/jdk1.8.0_121/jdk1.7.0_40/bin/jstack -l $PID > $dump sleep $INTERVAL done exit 1 else echo "OK: No lines with $2 in log file" exit 0 fi
如果您希望腳本不斷查找日誌並執行執行緒轉儲,則需要有一個 5-10 秒睡眠的包裝循環語句,並連續執行此解析和轉儲邏輯。
用於持續監控日誌的程式碼更改。
在文件位置語句之後有一個無限循環,包括 60 秒的睡眠(這取決於您需要多少睡眠時間)並在最後一行結束循環。你需要做異常處理,你可以妖魔化這個腳本。
正如@wildcard 所提到的,您需要針對解析和PID 部分進行優化。