Zabbix实战-简易教程--DB类--Oracle(表空间)
作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/articles/8004184.html
目录
一、获取LLD的JSON结果(多个表空间名称)
二、测试和自定义key
三、制作模板
四、主机上套
五、效果图
六、脚本地址和参考文献
一、获取LLD的JSON结果(多个表空间名称)
通过脚本获取多个表空间名称,基本上和前面其他LLD一模一样:
#!/bin/bash gameprocess=(`su - oracle -c /etc/zabbix/externalscripts/tbs_usage.sh|grep -v "-"|grep -v ".*NAME"|grep -v "^$"|grep -v "rows"|awk -F ["|"] '{print $1,"-",$2}'|sed 's/[ \t]*//g' 2>/dev/null`) #gameprocess=(`su - oracle -c /etc/zabbix/externalscripts/tbs_usage.sh|grep -v "-"|grep -v ".*NAME"|grep -v "^$"|grep -v "rows"|awk -F ["|"] '{print $1}' 2>/dev/null`) length1=${#gameprocess[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length1;i++)) do printf '\n\t\t{' printf "\"{#GAMEPROCESS}\":\"${gameprocess[$i]}\"}" if [ $i -lt $[$length1-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n" EOF
脚本执行结果如下:
[root@centos6564-73-131 ~]# zabbix_get -s 192.168.72.160 -k custom.tablespace.discovery { "data":[ {"{#GAMEPROCESS}":"LIEMO-FS3ACCOUNTBDATA"}, {"{#GAMEPROCESS}":"LIEMO-FS3ACCOUNTEDATA"}, {"{#GAMEPROCESS}":"LIEMO-FS3ACCOUNTIDX"}, {"{#GAMEPROCESS}":"LIEMO-FS3BASICINFIDX"}, {"{#GAMEPROCESS}":"LIEMO-FS3BASICINFODATA"}, {"{#GAMEPROCESS}":"LIEMO-FS3DUBADATA"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGOPER201006"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGOPER201506"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGOPER201512"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGOPER201606"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGOPER201612"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGOPERMAXVALUE"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGUF"}, {"{#GAMEPROCESS}":"LIEMO-FS3LOGUFIDX"}, {"{#GAMEPROCESS}":"LIEMO-FS3STATCITY"}, {"{#GAMEPROCESS}":"LIEMO-FS3STATDATA"}, {"{#GAMEPROCESS}":"LIEMO-FS3STATIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGACCOUNTBDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGACCOUNTEDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGACCOUNTIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGBASICINFIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGBASICINFODATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGDEFDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGLOGOPER201406"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGLOGOPER201412"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGLOGOPERMAXVALUE"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGLOGUF"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGLOGUFIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGSTATCITY"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGSTATDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMENGSTATIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOACCOUNTBDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOACCOUNTEDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOACCOUNTIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOBASICINFIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOBASICINFODATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMODEFDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOLOGOPER201406"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOLOGOPER201412"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOLOGOPERMAXVALUE"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOLOGUF"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOLOGUFIDX"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOSTATCITY"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOSTATDATA"}, {"{#GAMEPROCESS}":"LIEMO-LIEMOSTATIDX"}, {"{#GAMEPROCESS}":"LIEMO-SYSAUX"}, {"{#GAMEPROCESS}":"LIEMO-SYSTEM"}, {"{#GAMEPROCESS}":"LIEMO-UNDOTBS1"}, {"{#GAMEPROCESS}":"LIEMO-UNDO_2"}, {"{#GAMEPROCESS}":"LIEMO-USERS"}, {"{#GAMEPROCESS}":"YUEING-JX1ACCOUNTADMIN"}, {"{#GAMEPROCESS}":"YUEING-JX1ACCOUNTBDATA"}, {"{#GAMEPROCESS}":"YUEING-JX1ACCOUNTEDATA"}, {"{#GAMEPROCESS}":"YUEING-JX1ACCOUNTIDX"}, {"{#GAMEPROCESS}":"YUEING-JX1BASICINFIDX"}, {"{#GAMEPROCESS}":"YUEING-JX1BASICINFODATA"}, {"{#GAMEPROCESS}":"YUEING-JX1DUBADATA"}, {"{#GAMEPROCESS}":"YUEING-JX1LOGOPER201512"}, {"{#GAMEPROCESS}":"YUEING-JX1LOGOPER201606"}, {"{#GAMEPROCESS}":"YUEING-JX1LOGOPER201612"}, {"{#GAMEPROCESS}":"YUEING-JX1LOGOPERMAXVALUE"}, {"{#GAMEPROCESS}":"YUEING-JX1LOGUF"}, {"{#GAMEPROCESS}":"YUEING-JX1LOGUFIDX"}, {"{#GAMEPROCESS}":"YUEING-JX1STATCITY"}, {"{#GAMEPROCESS}":"YUEING-JX1STATDATA"}, {"{#GAMEPROCESS}":"YUEING-JX1STATIDX"}, {"{#GAMEPROCESS}":"YUEING-SYSAUX"}, {"{#GAMEPROCESS}":"YUEING-SYSTEM"}, {"{#GAMEPROCESS}":"YUEING-UNDOTBS1"}, {"{#GAMEPROCESS}":"YUEING-UNDO_2"}, {"{#GAMEPROCESS}":"YUEING-USERS"}, {"{#GAMEPROCESS}":"YUEING-YYCSACCOUNTBDATA"}, {"{#GAMEPROCESS}":"YUEING-YYCSACCOUNTEDATA"}, {"{#GAMEPROCESS}":"YUEING-YYCSACCOUNTIDX"}, {"{#GAMEPROCESS}":"YUEING-YYCSBASICINFIDX"}, {"{#GAMEPROCESS}":"YUEING-YYCSBASICINFODATA"}, {"{#GAMEPROCESS}":"YUEING-YYCSDEFDATA"}, {"{#GAMEPROCESS}":"YUEING-YYCSDUBADATA"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201503"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201506"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201509"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201512"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201603"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201606"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201609"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPER201612"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGOPERMAXVALUE"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGUF"}, {"{#GAMEPROCESS}":"YUEING-YYCSLOGUFIDX"}, {"{#GAMEPROCESS}":"YUEING-YYCSSTATCITY"}, {"{#GAMEPROCESS}":"YUEING-YYCSSTATDATA"}, {"{#GAMEPROCESS}":"YUEING-YYCSSTATIDX"} ] }
脚本里面用到的tbs_usage.sh:
#!/bin/bash str=${ORACLE_HOME#*product/} str1=${str%%.*} if [ "$str1" == "12" ]; then pdbs=`sqlplus -silent '/ as sysdba' << EOSQL whenever sqlerror exit sql.sqlcode set pagesize 0 feedback off verify off heading off echo off timing off select name from v\\$pdbs where open_mode='READ WRITE'; exit; EOSQL` for db in $pdbs ; do sqlplus -s '/as sysdba' <<zzz set lines 200 pages 500 set echo off set feedback off alter session set container=$db; select db_name||' | '||tablespace_name||' | '||allocated||' | '||used||' | '||free||' | '||usage from (select database_name db_name,tablespace_name, round(allocated) allocated,round(used) used,round(allocated-used) free,round(used/allocated*100) usage from (select tablespace_name, sum(case autoextensible when 'YES' then maxbytes else bytes end)/1024/1024 as allocated, sum(user_bytes)/1024/1024 used from dba_data_files group by tablespace_name order by tablespace_name)); exit; zzz done else for SID in $(ps -fu oracle | grep pmon | grep -v grep | cut -d_ -f3- | sort); do export ORACLE_SID=$SID sqlplus -s '/as sysdba' <<zzz set lines 200 pages 500 set echo off set feedback off select db_name||' | '||tablespace_name||' | '||allocated||' | '||used||' | '||free||' | '||usage from (select nvl(substr(database_name,1,instr(database_name,'.',1)-1),'$SID') db_name,tablespace_name, round(allocated) allocated,round(used) used,round(allocated-used) free,round(used/allocated*100) usage from (select tablespace_name, sum(case autoextensible when 'YES' then maxbytes else bytes end)/1024/1024 as allocated, sum(user_bytes)/1024/1024 used from dba_data_files group by tablespace_name order by tablespace_name)); exit; zzz done fi
二、测试和自定义key
获取多表空间名称后,接下来就是获取各个表空间的百分比了,百分比通过自定义key以及sed、awk稍微处理下就可以获取。自定义key如下:
#discovery table space UserParameter=custom.tablespace.discovery,sudo /bin/sh /etc/zabbix/externalscripts/gameprocess.sh UserParameter=custom.tablespace.percent[*],sudo su - oracle -c /etc/zabbix/externalscripts/tbs_usage.sh|grep -v "-"|grep -v ".*NAME"|grep -v "^\$"|grep -v "rows"|sed s/[[:space:]]//g|sed 's/|/-/'|grep \$1|awk -F[\|] '{print \$\$NF}'
执行获取表空间百分比自定义,结果如下:
[root@centos6564-73-131 ~]# zabbix_get -s 192.168.72.160 -k custom.tablespace.percent[YUEING-YYCSSTATIDX] 7
从结果可以获取当前表空间YUEING-YYCSSTATIDX使用百分比为7%。
三、制作模板
模板Template App Oracle已经上传至github地址:https://github.com/loveqx/zabbix-doc/tree/master/zabbix-scripts/zabbix-template-oracle/Template App Oracle.xml
监控项如下:
第一部分是监控oracle进程、主从同步状态、主从归档备份状态以及DB备份状态:
第二部分为表空间监控:
四、主机上套
五、效果图
六、脚本地址和参考文献
https://github.com/loveqx/zabbix-doc/tree/master/zabbix-scripts/zabbix-template-oracle/tb_usage.sh
参考文献:无
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」