最近用zabbix监控所有的oracle 数据库。几十台。所有都一样的做。
不知道为什么就是有几台,监控不到,报错。
下面,我把错误贴出来,请高手指教。
在监控服务器(统称为服务端)上192.168.218.130运行一下命令:
./zabbix_get -s 192.168.218.129 -k oracle[_buffer_cache] (从客户端192.168.218.129上获取buffer_cache)
得到的结果是:
SQL*Plus: Release 11.2.0.2.0 Production on Thu Jan 24 20:53:52 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn mon/123456@test
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified (这个错误很奇怪,网上查询的时候,都是关于监听,tns之类的,但是没有解决)
SQL> SP2-0640: Not connected
在被监听的机子(统称为客户段)上,也就是192.168.218.129,运行一下命令,测试是否能获取到oracle运行参数
./zabbix_agentd -t oracle[_buffer_cache] (在本地上运行zabbix_agent测试看能否获取buffer_cache)
运行结果如下:
oracle[_buffer_cache] [t|
SQL*Plus: Release 11.2.0.2.0 Production on Thu Jan 24 20:58:01 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn mon/123456@test
Connected.
SQL>
TO_CHAR("SIZE(MB)"
------------------
75497472 (这里是要获取的结果,在客户机上测试能够成功的,本来只显示数字的,我把过程都输出来。)
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
我解释一下这个过程:
1,在客户机上,启动zabbix_agent.,这程序是用C写的,这个程序监听从服务端发送过来的请求。
2,当服务端向客户端发送要获取buffer_cache时,客户端的zabbix_agent,调用shell写的一个zabora程序,这里程序里面有各种的oracle的运行参数,包括version,dbfilesize,dbsize等等,
这些参数都是通过查询oracle获取的。就是下面的$sql变量。
echo "$sql" | /u01/app/oracle/product/11.2.0.2/bin/sqlplus /nolog @/etc/zabbix/zabora/cont.sql
cont.sql这个文件里面存储的就是一个连接oracle的命令:conn mon/123456@test (就是上面oracle运行过程中显示出来的)
连接oracle,查询,获取buffer_cache,也就是这个数值:75497472 ,然后zabbix_agent将这个数值发给服务端。底层都是通过C写的。
3,服务端获得数据后存储到mysql数据库。php读取mysql数据,用图表的方式显示成波浪线。
上面这个错误,很多人给的建议是服务端的TNS是不是出问题了,服务端根本就没有安装oracle,因为客户端个服务端的通讯仅仅是通过C传递几个数值而已。
客户端的TNS该修改的地方都修改了,在客户端运行:SQL> conn mon/123456@test 是可以直接进入oracle的。
请高手给点建议!