在使用orabbix监控oracle的时候,本身和zaabix agent最大的不同便是使用orabbix不需要对每个数据库实例都安装单独的agent,而是一
在使用orabbix监控oracle的时候,本身和zaabix agent最大的不同便是使用orabbix不需要对每个数据库实例都安装单独的agent,而是一个orabbix实例可以对应多个数据库实例,orabbix是基于jdbc的方式来实现的,基于此,配置的工作就尤为重要了。
对于一个数据库实例配置orabbix,大体有下面三件事需要考虑。
网络的配置,防火墙中开放对应的端口,这个是在使用orabbix agent的时候,为了使得orabbix agent能够通过jdbc的方式访问到数据库,我们需要在防火墙中开放相应的端口
比如
iptables -i input -s 10.xx.133.xx -p tcp -m multiport --dports $db_port -i eth0 -j accept
当然了使用orabbix的时候在数据库实例中还是需要创建响应的档案用户,这个用户的主要作用就是访问数据字典表,性能视图,纯粹就是查询。
最后的任务就是配置jdbc连接串了。
比如我们假定数据库为test_internal,,则可以在orabbix的配置文件中配置
test_internal.url=jdbc:oracle:thin:@10.127.xxxx.xx:1523:test_internal
test_internal.user=orabbix
test_internal.password=orabbix
test_internal.querylistfile=./conf/query.props
整体来看这三个步骤的工作量不大,但是在实际中操作的时候还是有一些繁琐,一方面是服务器ip,对于orabbix agent来说,可能直接使用ip连接更加直接,而使用hostname的方式还需要在/etc/hosts中再配置一层解析,每个数据库实例的端口都可能不同,如果给你几十台机器需要做这些配置工作,工作的繁琐程度和出错纪律就会高很多,希望自己能更快一些,但是总是感觉快不起来,老是卡在一些细小的地方,总体来说这个配置工作还是需要花点时间的,而且也着实是个细心活。
为了更快,更方便使用,自己也是痛下决心来改进,于是乎写了下面的shell脚本,一个脚本直接生成所有的脚本,一目了然,什么时候该做哪些,哪些是特定的环境变量都可以动态赋值生成动态的配置脚本。
这个脚本的主要工作在于使用tnsping来解析得到的链接串,然后把连接串中的host由主机名改为ip的方式,解析其中的端口号,考虑了主备库的一些差距,脚本也做了一些改进。
$oracle_home/bin/tnsping `sqlplus -s / as sysdba set pages 0
set linesize 200
set feedback off
select value from v\\$parameter where;
eof` |sed 's/(/\n/g'|sed 's/)/\n/g'|grep -i 'host\|port\|service_name\|sid_name' > tns_tmp.lst
tmp_host_name=`grep -i host tns_tmp.lst|awk -f= '{print $2}'`
host_name=`grep -w $tmp_host_name /etc/hosts|awk '{print $1}'`
db_port=`grep -i port tns_tmp.lst|awk -f= '{print $2}'`
db_name=`grep -i 'service_name\|sid_name' tns_tmp.lst|awk -f= '{print $2}'`
eth_name=`ifconfig|head -1|awk '{print $1}'`
echo #### use below to open firewall to zabbix server with dedicated db port ####
echo iptables -i input -s 10.127.133.82 -p tcp -m multiport --dports $db_port -i $eth_name -j accept
echo #### use below script to create orabbix user accounts ####
echo create user orabbix
echo identified by orabbix
echo default tablespace users
echo temporary tablespace temp
echo profile default
echo account unlock;
echo -2 roles for orabbix
echo grant connect to orabbix;
echo grant resource to orabbix;
echo alter user orabbix default role all;
echo -3 system privileges for orabbix
echo grant select any table to orabbix;
echo grant create session to orabbix;
echo grant select any dictionary to orabbix;
echo grant unlimited tablespace to orabbix;
echo grant select any dictionary to orabbix;
echo exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'orabbix', is_grant => true, privilege => 'resolve');
echo exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
echo #### add below in orabbix config files ####
echo $db_name.url=jdbc:oracle:thin:@$host_name:$db_port:$db_name|sed 's/ //g'
echo $db_name.user=orabbix
echo $db_name.password=orabbix
echo $db_name.querylistfile=./conf/query.props
脚本的运行情况如下:
#### use below to open firewall to zabbix server with dedicated db port ####
iptables -i input -s 10.127.xxxx.xx -p tcp -m multiport --dports 1526 -i eth0 -j accept
#### use below script to create orabbix user accounts ####
create user orabbix
identified by orabbix
default tablespace users
temporary tablespace temp
profile default
account unlock;
-2 roles for orabbix
grant connect to orabbix;
grant resource to orabbix;
alter user orabbix default role all;
-3 system privileges for orabbix
grant select any table to orabbix;
grant create session to orabbix;
grant select any dictionary to orabbix;
grant unlimited tablespace to orabbix;
grant select any dictionary to orabbix;
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'orabbix', is_grant => true, privilege => 'resolve');
exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
#### add below in orabbix config files ####
test_internal.url=jdbc:oracle:thin:@10.127.xxxx.xx:1526:test_internal
test_internal.user=orabbix
test_internal.password=orabbix
test_internal.querylistfile=./conf/query.props
好了,脚本是准备好了,就等着方便工作了,短时间内配置几十个数据库实例都不是难题了,谁用谁知道。
本文永久更新链接地址:
