通过zabbix实现对数据库的监控,如ORACLE、MySQL、MSSQL、DB2……
2 篇帖子 分页: 1 / 1
帖子kk545141 » 2017年 9月 13日 17:05 星期三
orabbix版本:1.2.3
Oracle版本:11g


启动报错信息如下:

[root@zabbix-server orabbix]# /etc/init.d/orabbix start
Starting Orabbix service:
[root@zabbix-server orabbix]# Sep 13, 2017 4:57:56 p.m. oracle.jdbc.driver.OracleDriver registerMBeans
WARNING: Error while registering Oracle JDBC Diagnosability MBean.
java.lang.NoSuchMethodError: method javax.management.StandardMBean.<init> with signature (Ljava.lang.Class;Z)V was not found.
at oracle.jdbc.driver.OracleDiagnosabilityMBean.<init>(OracleDiagnosabilityMBean.java:34)
at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:367)
at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:201)
at java.security.AccessController.doPrivileged(libgcj.so.10)
at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:197)
at java.lang.Class.initializeClass(libgcj.so.10)
at java.lang.Class.initializeClass(libgcj.so.10)
at java.lang.Class.forName(libgcj.so.10)
at org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS.setDriver(DriverAdapterCPDS.java:500)
at com.smartmarmot.orabbix.Configurator.getConnection(Configurator.java:454)
at com.smartmarmot.orabbix.Configurator.getConnections(Configurator.java:581)
at com.smartmarmot.orabbix.Orabbixmon.run(Orabbixmon.java:91)
at com.smartmarmot.orabbix.bootstrap.main(bootstrap.java:50)
Stopping
java.lang.Exception: ERROR on main - Connections is empty
at com.smartmarmot.orabbix.Orabbixmon.run(Orabbixmon.java:101)
at com.smartmarmot.orabbix.bootstrap.main(bootstrap.java:50)


求解决方案
帖子kk545141 » 2017年 11月 7日 16:15 星期二
今天有时间,我回复下自己的帖子吧。
==========================================

其实,我后来没去深入研究orabbix,网上貌似也没搜索到合适的答案。那我后来是如何对Oracle、DB2进行监控的呢?

目前采取的监控方式相对比较简单,就是自己编写一些脚本,通过sqlplus 或 db2 connect 是否能连上数据库来判断数据库连接状态是否正常,而表空间的监控则是自己写了一些相对简单的脚本,来实现对表空间的监控。
简介:
    该脚本基本可实现Oracle数据库状态监控,表空间监控;亦可根据具体需要监控锁状态及其它异常状况等。

1. 上传脚本“ora_tbs_monitor.sh”至被监控主机的"/etc/zabbix/script"目录。
    (脚本参见“170918-[数据库表空间监控模板] Ora_TBS_Monitor.sh”)
    
# 在被监控linux上以root身份执行以下命令:
usermod -aG oinstall zabbix | chmod g+x /home/oracle

# 新建脚本内容
mkdir /etc/zabbix/script | vi /etc/zabbix/script/ora_tbs_monitor.sh

2. 在“/etc/zabbix/zabbix_agentd.d/userparameter_script.conf”文件中添加以下内容:
vi /etc/zabbix/zabbix_agentd.d/userparameter_script.conf
# 添加以下内容
# ==========================
# 监控Oracle数据库表空间
UserParameter=ora.tbs.monitor,/etc/zabbix/script/ora_tbs_monitor.sh Monitor_Tbs_Info
UserParameter=ora.tbs.discover,/etc/zabbix/script/ora_tbs_monitor.sh Discover_Tbs_Name
UserParameter=ora.tbs.pct.free[*],/etc/zabbix/script/ora_tbs_monitor.sh Check_Tbs_Result $1 $2
# ==========================

3. 重启zabbix agent客户端程序。
/etc/init.d/zabbix-agent restart

4. 配置服务器端
    新建模板“Tem_Oracle”,并创建自动发现规则、监控项原型、触发器类型、图形原型。基本流程就是先创建自动发现规则,再创建监控项原型、图形原型、触发器类型即可。具体内容如下:
# 创建自动发现规则
# ======================
名称:Oracle Tablespace discover
类型:zabbix客户端
键值:ora.tbs.discover
数据更新间隔(秒):3600(建议)
保留失去的资源期间(天):7(建议)
# =======================

# 创建监控原型
# =======================
名称:Free Tablespace on {#TBSNAME} (PCT)
类型:zabbix客户端
键值:ora.tbs.pct.free[{#TBSNAME},pfree]
信息类型:浮点数
单位:%
数据更新间隔(秒):180(建议)
历史数据保留时长(天):7
趋势数据存储周期(天):30
# =======================

# 创建图形原型(可以忽略)
# =======================
名称:Table space usage {#TBSNAME}
宽:900(默认)
高:200(默认)
监控项:添加原型即可
# =======================

# 创建触发器类型
# =======================
名称:Free Table space is less than 30% on {#TBSNAME}
严重性:警告
表达式:{Tem_Oracle:ora.tbs.pct.free[{#TBSNAME},pfree].last()}<30
# =======================
    在模板中增加以下监控项和对应的触发器,该监控项属后加,主要用于检查sqlplus的执行情况,如执行错误或未执行则状态改变。正常状态为1,错误状态为0。
# 创建监控项
# ======================
名称:Oracle sqlplus status
类型:zabbix客户端
键值:ora.tbs.monitor
信息类型:数字(无正负)
数据类型:布尔
数据更新间隔(秒):60 (代表1分钟执行一次sqlplus)
应用集:Oracle status
# ======================

# 创建触发器
# ======================
名称:Oracle sqlplus connection exception
严重性:严重
表达式:{Tem_Oracle:ora.tbs.monitor.last()}=0
# ======================


======================================
ora_tbs_monitor.sh 脚本内容如下:
代码: 全选
#!/bin/bash

############################################################################
# 版本v1.2                                                                 #
# 脚本主要用于监控Oracle数据库表空间,需配合Zabbix Agent客户端使用,       #
# 建议部署到“/etc/zabbix/script/”下                                        #
# 使用前请将确保zabbix用户能访问“/home/oracle/.bash_profile”(读取执行权限)     #
#                                                                          #
# --written by kk545141 2017/9/20                                             #
#                                                                          #
############################################################################


# 设置环境变量

export LANG=zh_CN.UTF-8
source /home/oracle/.bash_profile


# 定义变量

REQ_FUN_NAME="$1"
REQ_TBS_NAME="$2"
REQ_MON_TYPE="$3"

USERNAME="zabbix"
PASSWORD="za36ori1"
INSTENCE=""
V_TBS_NAME="SYSTEM|SYSAUX|UNDOTBS1|TEMP|^$|^SQL|>|rows|:*:|^Tablespace|---"


function Monitor_Tbs_Info(){

   # 检查目录是否存在

   if [ ! -d "/tmp/zabbix_data" ]; then

      mkdir -p /tmp/zabbix_data
    
   fi

   # 登陆被监控主机数据库并获取信息

   sqlplus ${USERNAME}/${PASSWORD} >/dev/null <<EOF

      spool /tmp/zabbix_data/tablespace01.dat
      select df.tablespace_name "Tablespace",totalusedspace "Used.Bytes",(df.totalspace - tu.totalusedspace) "Free.Bytes",df.totalspace "Total.Bytes",round(10000 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace))/100 "Pct.Free" from (select tablespace_name,round(sum(bytes)) TotalSpace from dba_data_files group by tablespace_name) df,(select round(sum(bytes)) totalusedspace, tablespace_name from dba_segments group by tablespace_name) tu where df.tablespace_name = tu.tablespace_name ;
      spool off
      exit;

EOF

   # 检查运行结果正常与否
   
   S01=`date -r /tmp/zabbix_data/tablespace01.dat +%s`
   S02=`date +%s`
   S03=`expr ${S02} - ${S01}`
   
   if [ ${S03} -lt 300 ];then
   
      grep -is "error" /tmp/zabbix_data/tablespace01.dat >/dev/null
      
      if [ $? -eq 1 ];then
         echo "1"
      else
         echo "0"
      fi
      
   else
   
      echo "0"
      
   fi

}


function Discover_Tbs_Name(){

   # 定义数组

   tablespace_name=(`egrep -v "${V_TBS_NAME}" /tmp/zabbix_data/tablespace01.dat | awk '{print $1}'`)

   # 打印json格式数据

   printf "{\n"
   printf '\t'"\"data\":["

   for ((i=0; i<${#tablespace_name[@]}; i++))
   do

      printf '\n\t\t{'
      printf "\"{#TBSNAME}\":\"${tablespace_name[$i]}\"}"
      
      if [[ $i -lt ${#tablespace_name[@]}-1 ]];then      
         printf ','         
      fi

   done

   printf "\n\t]\n"
   printf "}\n"

}


function Check_Tbs_Result(){

   case ${REQ_MON_TYPE} in

      pfree)
         a=`grep -w "${REQ_TBS_NAME}" /tmp/zabbix_data/tablespace01.dat | awk '{print $5}'`
         echo ${a};;
         
      *)
         echo $ERROR_WRONG_PARAM;
         exit 1;;

   esac

}

${REQ_FUN_NAME}

exit 0
2 篇帖子 分页: 1 / 1

登录

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客