已索引
自动发现规则配置思路
zabbix自动发现规则的总体思想是:
1、首先通过自动发现规则对应的脚本识别出需要监控的对象。
2、通过自动发现规则中的监控项原型对识别出的对象进行监控。
3、通过自动发现规则中的触发器类型对监控项原型配置触发器。
4、通过自动发现规则中的图形原型对监控项原型画图。
主要是在1、2步,1、2步完成后,3、4步就水到渠成了。
配置实例
下面以通过zabbix自动发现规则监控临时表空间的使用率为例进行演示。
对于永久表空间的监控,平时我们只需要把表空间使用率的最高值查出来并进行告警即可(当然也可以使用本文的方法对每个表空间进行单独监控)。但是数据库的临时表空间比较特别,每个用户都可能使用不能的临时表空间,也可能共用临时表空间。对临时表空间的监控,更多的是为了分析问题,而不是临时空间告警时我们进行扩容,因为临时表空间的使用是一个动态的过程。我们期望对每个临时表空间形成各自的使用情况曲线,来分析用户对临时表空间的使用。
创建用于自动发现表空间规则的脚本和监控项
# touch /opt/zabbix/ora_discovery_temptbs.sh
# chmod +x /opt/zabbix/ora_discovery_temptbs.sh
# vim /opt/zabbix/ora_discovery_temptbs.sh
#!/bin/bash
#说明:
#网上很多文档的做法是用crond定期去查询表空间信息,生成文件,然后自动发现脚本从生成的文件中找出表空间名。
#我们这儿直接通过发现脚本去连接数据库获取表空间名列表。spool出来的文件是为了后面的监控脚本使用。
export ROOTDIR=/opt/zabbix
source $ROOTDIR/db.profile
TABLESPACE=$(sqlplus -S dboper/Eccom_2020 <<EOF 2>&1 | sed -e '/^$/d' | awk '{print $1}'
set heading off
spool /tmp/oracle_zabbix_219_tmptbs.tmp
select m.TABLESPACE_NAME,m.MAX_GB,nvl(u.USED_GB,0),nvl(to_char((u.USED_GB/m.MAX_GB)*100,'09.99'),'0') as USED_PCT
from
(select TABLESPACE_NAME,sum(MAXBYTES)/1024/1024/1024 MAX_GB from dba_temp_files group by TABLESPACE_NAME) m
left join
(select TABLESPACE,sum(BLOCKS)*8/1024/1024 USED_GB from v\$sort_usage group by tablespace) u
on m.TABLESPACE_NAME=u.TABLESPACE;
EOF
)
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 ']}'
在zabbix-agent配置文件中,增加自动发现规则的监控项,然后重启zabbix-agent:
# vim /etc/zabbix/zabbix_agentd.d/userparameter_oracle.conf
UserParameter=ora.tmptbs.discovery,/opt/zabbix/ora_discovery_temptbs.sh
# systemctl restart zabbix-agent
在zabbix server web上,点击模版名>自动发现规则>创建发现规则
名称:Oracle-Temporary Tablespace Discovery
键值:ora.tmptbs.discovery
更新间隔:5m(根据实际情况填写)
配置监控项原型
# touch /opt/zabbix/ora_check_temptbs.sh
# chmod +x /opt/zabbix/ora_check_temptbs.sh
# vim /opt/zabbix/ora_check_temptbs.sh
#!/bin/bash
TMPTBS_NAME="$1"
COL_NAME="$2"
SOURCE_DATA=/tmp/oracle_zabbix_219_tmptbs.tmp
case $2 in
maxgb)
grep -w "$TMPTBS_NAME" $SOURCE_DATA | awk '{print $2}' ;;
usedgb)
grep -w "$TMPTBS_NAME" $SOURCE_DATA | awk '{print $3}' ;;
usedpct)
grep -w "$TMPTBS_NAME" $SOURCE_DATA | awk '{print $4}' ;;
*)
echo -1; exit 1;;
esac
exit 0
在zabbix-agent配置文件中,增加监控项原型的监控项,然后重启zabbix-agent:
# vim /etc/zabbix/zabbix_agentd.d/userparameter_oracle.conf
UserParameter=ora.tmptbs.check[*],/opt/zabbix/ora_check_temptbs.sh $1 $2
# systemctl restart zabbix-agent
在zabbix server web上,点击模版名>自动发现规则>刚才创建的自动发现规则中的监控项原型>创建监控项原型
名称:Oracle-{#TABLENAME} MAX_GB
键值:ora.tmptbs.check[{#TABLENAME},maxgb]
信息类型:浮点数
间隔:1d(根据实际情况填写)
应用集:选择现有的Oracle
名称:Oracle-{#TABLENAME} USED_GB
键值:ora.tmptbs.check[{#TABLENAME},usedgb]
信息类型:浮点数
间隔:3m(根据实际情况填写)
应用集:选择现有的Oracle
名称:Oracle-{#TABLENAME} USED_PCT
键值:ora.tmptbs.check[{#TABLENAME},usedpct]
信息类型:浮点数
间隔:3m(根据实际情况填写)
应用集:选择现有的Oracle
做到这儿,就可以在最新数据中看到采集到的数据了。后面的步骤,根据自己的实际情况需要进行取舍。
配置图形原型
在zabbix server web上,点击模版名>自动发现规则>刚才创建的自动发现规则中的图形原型>创建图形原型
名称:Oracle-{#TABLENAME} MAX_GB&USED_GB
监控项:点击“添加原型”,勾选“Oracle-{#TABLENAME} MAX_GB”和"Oracle-{#TABLENAME} USED_GB"
同样的方法,再创建一个图形原型:Oracle-{#TABLENAME} USED_PCT
配置聚合图形
在zabbix server web上,点击模版名>聚合图形>创建聚合图形
名称:Database Oracle Temporary TBS
列数2,行1
点击该聚合图形的“构造函数”>更改,资源下拉选择“图形原型”,然后选择刚才的图形原型。
如果聚合图形配置完成后,在某个主机上不显示图形,则是自动发现的数据有问题。
配置触发器类型
在zabbix server web上,点击模版名>自动发现规则>触发器类型>创建触发器原型
名称:Oracle {#TABLENAME}临时表空间使用率超过60
表达式:{Template BOT DB Oracle:ora.tmptbs.check[{#TABLENAME},usedpct].last()}>60