zabbix4.4监控案例之Oracle11G监控
zabbix4.4监控案例之Oracle11G监控
文章目录 [点击隐藏]
今天我们来讲讲如何通过zabbix4.4监控Oracle数据库、这里我们需要使用到一个监控插件:Orabbix。
1、什么是Orabbix?
Orabbix是一个旨在与Zabbix Enterprise Monitor配合使用的插件,可提供针对Oracle数据库的多层监视,性能和可用性报告以及度量以及服务器性能指标。 它提供了一种从众多Oracle实例获取数据的有效机制,并反过来将此信息提供给Zabbix服务器以用于监视和性能指标。然后,您可以利用Zabbix的报告功能来收集所有数据,并为利益相关者提供诸如图表和服务水平协议指标之类的分析。 当前的发行版包含一组预定义的模板,这些模板合并了初始部署中的警报和图形功能。但是,可以根据您的需求和数据/监视要求进行微调。
Orabbix官方网站:http://www.smartmarmot.com/
Orabbix官方文档:http://www.smartmarmot.com/wiki/index.php?title=Orabbix
Orabbix架构图
Orabbix是 SmartMarmot 的监控插件解决方案、当然 SmartMarmot 还提供多种数据库监控插件、例如:DBforBIX;Orabbix;MySQLBix;PostBIX。有兴趣的小伙伴可以去 SmartMarmot 的官方网站自行学习了解。说了这么多、那么Orabbix到底能监控哪些指标呢?
Orabbix监控指标:
- DB版本(即软件包的有效性);
- 归档(带有趋势分析的归档日志生成);
- 事件等待(文件I/O、单块读取、多块读取、直接路径读取、SQLNet消息、控制文件I/O、日志写入);
- 命中率(对触发器、表/过程、SQL区域、主体的命中率);
- 逻辑I/O(服务器在逻辑I/O上的性能:当前读、一致读、块更改);
- 物理I/O(重做写、数据文件写、数据文件读);
- PGA;
- SGA(特别是;固定缓冲区,Java池,大池,日志缓冲区,共享池缓冲缓存);
- 共享池(池字典缓存,池空闲内存,库Chache, SQL区域,MISC);
- 引脚命中率(Oracle库缓存引脚由库缓存争用引起,库缓存是用来存储SQL可执行文件以供重用的区域);
- 会话/过程
- 会话(活动会话、非活动会话、系统会话)
- DBSize/DBFileSize(数据库实际使用空间和文件大小的DBSize)
注:我们无需安装任何类型的Oracle客户端即可使用Orabbix。 Orabbix使用Java对象和连接字符串连接到Oracle数据库,因此不需要在Zabbix服务器上安装Oracle客户端。
2、环境检查
在安装之前需要确保zabbix server端已经安装了JRE环境、可以使用java命令识别。如果没有安装的小伙伴请自行百度安装(这里必须安装低版本的Java、具体原因后面会详细说明)。
没有安装的同学可以通过下面的命令进行安装:
### 3、Orabbix安装
我们首先去zabbix server服务器上创建orabbix插件目录 /opt/orabbix。然后我们去 orabbix 官方网站下载 orabbix 安装包到 /opt/orabbix 目录并解压。下载地址(最新版本orabbix-1.2.3.zip):http://www.smartmarmot.com/product/orabbix/download/ 。解压完成之后我们给 orabbix 目录进行授权
4、增加Oracle用户权限
orabbix的配置先告一段落、我们来给zabbix配置一个Oracle授权用户:
当然、如果你想添加一个最小权限的Oracle授权用户、你也可以进行下面的操作(否则可以忽略):
注:这里我一直操作失败,在GRANT SELECT ON V_$INSTANCE TO ZABBIX这里提示未知命令、有知道的小伙伴请告诉我一下。
如果你使用的是Oracle 11G或者以上的用户,你还需要做以下操作放开ACL访问控制,否则在监控过程中有部分内容无法显示:
5、配置Orabbix
编辑并修改 orabbix 配置文件 config.props :
6、添加ojdbc8.jar驱动
orabbix默认使用的是ojdbc6.jar驱动,因为ojdbc6.jar驱动的认证协议对12c的认证协议不匹配,所以这里换成ojdbc8.jar驱动:
ojdbc8.jar管网下载地址:https://www.oracle.com/database/technologies/appdev/jdbc-ucp-183-downloads.html(请选择和自己操作系统对应的版本)
下载完成之后我们把ojdbc8.jar包上传至服务器:
7、重新编译orabbix-1.2.3.jar
注:这里我卡了很长时间、最后通过下面的方式成功解决。
重点来了:orabbix默认是不支持zabbix4+的,因为orabbix在传输数据的时候在数据包中没有加 Header包头 ,在zabbix4之前版本中zabbix server和zabbix proxy收到的数据包允许不加 Header包头,所以orabbix在zabbix4.0版本之前可以游刃有余的对orabbix监控,但是在zabbix4.0之后由于zabbix官方删除了对纯本文协议的支持(无Header)的支持,官方解释:Header and data length。
所以现在zabbix4.0之后版本必须强制添加 Header包头,对于没有添加 Header包头的数据包,Zabbix Server/Zabbix Proxy将会拒绝此数据报文,哪能怎么办呢,难道不能用orabbix监控oracle了吗? 在github上的一个 isuse 中,给出了解决方法,将重新编译orabbix-1.2.3.jar加入 Header 协议头的支持。 具体操作如下(这里我们必须要使用低版本的java、使用高版本的java编译完成之后会报错的):
8、启动orabbix
接下来我们把orabbix加入开机启动即可、到这里orabbix的安装配置就已经完成了、下面我们去zabbix后台中添加监控项模板:
9、配置监控模板
orabbix给我们提供了已经写好的监控模板文件、模板文件放在安装包的 /opt/orabbix/template 文件目录下面、我们直接把下面的四个监控模板文件导入zabbix即可(注意导入顺序):
- Orabbix_export_full.xml 全部导入(图表 监控项 触发器)
- Orabbix_export_items.xml 监控项
- Orabbix_export_graphs.xml 图表
- Orabbix_export_triggers.xml 触发器
导入完成之后、我们直接添加监控主机、关联Oracle模板(这里就不再详细讲了)。我这里使用的是测试库、没有什么数据、各位小伙伴可以直接忽略了。
10、监控库大小
好了、到这里我们就已经成功通过Orabbix插件监控了Oracle数据库啦。但是现在还有点小问题、orabbix默认情况下未开启数据库大小,我们需要去配置query.props,在proxy上修改/opt/orabbix/conf/query.props。
#在QueryList=类目下增加dbfilesize,dbsize,如图所示:
然后在文件末尾添加对应的SQL语句,其实这是两条SQL语句,语法如下:
- dbfilesize.Query=SQL语句
- dbsize.Query=SQL语句
SQL语句测试
我们可以单纯把SQL语句拿出来,通过Zabbix用户登录Oracle数据库后执行,看能否得到结果,确认无误后再添加到此文件内,测试语句如下:
加入语句
加入到query.props语句 加入到query.props中的语句必须要使用 \ 换行符,否则会报错 “Error on DBEnquiry on query=dbfilesize on database=172.16.200.240 Error returned is java.lang.IllegalArgumentException: null value for key ‘dbfilesize’”
添加完成之后我们重启orabbix并查看orabbix日志、然后我们去zabbix就可以看到 DB Size和 DB File Size监控项监控数据库大小和数据库文件大小的图形数据了。
11、监控tablespace使用率
oracle表空间使用率orabix默认是监控的,语句就在 /opt/orabbix/conf/query.props 中,在此文件中搜索 tbl_space ,即可看到对应的SQL:
这个SQL会返回满足93%的表空间信息,而对应这个监控项,orabbix也定义了触发器,因为监控项的返回值是文本,而没有满足条件的记录时返回字符串“none“,所以监控项对应的触发器会检查返回值开头是不是none,如果不是,就报警,这样,用户除了收到预警信息,还能从返回值的具体值中看到具体时哪个表空间快满了。 当然,大部分时间监控项会返回none,所以我们无法画出正常未满的表空间的空间占用时间曲线。只有表空间使用率超过93%时,我们才知道具体的占用情况。
我们也可以把上面的SQL复制出来后,去掉换行符,然后通过Zabbix用户登录Oracle后来进程SQL语法检查。我们可以修改query.props中的表空间阈值为65%,然后使其报警。