Oracle 的归档日志和备份集写在闪回恢复区里,使用率涨满数据库随时停摆,靠人盯 v$flash_recovery_area_usage 不现实。把这两个百分比挂到 Zabbix 上是更稳的做法:数据库服务器侧写查询脚本并暴露 UserParameter,Zabbix 侧用自动发现和监控原型批量生成监控项,再配触发器和图形。整套流程如下。
服务器侧的监控脚本
在 oracle 所在服务器建两个脚本:家目录下那个用 sqlplus 把查询结果写进 /tmp/archived.log;/script 下的这个切换用户调用前者(解决非 oracle 用户登不进查询的问题),再按参数输出归档或备份集的使用率,check 参数输出自动发现要的 JSON:
#在oracle用户家目录下写一个查询归档日志的脚本
[root@localhost ~]# vim /home/oracle/archived.sh
source ~/.bash_profile
function check {
sqlplus -S "/ as sysdba" <<EOF
spool /tmp/archived.log # 查询到的结果写至该文件中
select * from v$flash_recovery_area_usage;
spool off
quit
EOF
}
check &>/dev/null
[root@localhost ~]# chmod +x /home/oracle/archived.sh
[root@localhost ~]# mkdir /script
[root@localhost ~]# vim /script/archived_log.sh
#!/bin/bash
su - oracle -c /home/oracle/archived.sh #引用脚本,解决非oracle用户下无法登入查询的问题
check() { # json格式输出的item变量
printf "{n"
printf 't'""data":["
printf 'ntt{'
printf ""{#STATUS_NAME}":"ARCHIVED"}"
printf "nt]n"
printf "}n"
}
archived() { # 过滤归档日志使用率 函数
status=`grep ^ARCHIVED /tmp/archived.log | awk '{print $3}'`
echo "$status"
}
backup() { # 过滤备份集使用率函数
status=`grep ^BACKUP /tmp/archived.log | awk '{print $3}'`
echo "$status"
}
$1
测试脚本
archived 和 backup 两个参数分别返回归档日志和备份集的使用率:
[root@localhost ~]# cd /script/
[root@localhost script]# bash archived_log.sh archived
24.36
[root@localhost script]# bash archived_log.sh backup
0
[root@localhost script]# cat /tmp/archived.log

写入 zabbix-agent 配置
把脚本完整路径写成三个 UserParameter。archived.check、archived.status、backup.piece 这几个键,建监控项时写入的键值必须与之一致。重启 agent 后在 server 端用 zabbix_get 检测:
#将脚本完整路径写入到zabbix-agent.conf的配置文件中
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
296 UserParameter=archived.check,/script/archived_log.sh check
297 UserParameter=archived.status,/script/archived_log.sh archived "$1"
298 UserParameter=backup.piece, /script/archived_log.sh backup "$1"
注:archived.check archived.status backup.piece需要在创建zabbix监控项时对应写入的键值,必须保持一致
#重启zabbix-agent
[root@localhost ~]# systemctl restart zabbix-agent
#zabbix-server端检测结果
[root@zabbix-server ~]# zabbix_get -s x.x.x.x -p 10050 -k archived.status
24.36
[root@zabbix-server ~]# zabbix_get -s x.x.x.x -p 10050 -k backup.piece
sh: /home/oracle/script/archived_log.sh: Permission denied #提示权限被拒绝,解决方案看下面
backup.piece 返回 Permission denied 时,按下图修改 zabbix_agentd.conf 的配置再重启:
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf

# 重启zabbix-agent
[root@localhost ~]# systemctl restart zabbix-agent
# 再次进行检查下就可以正常显示结果了

Zabbix 前端建模:模板与发现规则
Zabbix 前端先建模板,后面的监控项都挂在它下面:


自动发现规则
建发现规则,键值对应脚本的 check 输出:



监控原型
归档日志使用率的原型,键值用 archived.status:


备份集使用率的原型,键值用 backup.piece:

触发器与图形
归档日志使用率的告警条件:





备份集使用率的告警条件:




图形
归档日志使用率图形:


备份集使用率图形:

主机挂载与收尾
把模板链接到 Oracle 主机上:


等一会,获取到数据后就能看到图形:


几个容易卡住的点:UserParameter 的键和监控项键值必须一字不差;脚本记得 chmod +x;跨用户取数靠 su 切换,否则 zabbix 用户根本连不上数据库;zabbix_get 报权限拒绝先改 agent 配置,别在文件权限上瞎折腾。
















暂无评论内容