Welcome 微信登录

首页 / 数据库 / MySQL / 使用Shell生成Orabbix自动化配置脚本

在使用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 < col value format a10
 set pages 0
 set linesize 200
 set feedback off
 select value from v\$parameter where name="db_unique_name";
 EOF` |sed "s/(/ /g"|sed "s/)/ /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好了,脚本是准备好了,就等着方便工作了,短时间内配置几十个数据库实例都不是难题了,谁用谁知道。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址