zabbix监控mysql表空间,Zabbix监控篇-利用orabbix对oracle tablespace表空间进行监控

释放双眼,带上耳机,听听看~!

Orabbix介绍

Orabbix 是设计用来为 zabbix 监控 Oracle 数据库的插件,它提供多层次的监控,包括可用性和服务器性能指标。

它提供了从众多 oracle 实例采集数据的有效机制,进而提供此信息的监控和性能指标。然后,您可以利用的 zabbix 的报告功能为收集的所有数据,并提供分析。目前的发行版中包含了一组预先定义的模板,包括从初始部署警报和图形功能。然而,这些可以进行微调,以满足您的需求和数据/监控要求

环境介绍

角色

IP

Zabbix_Hostname

Zabbix版本

Oracle版本

Orabbix版本

Zabbix_Proxy

192.168.11.136

Chris_Proxy

3.0.8

1.2.3

Oracle

192.168.11.141

192.168.11.141

3.0.8

12c

Oracle

192.168.11.142

192.168.11.142

3.0.8

12c

Zabbix_Proxy为监控端,两台Oracle为被控端,Orabbix只安装在zabbix_proxy上

Orabbix安装配置

Zabbix_Proxy/Orabbix操作

点击下载Orabbix

mkdir /opt/orabbix

unzip -o orabbix-1.2.3.zip -d /opt/orabbix

cp /opt/orabbix/conf/config.props.sample /opt/orabbix/conf/config.prop

cp /opt/orabbix/init.d/orabbix /etc/init.d/

chmod u+x /etc/init.d/orabbix

chmod u+x /opt/orabbix/run.sh

yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y

Oracle数据库创建账号

Oracle数据库操作

1.登录 oracle 命令行

su - oracle # 切换到 oracle 用户

sqlplus /nolog # 不连接任何数据库

conn /as sysdba # 用sysdba 登陆

conn 用户名/密码

select instance_name from v$instance; # 查看实例

2.创建Oracle监控账号

首先我们需要在被监控的Oracle上面创建一个账号,用于zabbix的数据获取,在oracle的sqlplus里面执行

CREATE USER ZABBIX

IDENTIFIED BY "zabbix"

DEFAULT TABLESPACE SYSTEM

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

3.赋予角色权限

GRANT CONNECT TO ZABBIX;

GRANT RESOURCE TO ZABBIX;

ALTER USER ZABBIX DEFAULT ROLE ALL;

4. 赋予系统权限

GRANT CREATE SESSION TO ZABBIX;

GRANT SELECT ANY DICTIONARY TO ZABBIX;

GRANT UNLIMITED TABLESPACE TO ZABBIX;

GRANT SELECT ANY DICTIONARY TO ZABBIX;

5.如果我们的数据库是Oracle 11g,我们还需要执行下面的语句

注释:官方文档是需要执行这个语句的,测试没有执行也一样可以用,目前没有发现问题(可参考)

exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'ZABBIX', is_grant => true, privilege => 'resolve');

exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');

commit;

Zabbix_Proxy配置Orabbix

Zabbix_Proxy/Orabbix操作

1.编辑orabbix配置文件

vim /opt/orabbix/conf/config.props

#Zabbix服务器配置

ZabbixServerList=ZabbixServer1 #定义ZabbixServer名称,多个Server用英文逗号隔开

ZabbixServer1.Address=192.168.11.136 #指定Zabbix Server地址,此地址需要与Zabbix Proxy本机的zabbix_agentd.conf配置文件中的 Server 参数指定的地址一致,如果 zabbix_agnentd.conf配置文件中指定的地址为 proxy 的地址,那么这里将写proxy的地址,如果指定的为 server 地址,那么就指定为 Server地址

ZabbixServer1.Port=10051 #指定Zabbix Server/Proxy的端口

#Orabbix守护进程配置

OrabbixDaemon.PidFile=./logs/orabbix.pid #Orabbix Pid 文件路径

OrabbixDaemon.Sleep=300 #Orabbix监控的刷新频率

OrabbixDaemon.MaxThreadNumber=100 #Orabbix的最大线程数量,此线程数量要大于等于数据库

#数据库连接池配置

DatabaseList=192.168.11.141,192.168.11.142 #指定数据库地址,多个数据库使用英文逗号隔开,此数据库地址需要与数据库机器上的 zabbix_agentd.conf中 Hostname 参数指定的一致

DatabaseList.MaxActive=10 #数据库连接池中的最大活跃数量

DatabaseList.MaxWait=100 #数据库连接池中的最大等待的毫秒数

DatabaseList.MaxIdle=1

#数据库一配置

192.168.11.141.Url=jdbc:oracle:thin:@192.168.11.141:1521:crmdb #因为是通过jdbc连接,所以需要配置jdk环境,IP:端口:数据库实例

192.168.11.141.User=zabbix #Orabbix监控oracle所用到的账号

192.168.11.141.Password=zabbix_password #Orabbix监控oracle的用户密码

192.168.11.141.MaxActive=10 #以下几个可对单个数据库进行配置,如果不配置则引用上面的数据库连接池配置

192.168.11.141.MaxWait=100

192.168.11.141.MaxIdle=1

192.168.11.141.QueryListFile=./conf/query.props #指定查询SQL文件

192.168.11.142.Url=jdbc:oracle:thin:@192.168.11.142:1521:crmdb

192.168.11.142.User=zabbix

192.168.11.142.Password=zabbix_password

192.168.11.142.MaxActive=10

192.168.11.142.MaxWait=100

192.168.11.142.MaxIdle=1

192.168.11.142.QueryListFile=./conf/query.props

2.启动orabbix服务

/etc/init.d/orabbix start

ps -ef|grep orabbix

3.查看日志

tail -f /opt/orabbix/logs/orabbix.log

2019-11-19 18:01:07,860 [main] INFO Orabbix - maxIdleSize=1

2019-11-19 18:01:07,860 [main] INFO Orabbix - maxIdleTime=1800000ms

2019-11-19 18:01:07,860 [main] INFO Orabbix - poolTimeout=100

2019-11-19 18:01:07,860 [main] INFO Orabbix - timeBetweenEvictionRunsMillis=-1

2019-11-19 18:01:07,860 [main] INFO Orabbix - numTestsPerEvictionRun=3

2019-11-19 18:01:08,081 [main] ERROR Orabbix - Error on Configurator for database 192.168.11.141 -->ORA-28040: No matching authentication protocol

2019-11-19 18:01:08,082 [main] INFO Orabbix - This Database 192.168.11.141 removed

2019-11-19 18:01:08,082 [main] ERROR Orabbix - ERROR on main - Connections is empty

报错“没有匹配的身份验证协议”

ORA-28040: No matching authentication protocol

更新 /opt/orabbix/lib/ojdbc6.jra包后成功,因为ojdbc6.jar驱动的认证协议对12c的认证协议不匹配,所以这里换成ojdbc8.jar驱动

官网下载驱动:https://www.oracle.com/database/technologies/appdev/jdbc-ucp-183-downloads.html

1a9fe04cc38766cc665888f515a3d260.png

下载完成后上传至服务器

mv ojdbc8.jar /opt/orabbix/lib/

chmod 644 /opt/orabbix/lib/ojdbc8.jar

cd /opt/orabbix/lib/

rm -rf ojdbc6.jar

4.再次启动orabbix

/etc/init.d/orabbix start

tailf /opt/orabbix/logs/orabbix.log

2019-11-19 18:10:29,347 [main] INFO Orabbix - maxPoolSize=10

2019-11-19 18:10:29,347 [main] INFO Orabbix - maxIdleSize=1

2019-11-19 18:10:29,347 [main] INFO Orabbix - maxIdleTime=1800000ms

2019-11-19 18:10:29,347 [main] INFO Orabbix - poolTimeout=100

2019-11-19 18:10:29,347 [main] INFO Orabbix - timeBetweenEvictionRunsMillis=-1

2019-11-19 18:10:29,347 [main] INFO Orabbix - numTestsPerEvictionRun=3

2019-11-19 18:10:45,528 [main] INFO Orabbix - Connected as ZABBIX

2019-11-19 18:10:45,540 [main] INFO Orabbix - --------- on Database -> crmdb

2019-11-19 18:10:49,827 [pool-1-thread-1] INFO Orabbix - Done with dbJob on database 192.168.11.141 QueryList elapsed time 4253 ms

5.orabbix加入开机自启

chkconfig --add orabbix

chkconfig orabbix on

207d1cd23a65183bd55c19a55e9fc489.png

添加 Orabbix 监控到Zabbix Web

1.导入模板

Orabbix默认自带监控模板在/opt/orabbix/template/ 下

ls /opt/orabbix/template/

Orabbix_export_full.xml Orabbix_export_graphs.xml Orabbix_export_items.xml Orabbix_export_triggers.xml

将以上几个模板导出至zabbix模板中

45a4ecb43384879231314311567263ca.png

2.添加ORACLE模板

找到我们需要添加oracle监控的主机,套上 Template_Oracle 模板

3569e135e097651481a9461d03984666.png

3.等待数据传送

具体等待时间依据Zabbix_Proxy或者Zabbix_Agentd发送到Server的时间间隔,这里可以看到已经有数据发送到页面

f25f2e480d51c049847b1a13e8169439.png

以上是完成了通过 Orabbix 监控 Oracle各项指标,下面介绍通过 Orabbix 来监控 tablespace 表空间大小及使用率

监控库大小

Zabbix_Proxy/Orabbix操作

orabbix默认情况下未开启数据库大小,需要配置query.props

cp /opt/orabbix/conf/query.props /opt/orabbix/conf/query.props.backup

1.添加监控库大小

vim query.props

#在QueryList=类目下增加dbfilesize,dbsize,如图所示

b5b93d6e810c7037970e21d88515a57c.png

然后在文件末尾添加对应的SQL语句,其实这是两条SQL语句,语法是:

dbfilesize.Query=SQL语句

dbsize.Query=SQL语句

我们可以单纯把SQL语句拿出来,通过Zabbix用户登录Oracle数据库后执行,看能否得到结果,确认无误后再添加到此文件内,过程请自行测试。

测试语句

#dbfilesize

select to_char(sum(bytes/1024/1024/10), 'FM99999999999999990') retvalue from dba_data_files

#dbsize

SELECT to_char(sum( NVL(a.bytes/1024/1024/10 - NVL(f.bytes/1024/1024/10, 0), 0)), 'FM99999999999999990') retvalue

FROM sys.dba_tablespaces d,

(select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a,

(select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f

WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+)

AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')

加入到query.props语句

加入到query.props中的语句必须要使用 \ 换行符,否则会报错“ Error on DBEnquiry on query=dbfilesize on database=192.168.11.141 Error returned is java.lang.IllegalArgumentException: null value for key ‘dbfilesize’”

dbfilesize.Query=select to_char(sum(bytes/1024/1024/10), 'FM99999999999999990') retvalue from dba_data_files

dbsize.Query=SELECT to_char(sum( NVL(a.bytes/1024/1024/10 - NVL(f.bytes/1024/1024/10, 0), 0)), 'FM99999999999999990') retvalue \

FROM sys.dba_tablespaces d, \

(select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, \

(select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f \

WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) \

AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')

269371250b80637d186509cc119e5b4c.png

2.重启Orabbix

/etc/init.d/orabbix restart

ad61a477f691e7fa1a3f64c965f7ebe7.png

3.查看日志

tailf /opt/orabbix/logs/orabbix.log

c9feed875e4c78b6105d9e91dc9895a7.png

4.查看数据

找到被监控的主机——》图形——》DB Size/FileSize

可以看到 DB Size和 DB File Size监控项监控数据库大小和数据库文件大小的图形数据

01904cd8fdff156ba86197acd400f4da.png

监控tablespace使用率

oracle表空间使用率orabix默认是监控的,语句就在 /opt/orabbix/conf/query.props 中,在此文件中搜索 tbl_space ,即可看到对应的SQL

a4323a6770158be99671a5985245c207.png

这个SQL会返回93%满的表空间信息,而对应这个监控项,orabbix也定义了触发器,因为监控项的返回值是文本,而没有满足条件的记录时返回字符串“none“,所以监控项对应的触发器会检查返回值开头是不是none,如果不是,就报警,这样,用户除了收到预警信息,还能从返回值的具体值中看到具体时哪个表空间快满了。

当然,大部分时间监控项会返回none,所以我们无法画出正常未满的表空间的空间占用时间曲线。只有超过93%慢时,我们才知道具体的占用情况。

测试SQL

把上面的SQL复制出来后,去掉换行符,然后通过Zabbix用户登录Oracle后来进程SQL语法检查

SELECT * FROM (

select '- Tablespace ->',t.tablespace_name ktablespace,

'- Type->',substr(t.contents, 1, 1) tipo,

'- Used(MB)->',trunc((d.tbs_size-nvl(s.free_space, 0))/1024/1024) ktbs_em_uso,

'- ActualSize(MB)->',trunc(d.tbs_size/1024/1024) ktbs_size,

'- MaxSize(MB)->',trunc(d.tbs_maxsize/1024/1024) ktbs_maxsize,

'- FreeSpace(MB)->',trunc(nvl(s.free_space, 0)/1024/1024) kfree_space,

'- Space->',trunc((d.tbs_maxsize - d.tbs_size + nvl(s.free_space, 0))/1024/1024) kspace,

'- Perc->',decode(d.tbs_maxsize, 0, 0, trunc((d.tbs_size-nvl(s.free_space, 0))*100/d.tbs_maxsize)) kperc

from

( select SUM(bytes) tbs_size,

SUM(decode(sign(maxbytes - bytes), -1, bytes, maxbytes)) tbs_maxsize, tablespace_name tablespace

from ( select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name

from dba_data_files

union all

select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name

from dba_temp_files

)

group by tablespace_name

) d,

( select SUM(bytes) free_space,

tablespace_name tablespace

from dba_free_space

group by tablespace_name

) s,

dba_tablespaces t

where t.tablespace_name = d.tablespace(+) and

t.tablespace_name = s.tablespace(+)

order by 8)

where kperc > 60

and tipo <>'T'

and tipo <>'U'

b6e8489b3f4584c6c6394088a61ab9e9.png

我这里把值调到55,看是否返回信息

3c93e8491b60b14711f373eb5c079097.png

表空间告警触发测试

以下我把表空间值改为55后进行重启orabbix,然后等待告警触发

c2477da710b6ee5be8ba47849ece04f6.png

重启orabbix

4259dd3e6c0c35b7b854ba0bcf690357.png

微信告警

d61e91275305fa4d03cecf40dcb6ef61.png

查看数据历史

仪表盘——》最新数据——》选中主机和应用集——》搜索 tablespaces ——》历史记录

可以看到正常的时候返回值都是none,告警时会显出表空间使用率

5f55cba9ee37f61c2fd32f4517e6292a.png

参考文献

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值