Zabbix创建Oracle监控模板

如何自定义一个Oracle的监控模板?以oracle11.2为例,首先来梳理下oracle需要监控哪些指标:

1.一些常见的基础指标,诸如:实例状态、会话数、登陆失败次数、表空间使用率、asm磁盘组使用率等。

2.详细的oracle性能指标,诸如AWR Report Summary中列出来的很多指标,但其实很好获取的指标暂时可以想到的就是事务数和非Idle等待会话数。

所以总结下目前能轻易获取的指标只有以下几种:

  • 数据库连通性  //暂时不建对应的监控项,懒
  • 实例会话数
  • 处于非空闲等待的会话数  --此指标可以扩散为处于不同种类等待的会话数,如library cache xxx,enq xxx等等。
  • 当前事务数
  • 登录失败次数
  • 表空间使用率最高的表空间的使用率   //由于单独统计每个表空间的使用率需要带上表空间名,不适合作为numeric类型的返回值,因此我选择只统计使用率最高的那个,下一个指标同理
  • 空余容量最少的表空间的空余容量
  • ASM磁盘组容量监控

如何获取这些指标值?其实zabbix官网已经提供了很多模板(参考https://share.zabbix.com/databases/oracle),但是很多模板要么是只提供了模板未提供对应的command命令,要么是功能虽然很强大,但是要装一系列的其他组件(诸如python及其第三方包),要么是不熟悉oracle的搞出来的,对oracle一些指标的理解不够精细。总之我用起来很不爽,所以还是要自己造轮子,目标也很简单:用自带的sqlplus通过sql直接查询性能视图获得监控值。

步骤一:创建模板、application和监控项。

模板和application的创建就懒得演示了,在网页上操作就是一个起名的过程,模板的名字自定义为Oracle_Monitor,里边建一个名为oracle_session_waits的application专门用于统计各类会话等待事件。

Zabbix自带了8个模板的host group,其中Templates是其他7个host group的hosts元素集合。

在Zabbix中,host不仅仅指被监控的服务或主机,也可以是模板,为了更好地管理模板,我选择直接将新建的oracle监控模板加入Templates/Databases模板组中,默认的此host group下只有一个Template DB MySQL的自带模板。

为了描述上述几个oracle监控指标,首先需要创建对应监控项(items):

这些监控项的名字和key都是自定义的,只要标示明确即可。至此模板就都建完了,key type都是numerical的数字格式。

步骤二:准备工作。

为了访问oracle取得监测数据首先要建一个用户,我这里先建一个用户zabbix:

create user zabbix identified by "zabbix";
grant connect to zabbix;
grant select_catalog_role to zabbix;

步骤三:创建获取监控值的脚本

直接贴脚本:check_oracle.sh,这脚本是我根据自己的环境写的,如果有人想用请注意修改掉那些环境变量。

#!/bin/sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$ORACLE_HOME/bin:/usr/bin:/sbin/:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

#用法定义
#如果以后要新加监控项,那么除了需要在此处中新增提示之外,最重要的就是在etc/zabbix_10052/check_oracle_sql目录下新增对应监控项的SQL文件啦
if [ $# -ne 1 ];then
	echo "Usage:"
        echo "$0 TS_MAX_USEAGE|TS_MIN_SPACE|TRANS_COUNT|LOGIN_FAILS|ASM_MIN_SPACE|SESSION_COUNT|SESSION_NONE_IDLE|SESSION_LOG_FILE_SYNC|SESSION_GC|SESSION_ENQ|SESSION_LIBRARY_CACHE|SESSION_DIRECT_PATH|SESSION_LATCH"
	exit
fi
#ocmd命令定义
ocmd(){
	#ocmd SQL_FILE [DBname] [DBuser] [DBpswd] [DBhost] [DBport]
	if [ -f $1 ];then
		SQL=`cat $1`
		else echo "SQL文件不存在!";exit
	fi
	DBname=oracle
	[ $2 ] && DBname=$2
	DBuser=zabbix
	[ $3 ] && DBuser=$3
	DBpswd=zabbix
	[ $4 ] && DBpswd=$4
	DBhost=`echo $HOSTNAME`
	[ $5 ] && DBhost=$5
	DBport=1521
	[ $6 ] && DBport=$6
result=`sqlplus -S $DBuser/[email protected]$DBhost:$DBport/$DBname <<EOF
set lines 200
set heading off feedback off pages 0 verify off echo off
$SQL
commit;
exit
EOF`
	echo $result
}
#获取监控数据
cd /etc/zabbix_10052/check_oracle_sql
ocmd $1.sql

步骤四:编写获取监控指标的SQL。

如上脚本所示,所有的SQL文件都存在于/etc/zabbix_10052/check_oracle_sql目录下(至于为什么是zabbix_10052,是因为我这里已经有一套10050的agent在运行,为了把数据库监控分离出来我单独使用10052端口新开了个agent并新建了server):

脚本一:获取会话数

SESSION_COUNT.sql

select count(*) from v$session;

脚本二:获取处于非空闲等待的会话数

SESSION_NONE_IDLE.sql

select count(*) from v$session where wait_class != ‘Idle‘;

SESSION_LOG_FILE_SYNC这些以SESSION开头的监控项的脚本和上述脚本类似,只需要将过滤条件改改就可以了:

select count(*) from v$session where event like ‘direct path%‘;
select count(*) from v$session where event like ‘enq%‘;
select count(*) from v$session where event like ‘gc%‘;
select count(*) from v$session where event like ‘latch%‘;
select count(*) from v$session where event like ‘library cache%‘;
select count(*) from v$session where event=‘log file sync‘;

脚本三:事务数

TRANS_COUNT.sql

select count(*) from v$transaction;

脚本四:登陆失败次数

LOGIN_FAILS.sql

select count(*) from dba_audit_trail where ACTION_NAME=‘LOGON‘ and RETURNCODE=1017;

dba_audit_trail视图是由sys.AUD$、sys.AUDIT_ACTIONS等几个表join出来的结果,建议为sys.AUD$的ACTION#,returncode字段创建bitmap索引(因为DB级别的审计这俩字段的可用值其实很少),否则数据库时间久了查起来会超级慢。

脚本五:表空间最大使用率

TS_MAX_USEAGE.sql

select
    max(to_char(round(sum(f.file_used_size_MB)*100/sum(f.file_max_size_MB),2),‘990.99‘))
from
(select df.tablespace_name,
        round(decode(df.AUTOEXTENSIBLE,‘NO‘,df.bytes/1024/1024,‘YES‘,df.maxbytes/1024/1024),2) file_max_size_MB,
        round((df.bytes-nvl(fs.bytes,0))/1024/1024,2) file_used_size_MB
from dba_data_files df
left join (select tablespace_name,file_id,sum(bytes) as bytes from dba_free_space group by tablespace_name,file_id) fs
on df.file_id=fs.file_id
) f
group by f.tablespace_name;

脚本六:表空间最小容量

TS_MIN_SPACE.sql

select
	min(sum(f.file_max_size_MB)-sum(f.file_used_size_MB))
from
(select df.tablespace_name,
        round(decode(df.AUTOEXTENSIBLE,‘NO‘,df.bytes/1024/1024,‘YES‘,df.maxbytes/1024/1024),2) file_max_size_MB,
        round((df.bytes-nvl(fs.bytes,0))/1024/1024,2) file_used_size_MB
from dba_data_files df
left join (select tablespace_name,file_id,sum(bytes) as bytes from dba_free_space group by tablespace_name,file_id) fs
on df.file_id=fs.file_id
-- where df.tablespace_name [not] in (‘‘,...)  //可以排除一些不需要监控的表空间防止误报,或者只对某些表空间进行报警
) f
group by f.tablespace_name;

脚本七:asm磁盘组容量监控

ASM_MIN_SPACE.sql

select min(free_mb) from v$asm_diskgroup where name !=‘OCRVOTE‘;

排除不需要监控的磁盘组,还可以改写为使用率的监控。

步骤四:agent配置文件新增UserParameter

#oracle monitoring
UserParameter=oracle.status[*],/etc/zabbix_10052/check_oracle.sh $1

想要添加其他监控项直接照上例添加SQL文件和UserParameter,然后server web端添加相应的item即可。

重要提示:

zabbix agent的各项监控指标获取都是用zabbix用户操作的,所以zabbix一定要有脚本的访问和执行权限,本例将脚本全放在了/etc/zabbix_10052目录下,所以需要注意此目录的访问权限和一些可执行文件的执行权限。

此外脚本内调用的各种命令和文件zabbix用户也要有权访问。

如果一切正常,最后在latest data中就可以看到监控值了,我的如下:

其他补充:

至此基本的oracle监控模板已经建好了,接下来只需要加上一些触发器和graphs等对象就算完善了,现在懒得加,有空再回来补。

原文地址:https://www.cnblogs.com/leohahah/p/11317050.html

时间: 2024-10-10 05:13:14

Zabbix创建Oracle监控模板的相关文章

给zabbix添加percona监控模板

简单说明一下给zabbix添加的percona的监控模板. 在percona官方网站有说明怎么安装,这里记录下步骤.首先搭建好的zabbix环境. 监控插件连接 : 链接:https://pan.baidu.com/s/1xHbc_HhmN-XuGGiKrg7nPQ 提取码:i4ku yum安装percona的监控插件(安装在要监控的mysql服务器上) yum install -y percona-zabbix-templates-1.1.8-1.noarch.rpm 安装完成之后会生成如下四

ZABBIX之ORACLE监控

1,安装JDK 2,安装orabbix wget http://www.smartmarmot.com/downloads/orabbix-1.2.3.zip mkdir /opt/orabbix mv orabbix-1.2.3.zip /opt/orabbix cd /opt/orabbix unzip orabbix-.1.2.3.zip 3, 授权 chmod +x /opt/orabbix/run.sh chmod +x /opt/orabbix/init.d/orabbix cp /

zabbix NFS挂载 监控模板

见附件,导入模板后将/data 修改为主机对应的目录即可生效.显示NFS客户端上的磁盘容量状态.

zabbix tcp连接监控模板

<?xml version="1.0" encoding="UTF-8"?> <zabbix_export>     <version>3.0</version>     <date>2017-04-23T03:19:43Z</date>     <groups>         <group>             <name>Templates</

zabbix添加nginx监控

zabbix默认自带了很多有用的监控模板,通常对主机运行状态使用默认的模板就可以了,有时候我们需要根据实际情况自定义一些监控信息.本文记录一下zabbix监控nginx服务的配置过程.捋一捋思路,整个配置过程大致如下: 1,确定监控内容 2,编写agent端的监控脚本 3,配置agentd.conf文件,定义监控脚本key 4,zabbix服务端使用zabbix_get 测试获取数据 5,登录zabbix web配置台: 1. 确定监控内容 思考一下nginx有哪些信息可以监控,nginx内置了

zabbix使用pyora监控oracle数据库

前段时间使用Orabbix监控oracle数据库,发现可以实现对oracel数据库实行监控,但是最近部署Orabbix监控oracle数据库,发现始终无法获取到数据库的内容......由于Orabbix是基于java实现的,使用的是jdbc连接oracle数据库,获取到的值传递给zabbix捕捉器来捕捉,这个过程我不是很熟悉......始终无法调试出图来...最后终于放弃,寻找Orabbix的替代品.在zabbix官网找了一遍,发现使用python实现的pyora这个脚本还不错,最大的优势就是能

Zabbix通过Orabbix监控Oracle数据库

一.背景 公司业务使用的是一直Oracle数据库,因为多次出现表空间满的时候不能及时发现,每次都是业务组的人员通知处理,这样下来DBA这边就比较被动,所以老大要求监控表空间剩余大小并且当剩余过小时能够及时报警.刚想出来的方案是通过写脚本获取表空间的数据,通脚本中使用expect自动输入密码登陆oracle用户然后再登陆数据库查询数据返回给zabbix_server.但是由于脚本运行时间大概12秒左右,zabbix获取数据总是超时,在网上搜索中发现zabbix插件orabbix,原理是通过orab

zabbix服务器添加监控主机,使用监控模板及自定义监控项

上一篇博文记录了<Ubuntu系统LNMP环境下安装配置zabbix3.04>,这里我记录了添加监控主机,添加监控模板和自定义监控CPU 添加监控主机 1.监控主机安装zabbix-agent $ sudo apt-get install zabbix-agent 2.修改zabbix_agent.conf配置文件 $ sudo vi /etc/zabbix/zabbix_agentd.conf - Server=120.40.*.* #zabbix-server端IP - ServerAct

zabbix 创建主机、主机群组、监控第一台服务器

前面介绍了zabbix服务器和zabbix agent的安装配置,今天使用zabbix监控第一台服务器. 1. 安装zabbix agent 在被监控的服务器上安装zabbix agent . 参考<<zabbix agent安装配置>>. 2. zabbix监控服务器 2.1 创建主机 configuration(组态,配置)–>Hosts(主机)–>Create host(创建主机) 属性 描述 主机名 Host name 主机名,只允许数字,空格,句号,下划线,非