Skip to end of metadata
Go to start of metadata

01. 概述

        日常数据库运维中需要关注数据库表空间使用情况,防止出现表空间写满导致业务不可用。但是有些业务数据库表空间数目较多且配置不规范,给运维工作带来一定工作量和难度。

        Zabbix的ODBC监控功能,支持自动发现功能可以对ORACLE的每一个数据表空间进行单独容量和状态监控,可解决这个问题。

02. 安装配置

1. 检查Zabbix server是否安装ODBC组件

启动过程会看到ODBC:YES即已经安装。(一般基于RPM方式安装的都支持odbc监控)。

如果为NO的话,按以下方式安装:

安装ODBC

yum -y install unixODBC unixODBC-devel

重新编译一下Zabbix-server

 ./configure --prefix=/usr/local/zabbix  --enable-server --enable-proxy --enable-agent  --enable-ipv6 --with-mysql=/usr/bin/mysql_config    --with-net-snmp   --with-libcurl  --with-libxml2 --with-openipmi  --with-unixodbc --with-ldap  --with-ssh2  --enable-java     
  make
  make install

2. 安装数据库连接驱动(ORACLE)

        开放数据库连接(Open Database Connectivity,ODBC)。ODBC只是数据库接框架,要连接具体数据库需要添加相关驱动程序。下面演示如何添加oracle驱动。

下载oracle相关驱动包:

建议在oracle官网下载驱动包

其中:

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm

oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm

安装驱动包:

rpm –ihv oracle-instantclient11.2-*

3. 新建ORACLE监控数据库用户,并赋予监控权限

CREATE USER ZABBIX
IDENTIFIED BY zabbix
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT ALTER SESSION TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANT CONNECT TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
GRANT SELECT ON V_$INSTANCE TO ZABBIX;
GRANT SELECT ON DBA_USERS TO ZABBIX;
GRANT SELECT ON V_$LOG_HISTORY TO ZABBIX;
GRANT SELECT ON V_$PARAMETER TO ZABBIX;
GRANT SELECT ON SYS.DBA_AUDIT_SESSION TO ZABBIX;
GRANT SELECT ON V_$LOCK TO ZABBIX;
GRANT SELECT ON DBA_REGISTRY TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON V_$SYSSTAT TO ZABBIX;
GRANT SELECT ON V_$PARAMETER TO ZABBIX;
GRANT SELECT ON V_$LATCH TO ZABBIX;
GRANT SELECT ON V_$PGASTAT TO ZABBIX;
GRANT SELECT ON V_$SGASTAT TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON V_$PROCESS TO ZABBIX;
GRANT SELECT ON DBA_DATA_FILES TO ZABBIX;
GRANT SELECT ON DBA_TEMP_FILES TO ZABBIX;
GRANT SELECT ON DBA_FREE_SPACE TO ZABBIX;
GRANT SELECT ON V_$SYSTEM_EVENT TO ZABBIX;

4. 配置ODBC连接文件

        与ODBC相关配置文件有2个odbcinst.iniodbc.iniodbcinst.ini用于记录数据库驱动文件位置。odbc.ini用于记录数据库连接信息,例如数据库IP地址,用户名,密码等信息。

a.配置odbcinst.ini。配置oracle驱动文件的位置。在odbcinst.ini加入一下信息:

        [ORACLE]
        Description     = ODBC for ORACLE 11g
        Driver         = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1

b.配置odbc.ini文件,配置要监控数据库的相关连接信息。例如:我们现在要监控数据库IP为:192.168.1.100;用户名为:zabbix;密码为:zabbix;实例名:orcl。配置如下:

        [DB1]
        Driver = ORACLE
        ServerName=192.168.1.100:1521/ orcl
        UserID = zabbix
        Password = zabbix

第一行中的[DB1]为DSN(数据源名称),Zabbix server 通过这个名称来找到数据库连接信息。

5. 检查配置是否正确

现在来验证一下配置,看下能否连上数据库。在命令行输入以下命令:

# isql DB1

DB1 就是刚才说的DSN。看到截图返回结果。就已经成功通过ODBC连上数据库。

6. 测试监控SQL

表空间名称查询SQL:

select tablespace_name name from dba_data_files group by tablespace_name;

表空间容量查询SQL:
        SELECT Round(( 1 - free.MB / total.MB ) * 100, 2)  AS Used_Pct FROM (SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MB FROM   dba_free_space GROUP BY tablespace_name) free, (SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MB FROM dba_data_files GROUP BY tablespace_name) total WHERE free.tablespace_name = total.tablespace_name;

到了这里系统层面的ODBC已经配置完成了。可以通过Zabbix web进行监控配置。

03. 自动发现表空间

1. 新建基于ODBC自动发现

新建一个类型为 【数据库监控】的自动发现规则。其中DSN写我们在odbc.ini 配置的名字。监控用户名、密码已经在odbc配置文件写了,这里不需要再重复填写。

2. 新建基于ODBC监控原型

查询SQL:

SELECT Round(( 1 - free.MB / total.MB ) * 100, 2)   AS Used_Pct FROM (SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MB FROM   dba_free_space GROUP BY tablespace_name) free, (SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MB FROM dba_data_files GROUP BY tablespace_name) total WHERE free.tablespace_name = total.tablespace_name and total.tablespace_name = to_char('{#NAME}');
上图中的红色框里面的 {#NAME},就是自动发现sql字段名称。

3. 查看监控数据

04. 小聊几句ODBC监控数据库

        Zabbix支持的unixODBC,它是最常用的开源ODBC API实现之一。在稳定性方面还是不错的。使用zabbix配置ODBC监控配置过程并不复杂,功能方面也能满足基本的数据库监控需求。所以在数据库不多情况(大概20-30套以下)小环境下,使用ODBC是一个不错选择。

        但是数据库台数比较多情况下还是建议使用独立数据库工具。因为ODBC监控过程中占用poller processes调用ODBC去发起数据库查询,类似于agent 的被动模式,对Zabbix server性能会造成一定消耗。