


社区投稿专栏
专属Zabbixer的投稿平台
往期投稿Top3
川总
CentOS7x64上yum安装Zabbix 3.0,一次全部搞定,100%成功
刘思奇
ZABBIX用DBforbix监控数据库
何星
Zabbix通过自动发现监控端口
(号外!投稿可以赚积分啦,详情见文末)


基于ODBC的ORACLE表空间自动发现
文 | 杨帆
-
-
一
概 述
日常数据库运维中需要关注数据库表空间使用情况,防止出现表空间写满导致业务不可用。但是有些业务数据库表空间数目较多且配置不规范,给运维工作带来一定工作量和难度。
Zabbix的ODBC监控功能,支持自动发现功能可以对ORACLE的每一个数据表空间进行单独容量和状态监控,可解决这个问题。
二
安装配置
01
检查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
02
安装数据库连接驱动(ORACLE)
开放数据库连接(Open Database Connectivity,ODBC)。ODBC只是数据库接框架,要连接具体数据库需要添加相关驱动程序。下面演示如何添加oracle驱动。
下载oracle相关驱动包:
PS:建议在oracle官网下载以下驱动包。
附:下载地址
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
其中:
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-*
03
新建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;
04
配置ODBC连接文件
与ODBC相关配置文件有2个【odbcinst.ini】和【odbc.ini】。odbcinst.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 通过这个名称来找到数据库连接信息。
05
检查配置是否正确
现在来验证一下配置,看下能否连上数据库。在命令行输入以下命令:
# isql DB1

注意:DB1 就是刚才说的DSN。看到截图返回结果。就已经成功通过ODBC连上数据库。
06
测试监控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进行监控配置。
三
自动发现表空间
01
新建基于ODBC自动发现


新建一个类型为 【数据库监控】的自动发现规则。其中DSN写我们在odbc.ini 配置的名字。监控用户名、密码已经在odbc配置文件写了,这里不需要再重复填写。
02
新建基于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字段名称。
03
查看监控数据

四
小聊几句ODBC监控数据库
Zabbix支持的unixODBC,它是最常用的开源ODBC API实现之一。在稳定性方面还是不错的。使用zabbix配置ODBC监控配置过程并不复杂,功能方面也能满足基本的数据库监控需求。所以在数据库不多情况(大概20-30套以下)小环境下,使用ODBC是一个不错选择。
但是数据库台数比较多情况下还是建议使用独立数据库工具。因为ODBC监控过程中占用poller processes调用ODBC去发起数据库查询,类似于agent 的被动模式,对Zabbix server性能会造成一定消耗。

来Zabbix2018大会,遇见#杨帆#

11月23日~24日,上海
演讲主题:Zabbix在证券交易行业的实践
主讲人:杨帆
个人简介:广州证券信息中心Zabbix监控系统建设与大数据日志分析系统管理负责人。

关于大会

点击报名

一键关注
关注公众号
加入社区群


Zabbix社区,因你而更美好