巧用nagios脚本监控oracle连接
2012-02-23 10:20
435 查看
场景:
程序修改完成后,上传到应用服务器tomcat,重启tomcat后,发现启动异常!前端nginx负载均衡出现504错误,网站无法打开!
排查:
经过排查tomcat日志,发现连接数据库异常;登陆数据库后以"conn /as sysdba"方式登陆正常,数据库轻载,无压力;于是检查数据库的监听器,输入"lsntctl services"命令,卡住,半天不出结果…
故障处理:
输入"lsntctl stop" 或者"lsntctl reload"命令,卡住,半天不出结果,于是输入service network restart命令,一样没有效果!于是出必杀技,输入"netstat -ntpl|grep :1521"命令找出监听器的进程号,kill -9结束掉,然后重启监听器,再启动tomcat正常,网站访问畅通无阻!
原因分析:
可能由于数据库bug的原因,出现监听器卡住的情况,导致数据库连接失败!参见:http://hi.baidu.com/hzcasper/blog/item/8bdf7449e350263d0bf7ef70.html
后期维护:
为了尽量避免这种问题,想到去写一个监控脚本配合nagios监控,当数据库连接异常的时候,可以第一时间收到报警短信;java程序连接数据库使用连接池,所以不一定会及时暴露出问题!
写一个脚本放任务计划中运行,定期去连接下数据库,查询下系统时间和数据库的状态,spool输出到临时文件上
再写一个脚本来根据临时文件来判断数据库是否正常,该脚本供nagios插件check_nrpe调用,之所以分两个脚本,中间使用临时文件,主要是出于权限问题的考虑,nagios本身带了一个check_oracle的插件,感觉不太适用,还需要在nagios服务器端安装oracle客户端,配置tnsnames.ora文件,设置oracle相关的环境变量等等…
监控效果!
本文出自 “斩月” 博客,谢绝转载!
程序修改完成后,上传到应用服务器tomcat,重启tomcat后,发现启动异常!前端nginx负载均衡出现504错误,网站无法打开!
排查:
经过排查tomcat日志,发现连接数据库异常;登陆数据库后以"conn /as sysdba"方式登陆正常,数据库轻载,无压力;于是检查数据库的监听器,输入"lsntctl services"命令,卡住,半天不出结果…
故障处理:
输入"lsntctl stop" 或者"lsntctl reload"命令,卡住,半天不出结果,于是输入service network restart命令,一样没有效果!于是出必杀技,输入"netstat -ntpl|grep :1521"命令找出监听器的进程号,kill -9结束掉,然后重启监听器,再启动tomcat正常,网站访问畅通无阻!
原因分析:
可能由于数据库bug的原因,出现监听器卡住的情况,导致数据库连接失败!参见:http://hi.baidu.com/hzcasper/blog/item/8bdf7449e350263d0bf7ef70.html
后期维护:
为了尽量避免这种问题,想到去写一个监控脚本配合nagios监控,当数据库连接异常的时候,可以第一时间收到报警短信;java程序连接数据库使用连接池,所以不一定会及时暴露出问题!
写一个脚本放任务计划中运行,定期去连接下数据库,查询下系统时间和数据库的状态,spool输出到临时文件上
[root@server199 ~]# crontab -l */5 * * * * /usr/local/nagios/libexec/connect_oracle.sh [root@server199 ~]# cat /usr/local/nagios/libexec/connect_oracle.sh #!/bin/sh #functions: connect oracle server test #author:lw.yang #modify_date: 2012-02-22 rm -rf /tmp/check_oracle.log export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1/ $ORACLE_HOME/bin/sqlplus username/password@ip:1521/services_name <<EOF set echo off set feedback off spool /tmp/check_oracle.log alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS'; select sysdate from dual; select name,open_mode from v\$database; spool off set echo on set feedback on EOF
再写一个脚本来根据临时文件来判断数据库是否正常,该脚本供nagios插件check_nrpe调用,之所以分两个脚本,中间使用临时文件,主要是出于权限问题的考虑,nagios本身带了一个check_oracle的插件,感觉不太适用,还需要在nagios服务器端安装oracle客户端,配置tnsnames.ora文件,设置oracle相关的环境变量等等…
[root@server199 ~]# cat /usr/local/nagios/libexec/check_oracle.sh #!/bin/sh #functions: use monitor oracle server status with nagios nrpe plugin #author:lw.yang #modify_date: 2012-02-22 STATE_OK=0 STATE_CRITICAL=2 if [ -f /tmp/check_oracle.log ];then COUNT=$(grep -i 'READ WRITE' /tmp/check_oracle.log |wc -l) if [ $COUNT -eq 1 ];then echo "connect oracle server normal..." exit $STATE_OK else echo "database not open" exit $STATE_CRITICAL fi else echo "can't connect to oracle server..." exit $STATE_CRITICAL fi
监控效果!
[root@server199 ~]# cat /tmp/check_oracle.log SQL> alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS'; SQL> select sysdate from dual; SYSDATE ------------------- 2012-02-23:10:10:03 SQL> select name,open_mode from v$database; NAME OPEN_MODE --------- ---------- EPROWB2B READ WRITE SQL> spool off |
本文出自 “斩月” 博客,谢绝转载!
相关文章推荐
- Nagios监控ORACLE ALERT日志脚本
- 修改Nagios的check_oracle脚本来监控Oracle的临时表空间
- 修改Nagios的check_oracle脚本来监控Oracle的临时表空间
- nagios用监控dell服务器硬盘或scsi卡连接的盘阵的脚本
- Linux 常用oracle监控shell脚本(二)
- 基于nagios网络监控----脚本
- Nagios监控SSD健康的脚本 推荐
- IBM服务器RAID卡Nagios监控脚本
- [Oracle数据库监控] Oracle 11g DATAGUARD 同步延时监控脚本
- 通过Nagios监控Weblogic服务(续)--优化调整脚本
- 关于nagios监控系统添加主机和服务脚本
- Shell 脚本 连接 oracle 数据库
- nagios下配置监控系统内存的使用情况的脚本,带预警功能
- 懒人nagios页面监控脚本
- 监控oracle系统中未加索引的外键脚本
- oracle监控脚本【转】
- 配置 Nagios 监控 Oracle 服务器
- 用nagios监控ORACLE服务器
- nagios监控远程主机的存活、磁盘空间监控、负载监控、进程数监控、ip 连接
- 计划任务里执行包含连接oracle命令的shell脚本报错:SP2-0667: Message file sp1<lang>.msb not found