當日志文件中的時間與主機時間不同步時,怎麼監控每隔五分鐘檢測一次日誌文件是否出自按某個關鍵字?

今有需求:需要監控每隔五分鐘檢測一次日誌文件是否出自按某個關鍵字。利用過濾全部的日誌信息 雖然可以過濾出來關鍵字告警,但是修復後,依然還是會報警,存在侷限性,所以需要使用以下辦法來實現需求。

本想循環獲取5分鐘內的時間戳,然後從日誌文件中grep這個時間端的信息,然後再獲取關鍵字,但是通過查看日誌文件發現時間戳與主機時間不同步,所以,這種方法不可取。
那麼怎麼獲取最近五分鐘的日誌信息,再過濾關鍵字呢?思索了很久,又有了新思路。
將現在的文件日誌重定向到一個新的文件裏面

cat /var/log/xxx >  /root/logs/tmp.txt9  //執行此命令,因爲第一次需要手動執行,後續循環不需要再執行

然後寫一個監控腳本(此腳本是被監控主機監控項的命令,五分鐘獲取一次信息,即五分鐘執行一次腳本)

#!/bin/sh
LOG_FILE=/var/log/xxx
KEY_WORDS="guanjianzi"
if [ ! -s /var/log/xxx ];then //判斷文件是否爲空,爲空則輸出爲0;不爲空,則執行下一步
echo "0"
else 
  A=$(awk '{print NR}' /root/logs/tmp.txt9 | tail -n1) //統計將日誌重定向的到此文件的行數
  B=$(awk '{print NR}' /var/log/xxx | tail -n1) //統計日誌的行數(此時已經比重定向裏面的文件多了五分鐘的信息)

  C=$( echo $B - $A |bc)  //獲取日誌文件最新五分鐘的行數
  tail -n $C /var/log/xxx> /root/logs/tet9  //查看最近五分鐘的信息並寫入一個新的文件

  cat  /root/logs/tet9 | grep "$KEY_WORDS" >txt9 //在最近五分鐘的文件中過濾某個關鍵字,將輸出結果寫入一個新的文件
  if [ -s txt9 ]; then  //判斷這個文件是否爲空,不爲空則輸出1 ;爲空,則輸出爲0
    echo "1"
  else
   echo "0"
 fi
fi
        cat /var/log/xxx  > /root/logs/tmp.txt9  //將此事的日誌信息重定向到該文件當中去

然後五分鐘後又會執行此腳本,如此循環。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章