shell監控warn日誌

2021-09-29 18:22:13 字數 3246 閱讀 3813

程式每天都會產生warn,我們不能及時的監控到問題,下面我來寫乙個shell指令碼監控warn日誌,如果有warn日誌就傳送郵件通知

首先我們定義乙個配置檔案:vi config.ini

在配置檔案中配置一些引數

#收件人(只能有乙個)

[email protected]

#抄送(可以有多個,以逗號分隔)

[email protected]

#包含欄位d(多個以逗號分隔)

include_fields=exception,error

#不包含字段(多個以逗號分隔)

not_contains_fields=aaa,bbb

interval_time=1

#warn最大行數

warn_max_line=100

#info最大行數

info_max_line=10

#檔案路徑

info_file_path=/root/gateway.log

#warn檔案路徑

warn_file_path=/root/gateway-warn.log

然後新建乙個檔案:vi monitor-log.sh

#vim monitor-log.sh

#!/bin/bash

config_path=/root

front_time=`date +"%y-%m-%d %h:%m:%s"`

while :;do

interval_time=$[$(cat $/config.ini|grep interval_time | awk -f'=' '' | sed s/[[:space:]]//g)*60]

after_time=`date +"%y-%m-%d %h:%m:%s"`

front_time_s=$(date +%s -d "$front_time")

after_time_s=$(date +%s -d "$after_time")

interval_s=$[$after_time_s - $front_time_s]

if (($ >= $ ));then

include_fields=$(cat $/config.ini|grep include_fields | awk -f'=' '' | sed s/[[:space:]]//g)

not_contains_fields=$(cat $/config.ini|grep not_contains_fields | awk -f'=' '' | sed s/[[:space:]]//g)

warn_max_line=$(cat $/config.ini|grep warn_max_line | awk -f'=' '' | sed s/[[:space:]]//g)

info_max_line=$(cat $/config.ini|grep info_max_line | awk -f'=' '' | sed s/[[:space:]]//g)

info_file_path=$(cat $/config.ini|grep info_file_path | awk -f'=' '' | sed s/[[:space:]]//g)

warn_file_path=$(cat $/config.ini|grep warn_file_path | awk -f'=' '' | sed s/[[:space:]]//g)

warn_log=$(tail -n 100 $warn_file_path)

ifs_old=$ifs

ifs=$'\n'

#迴圈每行warn日誌

for line in $warn_log;do

flag=false

#處理包含的內容

if [ -n $ ];then

ifs=$','

for inc in $include_fields;do

flag=false

result=$(echo $line | grep $inc)

if [[ "$result" != "" ]];then

flag=true

else

flag=false

break

fidone

ifs=$'\n'

fi #處理不包含的內容

if [[ "$flag" == "false" ]];then

continue

else

echo "處理不包含的"

if [ -n $ ];then

ifs=$','

for uncon in $not_contains_fields;do

result=$(echo $line | grep $uncon)

if [[ "$result" != "" ]];then

flagi=false

break

else

flag=true

fidone

ifs=$'\n'

fifi

ifs=$ifs_old

#grep日誌詳情

if [[ "$flag" == "false" ]];then

continue

else

afterstr=$

beforestr=$

logger=`grep "$beforestr" -a$info_max_line $info_file_path`

recipient=$(cat $/config.ini|grep recipient | awk -f'=' '' | sed s/[[:space:]]//g)

cc=$(cat $/config.ini|grep cc | awk -f'=' '' | sed s/[[:space:]]//g)

if [ -n $ ];then

echo "$logger" | mail -s $(hostname)"-warn日誌" -c $ $

else

echo "$logger" | mail -s $(hostname)"-warn日誌" $

fifi

ifs=$'\n'

done

front_time=$after_time

else

sleep $interval_time

fidone

說明:在配置檔案中配置間隔時間,每隔多久迴圈一次,檢查日誌的每行配置檔案包含欄位都存在,且不包含欄位不存在,然後傳送郵件

通過shell指令碼監控日誌切換頻率

在資料庫遇到效能問題的時候,可能從io,cpu等角度能夠下手找到效能瓶頸,日誌的切換也是影響效能的乙個因素,如果日誌切換臺頻繁,等待時間就會在日誌相關的事件上,從資料庫的角度來說,肯定是io的瓶頸。可以通過如下的shell指令碼來得到乙個簡單的報告。指令碼如下 sqlplus s db conn s...

hive e 重定向,帶warn日誌的處理方式

有時候執行會包含 warn 開頭的日誌 hive e hive sql 語句 grep v warn 輸出檔案 注意 hive f與hive e 作用是相同的。f 是指定hsql檔案。e 是指定要執行的sql 新增 export hive skip spark assembly true 到 etc...

Zabbix 監控日誌

監控伺服器指定日誌檔案,實現過濾日誌關鍵字報警。確保在被監控主機的配置檔案中 hostname 引數與前端頁面中的主機名匹配 serveractive 引數中指向zabbix伺服器ip 1 建立監控項 配置 主機 監控項 建立監控項 2 填寫監控項資訊 名稱 日誌czd.log 型別 zabbix客...