共计 3357 个字符,预计需要花费 9 分钟才能阅读完成。
本篇内容介绍了“Zabbix 中 Orabbix 监控失效的问题实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
自从使用了 Orabbix 监控 Oracle 以来,很多工作都能够通过这种配置可控的方式处理,有些问题是潜在问题,有些是遗留问题,多多少少还是提高了效率。
最近涉及机房搬迁,我们的 Zabbix 服务器也在迁移计划中,而因为部署的规模也不大,所以 Orabbix 和 Zabbix Server 放在了一起,结果搬迁之后问题就来了,搬迁之后开通了网络防火墙的前提下,系统层面的监控 Zabbix Agent 表现正常,而原本可用的 Orabbix 现在没有任何监控信息,
在这种监控基本失效的情况下,我总是不断的收到这样的报警信息, 对于一个核心业务而言,这类报警会很敏感,
ZABBIX- 监控系统:
————————————
报警内容: Alive xxxx
————————————
报警级别: PROBLEM
————————————
监控项目: Alive:0
————————————
报警时间:2017.07.21-22:25:40
查看 Orabbix 的日志信息,发现在连接正常的情况下,最后会抛出一个空指针异常。
[root@orabbx_monitor logs]# tail -f orabbix.log
2017-07-22 23:15:43,168 [main] INFO Orabbix – maxIdleSize=1
2017-07-22 23:15:43,168 [main] INFO Orabbix – maxIdleTime=1800000ms
2017-07-22 23:15:43,168 [main] INFO Orabbix – poolTimeout=100
2017-07-22 23:15:43,168 [main] INFO Orabbix – timeBetweenEvictionRunsMillis=-1
2017-07-22 23:15:43,169 [main] INFO Orabbix – numTestsPerEvictionRun=3
2017-07-22 23:15:43,774 [main] INFO Orabbix – Connected as ORABBIX
2017-07-22 23:15:43,778 [main] INFO Orabbix – ——— on Database – test
ERROR Orabbix – Error on dbJob for database test QueryList error: java.lang.NullPointerException
INFO Orabbix – Done with dbJob on database testQueryList elapsed time 1089 ms
在这种情况下,分析问题也变得很艰难,因为目前还不知道到底是哪里的问题,到底是 Zabbix Server, 还是 Agent 还是 Orabbix 本身。
这个空指针异常很模糊,通过这些信息,我们基本可以断定 Zabbix Server 是没有问题的,如果有问题 Zabbix Agent 的系统监控修直接会失效,而 Orabbix 的角色有点类似于一个 Zabbix AGent, 本质上是使用 JDBC 的方式来发送 SQL 来达到监控的需求。
所以我的注意力自然而然到了 Orabbix 上面,首先我把监控的数据库列表精简为一到两个,这样方便排查问题。
经过一番排查,大体的收获就是 Zabbix Server 端的 Zabbix Agent 没启动,Orabbix 还是需要的。另外一个就是因为服务器搬迁,IP 信息发生变化,所以原本的本机的防火墙信息需要补充,比如自己给自己开通 10050 端口的访问,因为这台服务器是 Zabbix Server, 也是一台服务器,所以也要监控自己,而 Orabbix 是需要这个 Zabbix Agent 的,还有一点也很重要,那就是在 /etc/hosts 里调整 IP 信息。
做了这些之后重启 Orabbix,发现问题依旧,重启了 Zabbix Agent,Zabbix Server,问题依旧。
而且我发现日志信息很简单,开启了 Debug 模式之后,日志信息虽然多了,但是都是失败的信息,暂时没有发现有价值的信息。
所以我决定通过对比来确定问题的边界。
Orabbix 本质上架构虽然简单, 官方提供的图形如下:
目前的情况没有进展,数据库层面的监控项都没有生效,所以一个重点的方向就是保证首先 Orabbix 可用,这个怎么办呢,在当前的环境中调试总是没有进展,那我就干脆重新搭建一套,搭建起来大概 10 多分钟就搞定了,安装 Java, 解压 orabbix 软件包,启动。
数据库和 Orabbix 的连接信息配置是通过 Orabbix 里的 config.properties 文件来控制的,而监控项的信息是通过 query.properties 来控制的,而在 Zabbix 里面 orabbix 的监控项是通过模板来控制的,所以 Orabbix 的问题分析就主要是通过这三个文件来得到更多的信息。
配置好 Orabbix 之后,监控项我保留了默认的,发现 Orabbix 竟然可用了,这就说明 config.properties 文件没有问题。
而当我把监控项的文件 query.properties 替换为目前的文件时,启动 Orabbix 竟然抛出了刚开始的错误,所以可以说明问题出在了 query.properties 文件上。
那么问题继续如何定位呢,我恢复了 query.properties 文件之后,监控又恢复了正常,但是我定制了大量的监控项, 这些在默认的模板中是没有的,是不是监控模板出了问题呢。
这种情况下,我做了一种中和,那就是使用默认的模板,然后先把一个定制监控项加进去,结果发现这个监控项竟然取不到数据。在 Zabbix 中错误信息如下:
看起来是数据类型不匹配造成的,我把数据类型改为文本,最后发现这个监控项的输出就是一个空字符,所以转换类型的时候出了问题。
那以前怎么是好的,是不是 Orabbix 向 Zabbix 推送数据的时候有问题。监控项是使用 Zabbix trapper 来推送的,那么我们可以使用 zabbix_sender 来推送一条信息试试是否成功,比如下面的命令。
./zabbix_sender -z 10.129.xx.xx -p 10051 -s test -k db_time -o test
info from server: processed: 1; failed: 0; total: 1; seconds spent: 0.000051
sent: 1; skipped: 0; total: 1
其中 10.129.xx.xx 是 IP 的信息,10051 是端口的信息,test 是对应的数据库的实例名,也就是对应 Zabbix 里面的一个主机名,db_time 是监控项的名字,最后 -o test 就是发送的信息是 test
结果显示这个信息推送还是正常的,那我们就逐步缩小排查范围,基本排除了模板的问题,因为信息推送是没有问题的。
所以一圈排查下来就是 query.props 文件的问题了,这个空指针的问题看起来很诡异,但是我们可以在这种情况下先折中处理,比如先配置几个优先级很高的监控项,让监控生效,然后在后期对这个监控列表做出很细致的调整。有一点可以确定的是,这个 Orabbix 自从启动以来就没有停过,所以不排除 Orabbix 本身的检查机制是否在重启之后有些验证就过不去。
所以我在新服务器上调试成功的 Orabbix 文件 query.properties,在备份之后我就拷贝到了原来的目录下,这样连接信息不变,模板也不变,监控项保留了绝大部分,整个 Orabbix 的监控又跑起来了。
比如下面的这个 DB time 监控
“Zabbix 中 Orabbix 监控失效的问题实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!