Zabbix 监控 Oracle 归档与备份集使用率

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
image-309

写入 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
image-310
# 重启zabbix-agent
[root@localhost ~]# systemctl restart zabbix-agent

# 再次进行检查下就可以正常显示结果了
image-311

Zabbix 前端建模:模板与发现规则

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

zabbix-oracle-avelog01
zabbix-oracle-avelog02

自动发现规则

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

zabbix-oracle-avelog03
zabbix-oracle-avelog04
zabbix-oracle-avelog05

监控原型

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

zabbix-oracle-avelog06
zabbix-oracle-avelog07

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

zabbix-oracle-avelog08

触发器与图形

归档日志使用率的告警条件:

zabbix-oracle-avelog09
zabbix-oracle-avelog10
zabbix-oracle-avelog11
zabbix-oracle-avelog12
zabbix-oracle-avelog13

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

zabbix-oracle-avelog14
zabbix-oracle-avelog15
zabbix-oracle-avelog16
zabbix-oracle-avelog17

图形

归档日志使用率图形:

zabbix-oracle-avelog18
zabbix-oracle-avelog19

备份集使用率图形:

zabbix-oracle-avelog20

主机挂载与收尾

把模板链接到 Oracle 主机上:

zabbix-oracle-avelog21
zabbix-oracle-avelog22

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

zabbix-oracle-avelog23
zabbix-oracle-avelog24

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

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容