本文将介绍如何使用zabbix监控oracle的后台日志,当oracle后台日志出现“ORA-”或“Error”时,第一时间将该信息报警出来
以下所有操作均用root执行
直接使用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
vi /etc/zabbix/zabbix_agentd.d/userparameter_alert.conf
------------------------------------
UserParameter=ora.alert.[*],/etc/zabbix/scripts/alert.sh $1
------------------------------------
service zabbix-agent restart
zabbix_get -s 10.40.16.120 -k 'ora.alert.[/tmp/alert_orcltest.log]'
正常情况下返回空行,如果返回其他错误,根据错误提示去检查问题
在数据库中模拟一个死锁出来,然后静静地等待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/,如需转载,请注明出处,否则将追究法律责任。