使用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/(/\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
好了,指令碼是準備好了,就等著方便工作了,短時間內配置幾十個資料庫例項都不是難題了,誰用誰知道。
對於一個資料庫例項配置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 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
好了,指令碼是準備好了,就等著方便工作了,短時間內配置幾十個資料庫例項都不是難題了,誰用誰知道。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26845409/viewspace-1796904/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell指令碼實現自動生成awr報告指令碼
- 幾個shell自動化指令碼(轉)指令碼
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- 一個自動生成awr報告的shell指令碼指令碼
- shell指令碼自動化採集效能sql指令碼SQL
- Hadoop自動化安裝shell指令碼Hadoop指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- 利用shell指令碼生成動態sql指令碼SQL
- 案例八:Shell自動化管理賬號指令碼指令碼
- 巧用shell指令碼生成快捷指令碼指令碼
- 自動生成Statspack的指令碼指令碼
- ORACLE自動備份shell指令碼Oracle指令碼
- svn and maven 自動部署shell指令碼Maven指令碼
- 自動ftp,生成control file,sql*load的shell指令碼FTPSQL指令碼
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- 自動生成ASH報告指令碼指令碼
- AWR報告自動生成指令碼指令碼
- 自動生成awr報告指令碼指令碼
- 自動重建失效index的shell指令碼Index指令碼
- Ubuntu自動啟動配置指令碼Ubuntu指令碼
- Shell指令碼實現生成SSL自簽署證書指令碼
- specjvm自動化指令碼JVM指令碼
- docker指令碼自動化Docker指令碼
- 自動化RMAN指令碼指令碼
- linux透過shell指令碼實現ssh互動式自動化Linux指令碼
- shell 備份檔案指令碼+自動清理指令碼
- 自動建立samba目錄的shell指令碼Samba指令碼
- awr報告每天自動生成指令碼指令碼
- SQL Server映象自動生成指令碼方法SQLServer指令碼
- 用於自動監控磁碟使用情況的 Shell 指令碼指令碼
- 使用shell指令碼自動修改Xcode工程編譯版本號指令碼XCode編譯
- 自動輸入密碼使用root許可權開啟shell指令碼密碼指令碼
- Dockerfile---指令碼自動化Docker指令碼
- vue自動化部署指令碼Vue指令碼
- AWR Report 自動生成指令碼 [final]指令碼
- 一個自動生成oracle job的指令碼Oracle指令碼
- [Shell] Shell 生成 HTML指令碼,可顯示錶格HTML指令碼
- 【博文推薦】用shell指令碼自動化備份資料庫指令碼資料庫