使用shell生成orabbix自动化配置脚本(r6笔记第53天)

在使用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 <<eof
 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/(/\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

好了,脚本是准备好了,就等着方便工作了,短时间内配置几十个数据库实例都不是难题了,谁用谁知道。</eof

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

案发现场:被注入的软件及 ORA-600 16703 灾难的恢复

最近帮助一个客户恢复数据库,遇到了如下这个问题。让我们再一次惊醒于数据安全,如果不做好防范,问题总是会来得猝不及防。

30340
来自专栏「3306 Pai」社区

浅析ProxySQL用户管理

对于读写分离特别重要,保证了同一个事务中所有的语句都会路由到同一组示例,防止出现同一个事务中,上下文数据不一致的情况。例如,在不开启这个属性的情况下:

32710
来自专栏数据和云

Oracle 18c新特性:Schema-Only 帐号提升应用管理安全性

在 Oracle 18c 中,一个特殊类型的帐号被引入到数据库当中,这特特性被称为 Schema-Only 帐号,这个帐号通过 NO AUTHENTICATIO...

13740
来自专栏乐沙弥的世界

使用pt-table-checksum校验MySQL主从复制

pt-table-checksum是一个基于MySQL数据库主从架构在线数据一致性校验工具。其工作原理在主库上运行, 通过对同步的表在主从段执行checksum...

26520
来自专栏Jerry的SAP技术分享

ABAP Netweaver和Cloud Foundry上的环境变量Environment Variable

21920
来自专栏乐沙弥的世界

Oracle 12c手工建库(非CDB及CDB创建)

对于Oracle数据库的创建,Oracle除了支持dbca(GUI界面),同时也支持手工方式创建数据库,即使用CREATE DATABASE语句创建数据库。使用...

21010
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

7120
来自专栏乐沙弥的世界

收缩临时表空间

        当排序操作、重建索引等大型操作无法在内存中完成时,临时表空间将为排序提供便利。一般情况下临时表空间为多个用户,多个会话所共 享。不能为会话分...

14730
来自专栏Hadoop实操

如何使用StreamSets实现Oracle中变化数据实时写入Kudu

1.1K50
来自专栏乐沙弥的世界

启用用户进程跟踪

仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)

9920

扫码关注云+社区

领取腾讯云代金券