返回顶部

欢迎来到菜鸟大明儿哥的博客

我们一起交流学习,不断提升自我

Zabbix监控Oracle数据库---orabbix

 

一、简介
Orabbix 是设计用来为 zabbix 监控 Oracle 数据库的插件,它提供多层次的监控,包括可用性和服务器性能指标。
它提供了从众多 Oracle 实例采集数据的有效机制,进而提供此信息的监控和性能指标。然后,您可以利用的 zabbix 的报告功能为收集的所有数据,并提供分析。目前的发行版中包含了一组预先定义的模板,包括从初始部署警报和图形功能。然而,这些可以进行微调,以满足您的需求和数据/监控要求。

Orabbix 监控什么?
1. 数据库版本
2. 归档日志与生产趋势分析
3. 触发器,表/过程等命中率
4. 逻辑 I/O 性能
5. 物理 I/O 性能
6. PGA
7. SGA
8. 共享池
9. Sessions
10. 数据库大小

二、安装配置
# mkdir /opt/orabbix
# cd /opt/orabbix
# unzip orabbix-1.2.3.zip
# mvconf/config.props.sample conf/config.props
# cp init.d/orabbix /etc/init.d/
# chmod 755 /etc/init.d/orabbix
# chkconfig orabbix on


三、修改 orabbix 配置
# vim conf/config.props
#comma separed list of Zabbix servers
ZabbixServerList=ZabbixServer
ZabbixServer.Address=192.168.0.180 #zabbix服务器地址
ZabbixServer.Port=10051 #端口号
#pidFile
OrabbixDaemon.PidFile=./logs/orabbix.pid
#frequency of item's refresh
OrabbixDaemon.Sleep=300
#MaxThreadNumber should be >= thanthe number of your databases
OrabbixDaemon.MaxThreadNumber=100 #最大连接线程数,建议数据库数两倍
#put here your databases in a commaseparated list
DatabaseList=192.168.0.70 # 名称与该机在 zabbix 中监控的主机名称保持一致,用逗号隔开
#Configuration of Connection pool
#if not specified Orabbis is going touse default values (hardcoded)
#Maximum number of active connectioninside pool
DatabaseList.MaxActive=10
#The maximum number of milliseconds thatthe pool will wait
#(when there are no availableconnections) for a connection to be returned
#before throwing an exception, or <=0 to wait indefinitely.
DatabaseList.MaxWait=100
DatabaseList.MaxIdle=1
#define here your connection string foreach database
192.168.0.70.Url=jdbc:oracle:thin:@192.168.0.70:32778:southdb # 需要 jdk 环境,因为这里是通过 JDBC 连接的,southdb 为数据库实例名称
192.168.0.70.User=ZABBIX # 用来监控 oracle 数据库的用户名和密码,需要在 oracle 中创建并赋予一定的权限
192.168.0.70.Password=ZABBIX
#Those values are optionals if notspecified Orabbix is going to use the general values
192.168.0.70.MaxActive=10
192.168.0.70.MaxWait=100
192.168.0.70.MaxIdle=1
192.168.0.70.QueryListFile=./conf/query.props #SQL执行脚本
#DB2.Url=jdbc:oracle:thin:@server2.domain.example.com:<LISTENER_PORT>:DB2
#DB2.User=zabbix
#DB2.Password=zabbix_password
#DB2.QueryListFile=./conf/query.props
#DB3.Url=jdbc:oracle:thin:@server3.domain.example.com:<LISTENER_PORT>:DB3
#DB3.User=zabbix
#DB3.Password=zabbix_password
#DB3.QueryListFile=./conf/query.props


修改抓取频率
vim query.props
DefaultQueryPeriod=2 #执行频率默认两分钟 修改完需重启orabbix服务



关于 jdbc:
Oracle = jdbc:oracle:thin:@<host>:<LISTENER_PORT>:<instance>
PostgreSQL = jdbc:postgresql://<host>:<port>/<database>
MS Sql Server = jdbc:jtds:sqlserver://<host>:<port>/<instancename>
MySQL Server = jdbc:mysql://[host:port],[host:port].../[database]
DB2 = jdbc:db2://<servername>:<port>/<installation>




四、创建 oracle 监控账户
1、登录 oracle 命令行
su - oracle # 切换到 oracle 用户
sqlplus /nolog # 不连接任何数据库
conn /as sysdba # 用sysdba 登陆

conn 用户名/密码
select instance_name from v$instance; # 查看实例

2、创建用户
CREATE USER zabbix
IDENTIFIED BY 123456
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;

3、赋予角色权限
GRANT CONNECT TO zabbix;
GRANT RESOURCE TO zabbix;
ALTER USER MONITOR DEFAULT ROLEALL;

4、赋予系统权限
GRANT SELECT ANY TABLE TO zabbix;
GRANT CREATE SESSION TO zabbix;
GRANT SELECT ANY DICTIONARY TO zabbix;
GRANT UNLIMITED TABLESPACE TO zabbix;
GRANT SELECT ANY DICTIONARY TO zabbix;

如果是11g数据库,执行下列语句:
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'MONITOR', is_grant => true, privilege => 'resolve');
exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
commit;


五、启动服务
/etc/init.d/orabbix start

/opt/orabbix/run.sh

在启动服务过程中通过 tail -f /opt/orabbix/logs/orabbix.log日志查看报错信息。

六、zabbix server 端配置
将该模板 Orabbix_export_full.xml 下载到本机,导入 zabbix server template

# sz orabbix/template/Orabbix_export_full.xml

 

 

 

将模板绑定到要监控的主机上:

 

 

 

 

 

但是感觉很多的指标还是要看oracle性能报告

 

 

 

附:官方文档

http://www.smartmarmot.com/wiki/index.php/Orabbix

 

 

设置监控表空间
[iyunv@test opt]# cat /home/oracle/oracle_cron.sh
#!/bin/bash
source /home/oracle/.bash_profile
sqlplus -s zabbix/123456 > /tmp/tablespace.log<<EOF
set linesize 140 pagesize 10000
col "Status" for a10
col "Name" for a25
col "Type" for a10
col "Extent" for a15
col "Size (M)" for a20
col "Used (M)" for a20
col "Used %" for a20
SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent",
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990') "Size (M)",
TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024,'999,999,999') "Used (M)",
TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), '990.00') "Used %"
FROM sys.dba_tablespaces d,
(select tablespace_name, sum(bytes) bytes from dba_data_files
group by tablespace_name) a, (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f WHERE
d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) AND NOT
(d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')
UNION ALL
SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent",
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,999') "Size (M)",
TO_CHAR(NVL(t.bytes,0)/1024/1024,'999,999,999') "Used (M)",
TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Used %" FROM sys.dba_tablespaces d,
(select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a, (select
tablespace_name, sum(bytes_cached) bytes from v\$temp_extent_pool group by tablespace_name) t WHERE
d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = t.tablespace_name(+) AND
d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY'
ORDER BY 7;
EOF

通过执行这个脚本可以获取到oracle数据库中的tablespace列表,并输出到/tmp/tablespace.log日志中去,这个执行脚本需要修改属主属组为oracle.oracle,并且需要给于执行权限,在crontab中设置每一分钟执行一次,下面是执行得到的结果:
 [iyunv@test opt]# cat /tmp/tablespace.log
Status Name TypeExtentSize (M) Used (M) Used %
---------- ------------------------- ---------- --------------- -------------------- -------------------- --------------------
ONLINE UNDOTBS1 UNDOLOCAL280 12 4.38
ONLINE QWERTY PERMANENTLOCAL 101 10.00
ONLINE USERS PERMANENTLOCAL 51 20.00
ONLINE SYSTEM PERMANENTLOCAL700 377 53.88
ONLINE TEMP TEMPORARYLOCAL 20 11 55.00
ONLINE SYSAUX PERMANENTLOCAL550 400 72.78
6 rows selected.

上面就是取出来的数据,既然数据取出来了,那么剩下的要做的就是把数据弄到zabbix中去咯。
下面将使用下面两个脚本来对取出的这些数据进行格式化转换和取值:

 [iyunv@test opt]# cat /usr/local/zabbix/scripts/oracle_discovery.sh
#!/bin/bash
TABLESPACE=`cat /tmp/tablespace.log |awk '{print$2}'|awk 'NR>3{print}'`
COUNT=`echo "$TABLESPACE" |wc -l`
INDEX=0
echo '{"data":['
echo "$TABLESPACE" | while read LINE; do
echo -n '{"{#TABLENAME}":"'$LINE'"}'
INDEX=`expr $INDEX + 1`
if [ $INDEX -lt $COUNT ]; then
echo ','
fi
done
echo ']}'

 

这个脚本的功能是从tablespace.log文件中取出Name那一列,并进行JSON格式化输出(因为zabbix的自动发现功能获取的数据类型是JSON格式的),下面是执行效果:
[iyunv@test opt]# cat /usr/local/zabbix/scripts/oracle_check.sh

#!/bin/bash
EQ_DATA="$2"
ZBX_REQ_DATA_TAB="$1"
SOURCE_DATA=/tmp/tablespace.log
case $2 in
maxmb) grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $5*1024*1024}';;
used) grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $6*1024*1024}';;
autopercent) grep -E "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $7}';;
*) echo $ERROR_WRONG_PARAM; exit 1;;
esac
exit 0

 

其中maxmb和used取出的值是M,所以这里给转换成了byte,方便zabbix取值,下面是举例取出来的值:
[iyunv@test opt]# sh /usr/local/zabbix/scripts/oracle_check.sh SYSAUX maxmb
576716800
[iyunv@test opt]#

 

这里配置完成之后就需要在zabbixagentd的配置文件中添加监控key了:

 [iyunv@test opt]# tail -3 /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=ora.tab.discovery,/usr/local/zabbix/scripts/oracle_discovery.sh
UserParameter=tablespace
• ,/usr/local/zabbix/scripts/oracle_check.sh $1 $2

添加key之后需要重启zabbix agentd服务。
然后我们就需要在zabbixserver中添加监控模板了,首先创建一个发现规则:

 

 

 

其中的键值ora.tab.discovery就是我们在agentd的配置文件中定义的,由这个发现规则获取到的是一个JSON格式的返回值。要注意其中的数据更新间隔,这个值指的是你的发现规则执行的时间间隔,我这里暂时设置为60s
然后我们开始创建项目原型了,下面是创建的详细内容:

 

 

 

按照上面的项目原型依次创建{#TABLENAME}used和{#TABLENAME}autopercent,对应的键值是tablespace[{#TABLENAME},used]和tablespace[{#TABLENAME},autopercent],创建完发现规则后,开始创建图形原型了,下面是图形原型的详细内容:

 

 


 
保存完成后,该发现规则就做好了,之后等待大约一分钟之后就可以看到采集到的数据了,这和上面设定的60s的数据更新间隔是一致的。下面是获取到的监控tablespace的结果:

 

 

posted @ 2021-08-25 16:03  菜鸟大明儿哥  阅读(2495)  评论(0编辑  收藏  举报