Notifications

在日誌中查找字元串以設置警報並生成執行緒轉儲

  • April 2, 2019

如果日誌文件中的字元串(找到相關字元串),我需要編寫一個腳本來創建和警告並獲取執行緒轉儲 - /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 部分進行優化。

引用自:https://unix.stackexchange.com/questions/509808