zabbix创建oracle监控模板
1、监控asm磁盘、表空间、实例名称,数据以json方式呈现
编写脚本rac.asm_disk[*]获取asm磁盘名称,提供自动发现规则使用,DISK_NAME必须是大写的。数据呈现格式:[{"{#DISK_NAME}":"MGMT"},{"{#DISK_NAME}":"DATA"}]
#!/bin/bash
result="\""{\#DISK_NAME}"\":"
for diskgroup in $(echo 'SELECT NAME FROM v$asm_diskgroup;' | sudo su - oracle -c "sqlplus -s / as sysdba" | grep -Ev "NAME|-|^$"); do
# 查询每个磁盘组的名称
result_disk="{$result"\"$diskgroup\"}","$result_disk
done
echo "["$(echo $result_disk | sed 's/,$//')"]"编写脚本rac.asm_disk[*]获取asm磁盘空间使用情况,数据呈现格式:{"DATA":{"TOTAL_MB":300,"FREE_MB":286},"MGMT":{"TOTAL_MB":80,"FREE_MB":30}}
#!/bin/bash
i=1
for diskgroup in $(echo 'SELECT NAME,TOTAL_MB/1024,round(FREE_MB/1024,0) FROM v$asm_diskgroup;' | sudo su - oracle -c "sqlplus -s / as sysdba" | grep -Ev "NAME|-|^$"); do
# 查询每个磁盘组的空间信息
if [ $i -eq 1 ];then
result_disk=$result_disk","\"$diskgroup\"
((i++))
elif [ $i -eq 2 ];then
result_disk=$result_disk":{\"TOTAL_MB\":$diskgroup"
((i++))
else
result_disk=$result_disk",\"FREE_MB\":$diskgroup}"
i=1
fi
done
echo "{"$(echo $result_disk | sed 's/^,//')"}"监控表空间、实例状态,脚本如asm磁盘监控,唯一区别将两个脚本写在同一个脚本中,采用$1调用
#!/bin/bash
if [ $1 == "tablespace_name" ];then
#获取表空间名称
result="\""{\#TABLESPACE_NAME}"\":"
for tablespace_name in $(echo 'SELECT tablespace_name FROM dba_data_files;' | sudo su - oracle -c 'sqlplus -s / as sysdba' | grep -Ev 'TABLESPACE_NAME|Free_Space|-|rows|^$');do
result_tablename="{$result"\"$tablespace_name\"}","$result_tablename
done
echo "["$(echo $result_tablename | sed 's/,$//')"]"
elif [ $1 == "tablespace_free" ];then
#获取表空间剩余可用空间
i=1
for tablespace in $(echo 'SELECT df.tablespace_name,ROUND(SUM(f.bytes) / 1024 / 1024, 2) AS "Free_Space" FROM dba_free_space f JOIN dba_data_files df ON f.tablespace_name = df.tablespace_name GROUP BY df.tablespace_name;' | sudo su - oracle -c 'sqlplus -s / as sysdba' | grep -Ev 'TABLESPACE_NAME|Free_Space|-|rows|^$');do
if [ $i -eq 1 ];then
result_space=$result_space","\"$tablespace\"
((i++))
elif [ $i -eq 2 ];then
result_space=$result_space":{\"FREE_MB\":$tablespace}"
i=1
fi
done
echo "{"$(echo $result_space | sed 's/^,//')"}"
elif [ $1 == "instance_state" ];then
#数据库状台信息
i=1
for dbinfo in $(echo 'SELECT instance_name, status FROM gv$INSTANCE;' | sudo su - oracle -c 'sqlplus -s / as sysdba' | grep -Ev 'HOST_NAME|INSTANCE_NAME|STATUS|-');do
if [ $i -eq 1 ];then
result_dbinfo=$result_dbinfo","\"$dbinfo"\""
((i++))
elif [ $i -eq 2 ];then
result_dbinfo=$result_dbinfo":{\"STATUS\":\"$dbinfo\"}"
i=1
fi
done
echo "{"$(echo $result_dbinfo | sed 's/^,//')"}"
elif [ $1 == "instance_name" ];then
#获取数据库名称
result="\""{\#DB_NAME}"\":"
for db_name in $(echo 'SELECT instance_name FROM gv$INSTANCE;' | sudo su - oracle -c 'sqlplus -s / as sysdba' | grep -Ev 'HOST_NAME|INSTANCE_NAME|STATUS|-');do
result_dbname="{$result"\"$db_name\""},"$result_dbname
done
echo "["$(echo $result_dbname | sed 's/,$//')"]"
fi2、客户端主机修改配置
将用户zabbix加入wheel组:usermod -aG wheel zabbix
visudo配置wheel组NOPASSWORD:%wheel ALL=(ALL) NOPASSWD: ALL
zabbix配置文件修改:UnsafeUserParameters=1,Timeout=15
配置自定义监控文件:
[root@rac01 script]# cat /etc/zabbix/zabbix_agent2.d/oracle.conf UserParameter=rac.asm_disk[*], /u01/script/oracle_disk.sh UserParameter=rac.disk[*], /u01/script/oracle_asm.sh UserParameter=ap_check_cmd[*], /usr/bin/python2.7 /u01/script/check_ap.py $1 UserParameter=rac.space[*], /u01/script/oracle_tablesapce.sh $1
3、zabbix创建模板

4、创建监控项,调用rac.disk[*], /u01/script/oracle_asm.sh

自定义监控项预览

5、创建自动发现规则,调用rac.asm_disk[*], /u01/script/oracle_disk.sh

全部创建完成预览效果

6、创建监控原型,类型选择相关项目,关联第4步创建的监控项,注意#DISK_NAME是大写,键值disK_state自己定义,后缀必须是[#DISK_NAME]

进程需要配置jsonpath获取数据

7、模板应用关联主机