使用zabbix監控oracle的後臺日誌

abin1703發表於2020-07-20

本文將介紹如何使用zabbix監控oracle的後臺日誌,當oracle後臺日誌出現“ORA-”或“Error”時,第一時間將該資訊報警出來

 

zabbix agent端


以下所有操作均用root執行

 

為oracle後臺日誌建立硬連結

直接使用zabbix去讀取oracle後臺日誌報許可權不足,因此透過建立硬連結方式繞過許可權問題
cd /tmp
ln /u01/app/oracle/diag/rdbms/orcltest/orcltest/trace/alert_orcltest.log alert_orcltest.log
chmod 644 alert_orcltest.log

 

建立目錄

mkdir -p /etc/zabbix/scripts

 

建立指令碼

vi /etc/zabbix/scripts/alert.sh

#!/bin/bashget_sum_rows() {
    rows=`wc -l $1 | awk '{print $1}'`    echo $rows}
runfile=/tmp/tmp_alertrows.txt# 初始化runfile檔案if test -e $runfile; then
    sleep 0.01else
    get_sum_rows $1 > /tmp/tmp_alertrows.txtfi# 篩選日誌中的ORA-和Errorprevrows=`cat /tmp/tmp_alertrows.txt` 
prevrows=$(($prevrows+1)) 
tail -n +$prevrows $1 | egrep "^ORA-|^Error"# 每次指令碼執行完之後,更新alert日誌的總行數get_sum_rows $1 > /tmp/tmp_alertrows.txt

chmod 755 /etc/zabbix/scripts/alert.sh

 

建立agent conf檔案

vi /etc/zabbix/zabbix_agentd.d/userparameter_alert.conf
------------------------------------
UserParameter=ora.alert.[*],/etc/zabbix/scripts/alert.sh $1
------------------------------------

 

重啟zabbix agent服務

service zabbix-agent restart


zabbix server端

 

測試監控項

zabbix_get -s 10.40.16.120 -k 'ora.alert.[/tmp/alert_orcltest.log]'
正常情況下返回空行,如果返回其他錯誤,根據錯誤提示去檢查問題

 

在zabbix web頁面中設定宏

捕獲2

 

新增監控項

捕獲3

 

新增觸發器

捕獲4

 

測試

在資料庫中模擬一個死鎖出來,然後靜靜地等待zabbix報警

捕獲

大功告成,其實過程還蠻簡單的,監控其它型別的資料庫的後臺日誌都可以按照這種方式去處理。不過此方式不適用於日誌檔案太大,否則指令碼執行時間會比較久而導致超時,應該定期歸檔後臺日誌,使後臺日誌不至於太大。歸檔後臺日誌之後,手動刪除/tmp/tmp_alertrows.txt和/tmp/alert_orcltest.log,重新給後臺日誌做個硬連結就行了。


但是有個問題,就是如果alert 日誌太大,會導致zabbix 監控慢,甚至會超時,所以要定期歸檔alert log。我寫了個歸檔alert log的指令碼,參考如下。

1
2
3
4
5
6
7
8
9
10
11
[root@node2 trace] # cat /usr/local/shell/alert_clear.sh
#!/bin/bash
set  -u
set  -e
set  -o pipefail
alertlog_path= /opt/oracle/diag/rdbms/orcldg/orcl/trace/
date1=$( date  +%Y%m%d_%H%M%S)
su  - oracle -c  "cp -a ${alertlog_path}alert_orcl.log ${alertlog_path}alert_orcl.log_${date1}"
su  - oracle -c  "echo > ${alertlog_path}alert_orcl.log"
echo  /tmp/tmp_alertrows .txt
find  ${alertlog_path}  -name  "alert_orcl.log_*"  -mtime +30 |  xargs   rm  -rf
1
2
3
[root@node2 trace] # crontab -l
#歸檔alert日誌
50 00 * * *   /usr/local/shell/alert_clear .sh


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2705585/,如需轉載,請註明出處,否則將追究法律責任。

相關文章