當前位置:首頁 » 編程軟體 » shell腳本監控日誌

shell腳本監控日誌

發布時間: 2022-08-20 00:27:04

A. 如何用shell腳本捕獲oracle異常

有個監視alert文件並發送郵件的,之前網上找的,你可以試下:

sql">#!/bin/bash
#功能:監控oracle的alert日誌,如有ORA-錯誤則郵件發出。
#如果是第一次運行,腳本會創建mailinfo文件(該文件用於存放上次執行腳本時alert的日誌的行數),存放本次alert日誌的行數。
#初始化環境變數
source/home/oracle/.bash_profile
#郵件列表
mail_list='[email protected],[url=mailto:[email protected]][email protected],[email protected],[email protected]'[/url]
#根據自己庫的實際情況,填寫以下alert日誌的路徑
alert_log=/u01/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
#判斷本腳本路徑下是否存在mailinfo文件,不存在就創建,並放入本次alert日誌的行數
if[!-e./mailinfo]
then
echo"建立mailinfo文件"
touch./mailinfo
current_line=`wc-l$alert_log|awk'{print$1}'`
echo$current_line>./mailinfo
#如果存在mailinfo文件,則檢查上次行數到本次行數之間是否有ORA-錯誤
else
#讀取上次檢查到的行數
last_line=`cat./mailinfo`
echo"上次行數:"$last_line
#算出本次alert日誌的行數
current_line=`wc-l$alert_log|awk'{print$1}'`
echo"本次行數:"$current_line
#取上次行數和本次行數之間的alert日誌內容,然後把ORA錯誤及上下三行放到mailinfo中
sed-n"$last_line,$current_linep"$alert_log|grep-nB4-nA4'ORA-'>./mailinfo
#判斷mailinfo文件的行數是否大於0,大於0則發郵件,無論是否發郵件都把本次行數放到mailinfo文件中
n=`wc-l./mailinfo|awk'{print$1}'`
if[$n-gt0]
then
echo"檢測到錯誤,發郵件"
cat./mailinfo|mutt-s"10.68alert中出現ORA錯誤,請檢查"$mail_list
#把本次行數放到mailinfo文件中
echo$current_line>./mailinfo
else
echo"沒檢測到錯誤,不發郵件"
echo$current_line>./mailinfo
fi
fi

B. shell腳本具體是干什麼的,是在用什麼的時候會用得到

Shell遵從經典UNIX哲學:把復雜的問題分解成簡單的小問題,然後再把各部分功能組合起來解決復雜問題。
例如我可以用shell腳本來監控伺服器整體的性能,當CPU負載超過我預設的警戒線,磁碟空間的閥值超過我預設的標准,伺服器宕機,這些都可以通過shell編寫腳本做到自動給我發告警郵件或者發簡訊通知我。簡化每日繁瑣的工作步驟,數據的備份,日誌的搜集整理。太多太多了。..

C. 求大神幫我寫一個伺服器監控腳本,用shell腳本寫。。

。。。。這還要結合你的服務才能採集到數據啊

D. 哪位大俠有linux下監控指定服務,如果服務丟失就把事件記錄到日誌文件svrmon.log再重啟服務的shell腳本

加到計劃任務里,1分鍾1次
ps進程是否存在
存在則退出
不存在則記錄日誌,重啟服務
思路就這樣

E. 請問怎樣用shell實現nginx日誌2xx請求最大值和最小值監控,我剛接觸腳本,不太懂,請大神解惑,謝謝

其實蠻簡單的,就是從文件中取出需要的值,判斷一下就可以了
你給個詳細的一行數據出來,看下你到底要取哪幾項數據

F. 如何shell命令編寫自己的Web日誌分析腳本

一、讀取文件
按照上面的思路,先解決讀取問題。這里我用了判斷語句,起初我是想寫出類似於 access=more
/usr/access*.*,將這個路徑全部加到變數里,方便判斷,因為在shell里,只能將固定文件、文件夾作為變數,變數中不能加*號(我是沒找到別的方法,有知道大牛請提點下小弟),所以就想了個笨辦法,用匹配關鍵詞的方式來判斷特定目錄下,是apache日誌,還是weblogic日誌,還是IIS日誌,具體判斷方法如下:
if ls -l /usr/ | egrep "access";then
more /usr/access*.* | egrep "多個關鍵詞"
else
more /usr/ex*.log | egrep 「多個關鍵詞」
fi
這樣的方式來進行判斷,但是這樣判斷有個缺點,就是中間件日誌在/usr/目錄下,只能存在一種,比如同時存在apache和IIS的日誌,就會優先判斷apache的,進而不會執行IIS日誌分析的語句。而且,為了不跟之前的歷史數據混亂,在腳本執行開始,清空了下數據。
file=/usr/nmgxy/
if [ -e "$file" ];then
echo "日誌目錄存在,跳過創建過程,該操作會清空/usr/nmgxy/目錄下所有數據"
echo "按回車鍵開始清空數據,結束請點擊Ctrl+c"
read key
rm -r /usr/nmgxy/*
mkdir -p /usr/nmgxy/LFI/ /usr/nmgxy/exp/ /usr/nmgxy/sql/ /usr/nmgxy/scan/ /usr/nmgxy/xss/ /usr/nmgxy/getshell/ /usr/nmgxy/dir/
else
mkdir -p /usr/nmgxy/ /usr/nmgxy/LFI/ /usr/nmgxy/exp/ /usr/nmgxy/sql/
/usr/nmgxy/scan/ /usr/nmgxy/xss/ /usr/nmgxy/getshell/ /usr/nmgxy/dir/
fi
echo "分析結果日誌保存在/usr/nmgxy/目錄下"
echo ---------------------日誌目標文件---------------------------
if ls -l /usr/ | egrep "access";then
echo --------------------統計出現次數最多的前20個IP地址-----------------
cat /usr/access*.* |awk '{print $1}' |sort |uniq -c |sort -rn |head -20 >/usr/nmgxy/top20.log
echo "統計完成"
二、定義攻擊特徵
日誌讀取的問題解決了,接下來就是定義攻擊特徵的事兒了,攻擊特徵比較好定義。例如,SQL注入攻擊的判斷:
echo ------------------------SQL注入攻擊sql.log----------------
echo "開始分析存在SQL注入的攻擊行為,並將結果保存在/usr/nmgxy/sql/目錄下"
more /usr/access*.* |egrep
"%20select%20|%20and%201=1|%20and%201=2|%20exec|%27exec|
information_schema.tables|%20information_schema.tables|%20where%20|%20union%20|%20SELECT%20|%2ctable_name%20|cmdshell|%20table_schema"
>/usr/nmgxy/sql/sql.log
echo "分析結束"
awk '{print "共檢測到SQL注入攻擊" NR"次"}' /usr/nmgxy/sql/sql.log|tail -n1
echo "開始統計SQL注入攻擊事件中,出現頻率最多的前20個IP地址"
cat /usr/nmgxy/sql/sql.log |awk -F "[" '{print $1}' |sort |uniq -c |sort -rn |head -20 >/usr/nmgxy/sql/top20.log
echo ----------------------------------------------------------
more /usr/nmgxy/sql/top20.log
echo "統計結束"
我把一些常見的SQL注入攻擊的特徵寫到了裡面,去掉了MSSQL資料庫存儲過程以及MSSQL資料庫才會出現的一些注入語句。
三、輸出匹配到的含有攻擊特徵的記錄
將匹配到的攻擊特徵內容,重新輸出到了另外一個log裡面,相當於做了一次篩選/usr/nmgxy/sql/sql.log
more /usr/access*.* |egrep
"%20select%20|%20and%201=1|%20and%201=2|%20exec|%27exec|
information_schema.tables|%20information_schema.tables|%20where%20|%20union%20|%20SELECT%20|%2ctable_name%20|cmdshell|%20table_schema"
>/usr/nmgxy/sql/sql.log
然後二次分析這個篩選過的文件,統計SQL注入攻擊出現的次數
awk '{print "共檢測到SQL注入攻擊" NR"次"}' /usr/nmgxy/sql/sql.log|tail -n1
輸出完畢後,將攻擊出現最多的前20個IP地址進行統計並顯示到屏幕上
echo "開始統計SQL注入攻擊事件中,出現頻率最多的前20個IP地址"
cat /usr/nmgxy/sql/sql.log |awk -F "[" '{print $1}' |sort |uniq -c |sort -rn |head -20 >/usr/nmgxy/sql/top20.log
echo ----------------------------------------------------------
more /usr/nmgxy/sql/top20.log
echo "統計結束"
四、輸出結果
這個在代碼開頭,創建了一些文件夾,用來存放篩選過的記錄
mkdir -p /usr/nmgxy/LFI/ /usr/nmgxy/exp/ /usr/nmgxy/sql/ /usr/nmgxy/scan/ /usr/nmgxy/xss/ /usr/nmgxy/getshell/ /usr/nmgxy/dir/
中間刪刪改改折騰了好幾次。後來針對特定的攻擊,我們比較關注(重點是比較好寫的= =)的內容做了HTTP響應請求200/500的判斷,並輸出結果。
echo -------------------------getshell-getshell.log----------------
echo "開始分析存在getshell的攻擊行為,並將結果保存在/usr/nmgxy/getshell/目錄下"
more /usr/access*.* |egrep "
eval|%eval|%execute|%3binsert|%20makewebtaski%20|/div.asp|/1.asp|/1.jsp|/1.php|/1.aspx|xiaoma.jsp|tom.jsp|py.jsp|k8cmd.jsp|/k8cmd|ver007.jsp|ver008.jsp|ver007|ver008|%if|\.aar"
>>/usr/nmgxy/getshell/getshell.log
echo "分析結束"
echo "二次分析結果中HTTP響應碼為200和500,結果另存為/usr/nmgxy/getshell/ok.log"
more /usr/nmgxy/getshell/getshell.log | awk '{if($9=200) {print $1" "$2"
"$3" "$4" "$6" "$7" "$8" "$9}}' >/usr/nmgxy/getshell/ok.log
more /usr/nmgxy/getshell/getshell.log | awk '{if($9=500) {print $1" "$2"
"$3" "$4" "$6" "$7" "$8" "$9}}' >>/usr/nmgxy/getshell/ok.log
echo "二次分析結束"
awk '{print "共檢測到getshell行為" NR "次"}' /usr/nmgxy/getshell/getshell.log|tail -n1
echo "開始統計漏洞利用攻擊事件中,出現頻率最多的前20個IP地址"
cat /usr/nmgxy/getshell/getshell.log |awk -F "[" '{print $1}' |sort
|uniq -c |sort -rn |head -20 >/usr/nmgxy/getshell/top20.log
echo ---------------------------------------------------------------
more /usr/nmgxy/getshell/top20.log
echo "統計結束"
統計HTTP響應狀態,IIS和apache有點區別。apache我以默認空格為分隔符,判斷第9個分隔符是否為200或500,如果等於,則輸出全部內容
more /usr/nmgxy/getshell/getshell.log | awk '{if($9=500) {print $1" "$2" "$3" "$4" "$6" "$7" "$8" "$9}}'
而IIS的,我則是用獲取關鍵詞的方式,來進行判斷。
more /usr/nmgxy/getshell/getshell.log | egrep " 200" >/usr/nmgxy/getshell/ok.log
用egrep的方式,關鍵詞為" 200",200前面有個空格,如果不加空格的話,很容易跟其他的參數混起來,那個時候誤報就不是一點點了。例如asp?id=200,所以加入了空格做區分。
IIS和nginx的思路類似,唯一的區別就是特徵碼,稍微有點改動而已,這個就不一一例舉了。思路就是這個思路,其實後期想把報告整體輸出成HTML的方式,估計工作量挺大,這個還是得閑下來的時候,慢慢修改吧。
PS:這個腳本雖然寫的比較粗糙,但是精確度還是有的,測試了幾十次,精確度能達到至少80%以上。
分析1個多G的日誌文件,需要大致約30多秒左右,我是在虛擬機里做的測試。虛擬機ubuntu系統,1G的內存。
不見得能幫上大忙,至少可以給大家在分析日誌時節省點時間。。。。
先貼出apache、weblogic、IIS的腳本代碼,weblogic的從網盤直接下載就好。apache、weblogic、IIS的腳本代碼:

G. 如何使用shell腳本, 當U盤掛載到Linux系統上時, 自動獲取U盤大小和剩餘的空間

當有新的硬體設備載入到linux系統上的時候,linux系統會自動刷新一條日誌信息到dmesg裡面。你可以在剛插入U盤的時候,立即執行dmesg命令,然後就能看到這個條日誌記錄,可以看到U盤對應的盤符。
根據這個思路,你可以通過shell腳本監控這個日誌,只要有磁碟設備更新,就取得它的盤符。假設這里是/dev/sdg,獲取到盤符以後,再使用命令
fdisk -l /dev/sdg
就可以輸出這個磁碟的容量信息以及剩餘空間的大小,通過字元串查找把對應的值提取出來即可。
基本思路就是這個,不知道我說清楚了沒有,希望可以幫助到你。

H. 如何查看shell腳本是否正常運行,跪求liunx大神

因為不知道你的是什麼腳本,不好判斷。

bash -x 檢測整個腳本實際運行過程是否正確

對腳本執行加以監控,你可以通過在腳本中加入一些腳本執行狀態結果的語句比如導出個日誌文件啦,或者對執行結果進行判斷啦,如果腳本是駐留在進程里,判斷進程中是否有腳本啦,然後給你發個執行結果郵件。還是得根據實際情況寫。

I. 如何用shell腳本實現讀取多台主機監控日誌

  1. 通過free,top命令查看cpu、內存使用信息,把結果輸入到一個文本裡面;

  2. 把上述結果上傳在你說的其中一台主機(這個上面要有ftp服務)裡面,ftp腳本就很簡單了

#!/bin/bash
top>>/home/info
free-m>>/home/${date+%F}info
ftp-i-nhost<<ok
useusernamepasswd
binary
put/home/${date+%F}info
bye
ok
exit

在這里機器上設置成定時任務,就可以定時收集信息了。

熱點內容
python處理excel文件 發布:2025-02-06 16:36:09 瀏覽:439
演算法相對定位 發布:2025-02-06 16:32:42 瀏覽:725
java程序的編譯和執行 發布:2025-02-06 16:21:45 瀏覽:416
什麼是淘寶帳號和密碼 發布:2025-02-06 16:21:36 瀏覽:495
解壓前面簽 發布:2025-02-06 16:02:00 瀏覽:324
華碩訪問點 發布:2025-02-06 15:56:57 瀏覽:331
excel拼接sql 發布:2025-02-06 15:50:10 瀏覽:501
加密手機直播 發布:2025-02-06 15:49:31 瀏覽:535
自帶ftp伺服器好用嗎 發布:2025-02-06 15:26:11 瀏覽:110
win7訪問xp區域網 發布:2025-02-06 15:17:07 瀏覽:525