暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Z投稿】基于ODBC的ORACLE表空间自动发现

Zabbix开源社区 2018-10-02
406

社区投稿专栏

专属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社区,因你而更美好


文章转载自Zabbix开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论