Zabbix监控Oracle数据库的方法

项目地址: https://github.com/zhangrj/Check-Oracle-Health

介绍

这套脚本是去年一位厂家同事给我用的,我在应用中主要发现如下问题:

  • 原zabbix模板使用的是SSH监控方式,部分数据库数据获取超时,zabbix可配置的最大监控项数据获取时间为30秒,我这边有些数据库查询则超过了1分钟。
  • 表空间的告警内容显示略显混乱。
  • 通过当前可用连接数为0或特定时间无法未获取监控数据来判断数据库连接异常稍有不足。

为此,我做了如下改动:

  • 将SSH监控方式改为zabbix采集器监控方式,避免数据获取超时,降低zabbix server压力。
  • 表空间告警分行显示。
  • 增加session数和process数检查,并为不同的数据库设置不同触发器,检查间隔20秒(曾出现sesssion数短时间飙升满,导致监控无法连接数据未及时告警问题,所以这项的检查间隔可以设置短一些)。
  • 增加tnsping检查,这项检查间隔也需要短些。tnsping可建立连接不代表数据库正常,但这项检查时必要的。
  • 其他一些bug修复不再赘述。

文件介绍及使用方法

各文件作用如下:

  • zabbix_sender.py:执行监控脚本并使用zabbix_sender工上传监控数据;
  • check_oracle_health:nagios的一个数据库插件,我这里只用了它的tnsping检查功能,实际上这个插件功能非常丰富;
  • zabbix模板:需导入zabbix的模板
  • 各监控项及对应的SQL见《 Oracle数据库当前已监控项.xlsx

使用方法:

1、在任意一台可连接Oracle数据库的主机上,新建用户oracle,家目录/home/oracle,安装Oracle客户端,安装python,安装python cx_Oracle模块。

2、配置环境变量,示例/home/oracle/.bash_profile:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH


export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1
export ORACLE_SID=nagios_oracle
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;

3、新建文件夹/home/oracle/zabbix,放入监控脚本。

4、导入zabbix模板,新建主机。hostname与脚本中’zabbix_hostname*’保持一致。根据实际情况修改zabbix_sender.py、check_tnsping.py、session_process_used.py。

5、设置定时任务,示例:

* * * * * /bin/bash /home/oracle/zabbix/session_process_used.sh
*/10 * * * * /usr/bin/python /home/oracle/zabbix/zabbix_sender.py
* * * * * source ~/.bash_profile;/usr/bin/python /home/oracle/zabbix/check_tnsping.py

更新

使用中发现,将所有数据库检查放在一个脚本中,会导致前一个数据库检查超时引起后面的超时,所以需要将zabbix_sender.py拆分,示例见”拆分“,定时任务需修改为:

* * * * * /bin/bash /home/oracle/zabbix/session_process_used.sh
*/10 * * * * /usr/bin/python /home/oracle/zabbix/example1.py
*/10 * * * * /usr/bin/python /home/oracle/zabbix/example2.py
*/10 * * * * /usr/bin/python /home/oracle/zabbix/example3.py
*/10 * * * * /usr/bin/python /home/oracle/zabbix/example4.py
*/10 * * * * /usr/bin/python /home/oracle/zabbix/example5.py
* * * * * source ~/.bash_profile;/usr/bin/python /home/oracle/zabbix/check_tnsping.py

zabbix也可使用Orabbix插件监控数据库,配置方法后续更新,可在站内搜索。