zabora源码
#!/usr/bin/env bash
rcode=0
PATH=/usr/local/bin:${PATH}#################################################################################
#################################################################################
#
# Variable Definition
# ---------------------
#
APP_NAME=$(basename $0)
APP_DIR=$(dirname $0)
APP_VER="1.5.4"
APP_WEB="https://sergiotocalini.github.io"
#
##################################################################################################################################################################
#
# Load Oracle Environment
# -------------------------
#
[ -r ${APP_DIR}/${APP_NAME%.*}.conf ] && . ${APP_DIR}/${APP_NAME%.*}.conf
#
##################################################################################################################################################################
#
# Function Definition
# ---------------------
#
usage() {
echo "Usage: ${APP_NAME%.*} [Options]"
echo ""
echo "Options:"
echo " -h Displays this help message."
echo " -a Query arguments."
echo " -s ARG(str) Query to Oracle."
echo " -o ARG(str) Set SID to make the query."
echo " -j Jsonify output."
echo " -v Show the script version."
echo ""
echo "Please send any bug reports to https://github.com/sergiotocalini/zabora/issues"
exit 1
}version() {
echo "${APP_NAME%.*} ${APP_VER}"
exit 1
}zabbix_not_support() {
echo "ZBX_NOTSUPPORTED"
exit 1
}
#
##################################################################################################################################################################
while getopts ":a:j:o:s:Hv" OPTION; do
case ${OPTION} in
H)
usage
;;
a)
SQL_ARGS=${OPTARG}
;;
j)
JSON=1
JSON_ATTR=${OPTARG}
;;
o)
ORACLE_SID=${OPTARG}
;;
s)
SQL="${APP_DIR}/sql/${OPTARG}"
;;
v)
version
;;
\?)
exit 1
;;
esac
doneif [[ -f ${APP_DIR}/zabora.oraenv ]]; then
. ${APP_DIR}/zabora.oraenv
else
ORAENV_ASK=NO
. /usr/local/bin/oraenv > /dev/null
fi
if [[ -f "${SQL%.sql}.sql" ]]; then
rval=`sqlplus -s ${ORACLE_USER}/${ORACLE_PASS} @${SQL} "${SQL_ARGS}"`
rcode="${?}"
if [[ ${JSON} -eq 1 ]]; then
#set -A rval ${rval}
declare -a rval ${rval}
echo '{'
echo ' "data":['
count=1
for i in ${rval[@]};do
output='{ "'{#${JSON_ATTR}}'":"'${i}'" }'
if (( ${count} < ${#rval[*]} )); then
output="${output},"
fi
echo " ${output}"
let "count=count+1"
done
echo ' ]'
echo '}'
else
echo ${rval:-0}
fi
else
zabbix_not_support
fiexit ${rcode}
zabora源码关键点
sqlplus -s ${ORACLE_USER}/${ORACLE_PASS} @${SQL} "${SQL_ARGS}"
sqlplus是zabora根据oracle数据库调用指定sql文件并且赋值sql传参的关键
sqlplus -s 表示静默输出
{ORACLE_USER}、${ORACLE_PASS}的值来自配置文件zabora.oraenv。
${SQL}由SQL="${APP_DIR}/sql/${OPTARG}"获取。APP_DIR=$(dirname $0),${OPTARG}的值sql_key是zabbix监控项的键值,来自zabora -s sql_key。
通常情况下,如果${APP_DIR}/sql/sql_key.sql存在,便会执行sqlplus的命令,获取监控值。
zabora脚本参数
-h 显示帮助信息
-a sql文件的传参
-s ARG(str) sql文件路径
-o ARG(str) oracle的SID
-j 是否以json作为输出文件,1为是。
-v 显示脚本版本
常见使用命令
zabora.sh -o $1 -s $2 -a $3
zabora.sh -o orcl -s /u01/scripts/zabora/sql/data_size.sql -a "1"
zabora.sh -o $1 -s $2 -a $3 -j $4
zabora.sh -o orcl -s /u01/scripts/zabora/sql/data_size.sql -a "1" -j "1"
zabbix键值形式
zabora[{$ORACLE_SID},sql_key,sql_arg,json_out]
例如: zabora[{$ORACLE_SID},db_size,100,1]