Zabbix 3.4.8 通过Discovery批量监控Oracle表空间

一、Oracle客户端配置

1、创建脚本check_tablespace.sh

Oracle表空间的信息需要SQL语句查询得到,因此,我们首先创建一个获取表空间信息的原始脚本/home/oracle/check_tablespace.sh,这个脚本由oracle用户去执行,脚本内容如下:

#!/bin/bash
# tablespace usagep check
source ~/.bash_profile
function check {
sqlplus -S "/ as sysdba" <<  EOF
set linesize 200
set pagesize 200
spool /tmp/ora_tablespace.txt
select a.tablespace_name, total, free,(total-free) as usage from 
(select tablespace_name, sum(bytes)/1024/1024 as total from dba_data_files group by tablespace_name) a, 
(select tablespace_name, sum(bytes)/1024/1024 as free from dba_free_space group by tablespace_name) b
where a.tablespace_name = b.tablespace_name;
spool off
set linesize 100
set pagesize 100
spool /tmp/ora_autex.txt
select tablespace_name,autoextensible from dba_data_files;
spool off
quit
EOF
};check &>/dev/null
执行这个脚本,并生成两个保存有oracle表空间名称信息的文件:/tmp/ora_tablespace.txt和/tmp/ora_autex.txt。

    






Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第1张图片

我们需要把脚本放到oracle用户的crontab计划任务表中,让脚本在后台每5分钟执行一次,一定要保证计划任务能正常按计划执行,否则这可能会被监控欺骗(监控端获取到的数据一直保持不变)。

[oracle@mail ~]$ crontab -l
*/5 * * * * /home/oracle/check_tablespace.sh

2、创建脚本discovery_oracle_tablespace.sh

 通过脚本取得表空间的名字,并转换成json格式的(因为zabbix的自动发现功能获取的数据类型是JSON格式的)。

    下面编写一个zabbix自动发现oracle表空间的脚本,我这里的脚本路径是/etc/zabbix/scripts/discovery_oracle_tablespace.sh。

#!/bin/bash
#zabbix discovery oracle tablespace
table_spaces=(`cat /tmp/ora_tablespace.txt | sed -e "1,3d" -e "/^$/d" -e "/selected/d" | awk '{print $1}'`)
length=${#table_spaces[@]}
   
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
    printf "\n\t\t{"
    printf "\"{#TABLESPACE_NAME}\":\"${table_spaces[$i]}\"}"
    if [ $i -lt $[$length-1] ];then
        printf ","
    fi
done
    printf "\n\t]\n"
printf "}\n"

3、创建监控项目检测脚本tablespace_check.sh

用于zabbix获取oracle表空间使用率、剩余量和检查是否开启自动扩展。脚本为/etc/zabbix/scripts/tablespace_check.sh,脚本内容如下:
#!/bin/bash
# oracle tablespace check
CEHCK_TYPE=$1
TABLESPACE_NAME=$2
   
function usagepre {
    grep "\b$TABLESPACE_NAME\b" /tmp/ora_tablespace.txt | awk '{printf "%.f\n",($2-$3)/$2*100}'
}
   
function available {
    grep "\b$TABLESPACE_NAME\b" /tmp/ora_tablespace.txt | awk '{printf $3*1024*1024}'
}
   
function check {
    if grep "\b$TABLESPACE_NAME\b" /tmp/ora_autex.txt | awk '{print $2}' | uniq | grep "YES" &>/dev/null;then
        echo 1
    else
        echo 0
    fi
}
   
case $CEHCK_TYPE in
    pre)
        usagepre ;;
    fre)
        available ;;
    check)
        check ;;
    *)
        echo -e "Usage: $0 [pre|fre|check] [TABLESPACE_NAME]"
esac
给创建的脚本添加执行权限。
cd /etc/zabbix/scripts
chmod +x tablespace_check.sh 
chmod +x discovery_oracle_tablespace.sh

4、为Zabbix增加监控Key

在Zabbix客户端配置文件/etc/zabbix/zabbix_agentd.conf增加如下参数:

Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
创建文件/etc/zabbix/zabbix_agentd.conf.d/oracle_tablespace.conf,内容如下:

UserParameter=discovery.oracle.tablespace,/etc/zabbix/scripts/discovery_oracle_tablespace.sh
UserParameter=tablespace.check[*],/etc/zabbix/scripts/tablespace_check.sh $1 $2
 重新启动Zabbix客户端服务。
service zabbix_agentd restart
或
cd /etc/init.d
./zabbix-agent  restart

5、在Zabbix服务端测试监控Key

 测试结果如下,一切正常。
[root@monitor bin]# ./zabbix_get -s 10.0.2.64 -k tablespace.check[pre,SYSTEM]
100
[root@monitor bin]# ./zabbix_get -s 10.0.2.64 -k tablespace.check[fre,SYSTEM]
25559040
[root@monitor bin]# ./zabbix_get -s 10.0.2.64 -k tablespace.check[check,SYSTEM]
1

二、Zabbix服务端配置

1、创建模板,并添加自动发现规则

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第2张图片
Name:Oracle tablespace discover
Type:Zabbix agent
Key:discovery.oracle.tablespace

2、创建监控项

这里主要添加的三个监控项,须在自动发现规则中建立,监控项原型,就是我们获取到的三个监控项指标,大家可以通过附件下载我的模板,直接导入即可。(3.4.8)
zabbix 3.4.8 监控表空间模板文件

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第3张图片

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第4张图片

Oracle tablespace:{#TABLESPACE_NAME} 使用率
tablespace.check[pre,{#TABLESPACE_NAME}]
Oracle tablespace:{#TABLESPACE_NAME} 可用大小
tablespace.check[fre,{#TABLESPACE_NAME}]
Oracle tablespace:{#TABLESPACE_NAME}  是否自动化扩展
tablespace.check[check,{#TABLESPACE_NAME}]

3、创建触发器(原型)

创建两个触发器,一样需在自动发现中创建触发器原型

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第5张图片

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第6张图片

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第7张图片

Oracle tablespace is not autoextensible on  {#TABLESPACE_NAME}
{Template App Oracle Service:tablespace.check[check,{#TABLESPACE_NAME}].last()}=0
{Template App Oracle Service:tablespace.check[check,{#TABLESPACE_NAME}].last()}=1

Oracle tablespace tu use more 80% on {#TABLESPACE_NAME}
{Template App Oracle Service:tablespace.check[pre,{#TABLESPACE_NAME}].last()}>80
{Template App Oracle Service:tablespace.check[pre,{#TABLESPACE_NAME}].last()}<80

4、套用新建好的模板应该到需要监控主机

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第8张图片

三、结果验证

1、等待一段时间的发现之后,我们可以看到主机发现了相关的监控项,并可以执行报警信息。

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第9张图片

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第10张图片


四、自动定义图形

1、在配置主机中新建图形

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第11张图片

Zabbix 3.4.8 通过Discovery批量监控Oracle表空间_第12张图片

你可能感兴趣的:(运维)