zabbix利用orabbix123监控oracle数据库及表空间.docx
《zabbix利用orabbix123监控oracle数据库及表空间.docx》由会员分享,可在线阅读,更多相关《zabbix利用orabbix123监控oracle数据库及表空间.docx(14页珍藏版)》请在冰豆网上搜索。
zabbix利用orabbix123监控oracle数据库及表空间
orabbix-1.2.3监控oracle数据库
1、服务器端配置:
1.1服务器版本说明
操作系统
版本号
内核版本
Centos
7.2.1511forx86_64
3.10.0-327.el7
zabbix版本3.2.0
orabbix-1.2.3
Java版本1.8.0.65
1.2安装jdk软件
java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7.x86_64
java-atk-wrapper-0.30.4-5.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
javassist-3.16.1-10.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
tzdata-java-2016a-1.el7.noarch
用centos光盘做成yum源直接安装会缺少这个包需要去网站上下载
如果这个包不安装jdbc就不会从客户端获取到数据。
1.3安装orabbix软件
下载地址:
这个下载地址和所有大神写的文档都一样下载下来orabbix-1.2.3.zip这个包。
(orabbix已经很久没更新了,从2013年的网上的文档到现在用的都是这个包)
[root@zabbix-serveropt]#mkdir/opt/orabbix
上传orabbix-1.2.3.zip至/opt/orabbix目录下
[root@zabbix-serverorabbix]#unziporabbix-1.2.3.zip#解压这个文件
赋权
[root@zabbix-serveropt]#chmoda+x/opt/orabbix–R
#这步有很多网上的文档省略了,但是很关键
下面是解压出来的文件
注意orabbix-1.2.3.jar这个jdbc文件这个很关键。
1.4配置orabbix的配置文件
[root@zabbix-serveropt]#cd/opt/orabbix/conf/
[root@zabbix-serverconf]#cpconfig.props.sampleconfig.props#复制模板文件
[root@zabbix-serverconf]#viconfig.props#编辑配置文件
下面的配置文件中需要修改的都用蓝色加粗了
---------------------------------------------------------------------------------------------------------------------------------
ZabbixServerList=zabbix-server#服务器的主机名
zabbix-server.Address=133.64.103.210#服务器的主机名及IP地址
zabbix-server.Port=10051#服务器的主机名及端口号
OrabbixDaemon.PidFile=./logs/orabbix.pid
OrabbixDaemon.Sleep=300
OrabbixDaemon.MaxThreadNumber=100
DatabaseList=sbzytst188#客户端的主机名称不过网上其他文档说可以随便写我没试
DatabaseList.MaxActive=10
DatabaseList.MaxWait=100
DatabaseList.MaxIdle=1
sbzytst188.Url=jdbc:
oracle:
thin:
@133.64.86.188:
1521:
sbzytst
#这行很关键写错无数据客户机主机名客户机IP地址端口号:
实例名
sbzytst188.User=zabbix#数据库内创建zabbix用
sbzytst188.Password=zabbix#zabbix这个用户的密码
sbzytst188.MaxActive=10
sbzytst188.MaxWait=100
sbzytst188.MaxIdle=1
sbzytst188.QueryListFile=./conf/query.props
---------------------------------------------------------------------------------------------------------------------------------
1.5启动服务查看进程
#cp-a/opt/orabbix/init.d/orabbix/etc/init.d/orabbix(开机自动启动)
[root@zabbix-serveropt]#serviceorabbixstart
或者
sh/opt/orabbix/run.sh#推荐使用脚本方式启动,可以看到启动过程中的问题。
#psaux|greporabbix
tail-f/opt/orabbix/logs/orabbix.log
[root@zabbix-server~]#systemctlenableorabbix添加orabbix到自动启动
#日志查看程序启动是否正常,不过就算程序正常启动tzdata-java-2016a-1.el7.noarch包不安装也是没有数据。
1.6zabbixweb页面添加主机
主机名称:
必须是客户机的主机名否则zabbix无法监控
客户机IP地址
客户机的端口这里填写10051而不是10050因为orabbix的监控项使用的zabbix探测器默认使用的是10051端口
同时也要修改[root@sbzytst188~]#cat/etc/zabbix/zabbix_agentd.conf
###Option:
ListenPort
ListenPort=10051监听端口改至10051
1.7模板导入
[root@zabbix-serverconf]#cd/opt/orabbix/template/
#orabbix自带的模板都在这个目录下面共有4个文件导入时只需要导入Orabbix_export_full.xml就可以了
Orabbix_export_full.xml
Orabbix_export_graphs.xml
Orabbix_export_items.xml
Orabbix_export_triggers.xml
在zabbix3.2中Template_Oracle模板与TemplateOSLinux模板有很多共同的监控项所以导入Template_Oracle模板时要先停用TemplateOSLinux模板。
到这里还没有监控成功,需要在客户端的oracle数据库中添加zabbix用户及赋权
2、客户端操作:
2.1、数据库操作
1)#su-oralce登录oracle命令行
#sqlplus/assysdba
2)创建zabbix用户
createuserzabbixidentifiedbyzabbix
defaulttablespacesystemtemporarytablespacetemp
profiledefaultaccountunlock;
3)赋予zabbix一切查看权限
GRANTCONNECTTOZABBIX;
GRANTRESOURCETOZABBIX;
ALTERUSERZABBIXDEFAULTROLEALL;
GRANTSELECTANYTABLETOZABBIX;
GRANTCREATESESSIONTOZABBIX;
GRANTSELECTANYDICTIONARYTOZABBIX;
GRANTUNLIMITEDTABLESPACETOZABBIX;
GRANTSELECTANYDICTIONARYTOZABBIX;
2.2、如果是11G的数据库版本
还需要执行下面的语句开放ACL的访问控制,否则在监控的过程中有部份内容无法正常显示(例于数据库版本,数据库文件大小等),而且orabbix的日志显示中也会有以下的错误提示。
execdbms_network_acl_admin.create_acl(acl=>'resolve.xml',description=>'resolveacl',principal=>'ZABBIX',is_grant=>true,privilege=>'resolve');
execdbms_network_acl_admin.assign_acl(acl=>'resolve.xml',host=>'*');
commit;
3、验证数据
登陆zabbixweb端查看:
这里监控的内容都是orabbix自带的模板监控项
想要其他的监控内容还需要自己添加。
数据信息正常获取。
四、安装配置过程中产生的问题
安装完成后启动服务后正常无报错,但接收不到任何数据。
查看日志
[root@zabbix-server~]#cat/opt/orabbix/logs/orabbix.log
日志内信息
--------------------------------------------------------
StartingOrabbixVersion1.2.3
Orabbixstartedwithpid:
18944
PidFile->./logs/orabbix.pid
--------------------------------------------------------
日志信息不完整且没有成功连接数据库的信息
下面为正常日志信息
----------------------------------------------------------
2016-10-1310:
04:
22,655[main]INFOOrabbix-StartingOrabbixVersion1.2.3
2016-10-1310:
04:
22,670[main]INFOOrabbix-Orabbixstartedwithpid:
21037
2016-10-1310:
04:
22,671[main]INFOOrabbix-PidFile->./logs/orabbix.pid
2016-10-1310:
04:
22,829[main]INFOOrabbix-DBPoolcreated:
mons.dbcp.datasources.SharedPoolDataSource@1963006a
2016-10-1310:
04:
22,829[main]INFOOrabbix-URL=jdbc:
oracle:
thin:
@133.64.86.188:
1521:
sbzytst
2016-10-1310:
04:
22,829[main]INFOOrabbix-maxPoolSize=10
2016-10-1310:
04:
22,829[main]INFOOrabbix-maxIdleSize=1
2016-10-1310:
04:
22,829[main]INFOOrabbix-maxIdleTime=1800000ms
2016-10-1310:
04:
22,829[main]INFOOrabbix-poolTimeout=100
2016-10-1310:
04:
22,829[main]INFOOrabbix-timeBetweenEvictionRunsMillis=-1
2016-10-1310:
04:
22,829[main]INFOOrabbix-numTestsPerEvictionRun=3
2016-10-1310:
04:
27,328[main]INFOOrabbix-ConnectedasZABBIX
2016-10-1310:
04:
27,332[main]INFOOrabbix----------onDatabase->sbzytst
2016-10-1310:
04:
30,343[pool-1-thread-1]INFOOrabbix-DonewithdbJobondatabasesbzytst188QueryListelapsedtime2972ms
-----------------------------------------------------------------
发现问题:
使用[root@zabbix-serverorabbix]#sh/opt/orabbix/run.sh脚本运行报错
Causedby:
java.lang.Error:
java.io.FileNotFoundException:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/lib/tzdb.dat(Nosuchfileordirectory)
去目录下查看tzdb.dat文件
发现链接
tzdb.dat->/usr/share/javazi-1.8/tzdb.dat
但是/usr/share/javazi-1.8/tzdb.dat这个文件不存在
网上搜索了一下发现需要安装tzdata-java-2016a-1.el7.noarch.rpm就是本文开始中提到的。
安装该RPM包重启orabbix后数据正常收取。
这个问题不代表所有安装过程中遇到的问题,如果在其他环境中部署遇到问题还是要多XX。
5、监控数据库表空间
首先,需要创建脚本,获取到oracle数据库中的数据,下面是脚本:
vi/etc/zabbix/zabbix_agentd.d/oracle/tablespace.sh
exportPATH
exportORACLE_BASE=/oracle/app
exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/db1
exportLANG="en_US"
exportORACLE_SID=sbzytst
exportNLS_LANG="AMERICAN_AMERICA.UTF8"
exportNLS_DATE_FORMAT="YYYY-MM-DDHH24:
MI:
SS"
exportPATH=$ORACLE_HOME/bin:
$ORACLE_HOME/OPatch:
$PATH
>/etc/zabbix/tablespace.log
sqlplus"/assysdba"<@/etc/zabbix/zabbix_agentd.d/oracle/tablespace.sql
EOF
vi/etc/zabbix/zabbix_agentd.d/oracle/tablespace.sql
setserveroutputon
setheadingoff
setpagesize300
--setlinesize200
setfeedbackoff
columntablespace_namefora40
columnFREE(G)fora10
columnFREE_PCT(%)fora15
columnSIZEformat99,999,999,999
columnFREEformat99,999,999,999
columnUSEDformat99,999,999,999
columnFREE_PCTformat99,999,999,999
setechooff
spool/etc/zabbix/tablespace.log
SELECTTABLESPACE_NAME,
TO_CHAR(ROUND(BYTES/1024,2),'99990.00')"TOTAL(G)",
TO_CHAR(ROUND(FREE/1024,2),'99990.00')"FREE(G)",
TO_CHAR(ROUND(100*FREE/BYTES)/100,'99990.00')"FREE_PCT(%)"
FROM(SELECTA.TABLESPACE_NAMETABLESPACE_NAME,
FLOOR(A.BYTES/(1024*1024))BYTES,
FLOOR(B.FREE/(1024*1024))FREE,
FLOOR((A.BYTES-B.FREE)/(1024*1024))USED
FROM(SELECTTABLESPACE_NAMETABLESPACE_NAME,SUM(BYTES)BYTES
FROMDBA_DATA_FILES
GROUPBYTABLESPACE_NAME)A,
(SELECTTABLESPACE_NAMETABLESPACE_NAME,SUM(BYTES)FREE
FROMDBA_FREE_SPACE
GROUPBYTABLESPACE_NAME)B
WHEREA.TABLESPACE_NAME=B.TABLESPACE_NAME)
ORDERBYFLOOR(FREE/BYTES);
spooloff
quit
注意/etc/zabbix/tablespace.log文件的权限改为oracle。
通过执行这个脚本可以获取到oracle数据库中的tablespace列表,并输出到/etc/zabbix/tablespace.log日志中去,这个执行脚本需要修改属主属组为oracle.oracle,并且需要给于执行权限,在crontab中设置每一分钟执行一次,下面是执行得到的结果:
[root@sbzytst188zabbix]#cat/etc/zabbix/tablespace.log
-------------------------------------------------------------------------------
GRID_APP_DATA0.100.100.99SYSAUX1.400.540.38UNDOTBS193.9793.691.00SDH_INDEX390.00160.910.41SDE0.100.060.58SDH_PT1150.0087.760.59USERS0.120.110.90GRID_IND0.100.100.99SYSTEM2.481.270.51SDH_DATA690.00173.170.25GRID_RP_DATA0.100.100.99SDH_PT2180.0097.470.54
-------------------------------------------------------------------------------
上面就是取出来的数据,既然数据取出来了,那么剩下的要做的就是把数据弄到zabbix中去咯。
下面将使用下面两个脚本来对取出的这些数据进行格式化转换和取值:
[root@sbzytst188/]#cat/etc/zabbix/shell/oracle_discovery.sh
-------------------------------------------------------------------------------
#!
/bin/bash
TABLESPACE=`cat/etc/zabbix/tablespace.log|awk'{print$1}'|awk'NR>3{print}'`
COUNT=`echo"$TABLESPACE"|wc-l`
INDEX=0
echo'{"data":
['
echo"$TABLESPACE"|whilereadLINE;do
echo-n'{"{#TABLENAME}":
"'$LINE'"}'
INDEX=`expr$INDEX+1`
if[$INDEX-lt$COUNT];then
echo','
fi
done
echo']}'
-------------------------------------------------------------------------------
这个脚本的功能是从tablespace.log文件中取出Name那一列,并进行JSON格式化输出(因为zabbix的自动发现功能获取的数据类型是JSON格式的),下面是执行效果
[root@sbzytst188/]#sh/etc/zabbix/shell/oracle_discovery.sh
-------------------------------------------------------------------------------
{"data":
[
{"{#TABLENAME}":
"UNDOTBS1"},
{"{#TABLENAME}":
"SDH_INDEX"},
{"{#TABLENAME}":
"SDE"},
{"{#TABLENAME}":
"SDH_PT1"},
{"{#TABLENAME}":
"USERS"},
{"{#TABLENAME}":
"GRID_IND"},
{"{#TABLENAME}":
"SYSTEM"},
{"{#TABLENAME}":
"SDH_DATA"},
{"{#TABLENAME}":
"GRID_RP_DATA"},
{"{#TABLENAME}":
"SDH_PT2"}]}
-------------------------------------------------------------------------------
还有一个脚本是获取tablespace.log中的最后三列数据,脚本内容如下:
[root@sbzytst188/]#cat/etc/zabbix/shell/oracle_check.sh