#!/bin/bash # ABOUT xen server for zabbix # author mikedmorto 2021 year export LC_ALL="" export LANG="en_US.UTF-8" version="1.5" XE="/opt/xensource/bin/xe" # path to mdmxen cfg backup system VMSCFG="/root/bin/mdmxen/etc/vms.cfg" JSON="" ##### PARAMETERS##### METRIC="$1" ITEM="$2" case "$METRIC" in discovery) # delete last simbol and add the end JSON="{ \"data\":[" XCPU_LIST="" # get all cpu numbers XCPU_LIST=`cat "/proc/cpuinfo" | grep processor | tr -d ' ' | awk -F":" '{print "cpu"$2}'` XSR_LIST=`${XE} sr-list params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"` XVM_LIST=`${XE} vm-list is-control-domain=false is-a-snapshot=false params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"` #show all cpu for CPU_NAME in ${XCPU_LIST}; do JSON=${JSON}" {\"{#CPU_NAME}\":\"${CPU_NAME}\"}," done #show all sr uuid for SR_UUID in ${XSR_LIST}; do JSON=${JSON}" {\"{#SR_UUID}\":\"${SR_UUID}\"}," done #show all vm uuid for VM_UUID in ${XVM_LIST}; do JSON=${JSON}" {\"{#VM_UUID}\":\"${VM_UUID}\"}," done JSON=${JSON::-1} JSON=${JSON}"]}" echo ${JSON} exit 0 ;; xen.version) RET=`cat "/etc/xensource-inventory" | awk -F"=" '{if($1=="PRODUCT_VERSION"){print $2} }' | tr -d "'" ` echo ${RET} exit 0 ;; xen.dom0_mem) RET=`cat "/etc/xensource-inventory" | awk -F"=" '{if($1=="DOM0_MEM"){print $2} }' | tr -d "'" ` echo ${RET} exit 0 ;; xen.brand) RET=`cat "/etc/xensource-inventory" | awk -F"=" '{if($1=="PRODUCT_BRAND"){print $2} }' | tr -d "'" ` echo ${RET} exit 0 ;; xen.memory_total_kib) RET=`${XE} host-data-source-query data-source=memory_total_kib` echo ${RET} exit 0 ;; xen.memory_free_kib) RET=`${XE} host-data-source-query data-source=memory_free_kib` echo ${RET} exit 0 ;; ####### xapi memory ######## xen.xapi_memory_usage_kib) RET=`${XE} host-data-source-query data-source=xapi_memory_usage_kib` echo ${RET} exit 0 ;; xen.xapi_free_memory_kib) RET=`${XE} host-data-source-query data-source=xapi_free_memory_kib` echo ${RET} exit 0 ;; xen.xapi_live_memory_kib) RET=`${XE} host-data-source-query data-source=xapi_live_memory_kib` echo ${RET} exit 0 ;; xen.xapi_allocation_kib) RET=`${XE} host-data-source-query data-source=xapi_allocation_kib` echo ${RET} exit 0 ;; ##### cpu xen.cpu_usage) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} host-data-source-query data-source=${ITEM}` echo ${RET} exit 0 ;; ###### sr ######### xen.sr_physical-size) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} sr-param-get param-name=physical-size uuid=${ITEM}` if [[ $RET = '-1' ]] then echo 0 else echo ${RET} fi exit 0 ;; xen.sr_virtual-allocation) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} sr-param-get param-name=virtual-allocation uuid=${ITEM}` echo ${RET} exit 0 ;; xen.sr_physical-utilisation) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} sr-param-get param-name=physical-utilisation uuid=${ITEM}` if [[ $RET = '-1' ]] then echo 0 else echo ${RET} fi exit 0 ;; xen.sr_type) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} sr-param-get param-name=type uuid=${ITEM}` echo ${RET} exit 0 ;; xen.sr_name-label) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} sr-param-get param-name=name-label uuid=${ITEM}` echo ${RET} exit 0 ;; ###### vms ###### xen.vm_running) RET=`${XE} vm-list is-control-domain=false power-state=running params=uuid | egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}" | wc -l` echo ${RET} exit 0 ;; xen.vm_name-label) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} vm-param-get param-name=name-label uuid=${ITEM}` echo ${RET} exit 0 ;; xen.vm_power-state) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} vm-param-get param-name=power-state uuid=${ITEM}` echo ${RET} exit 0 ;; xen.vm_memory-actual) if [ -z "$ITEM" ] then exit 1 fi RET=`${XE} vm-param-get param-name=memory-actual uuid=${ITEM}` echo ${RET} exit 0 ;; xen.pool_autorun) XPOOL=`${XE} pool-list params=uuid| egrep -o "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"` XSTATUS=`${XE} pool-param-get param-name=other-config uuid=${XPOOL} | tr -d ' ' | tr ';' '\n' | awk -F":" '{if($1=="auto_poweron"){print $2}}'` if [[ $XSTATUS = "true" ]] then echo "1" else echo "0" fi exit 0 ;; xen.vm_autorun) if [ -z "$ITEM" ] then exit 1 fi XSTATUS=`${XE} vm-param-get param-name=other-config uuid=${ITEM} | tr -d ' ' | tr ';' '\n' | awk -F":" '{if($1=="auto_poweron"){print $2}}'` if [ -z "$XSTATUS" ] then echo "0" && exit 1 fi if [[ $XSTATUS = "true" ]] then echo "1" else echo "0" fi exit 0 ;; xen.vm_is_backuped) if [ -z "$ITEM" ] then exit 1 fi RET=`cat ${VMSCFG} | awk -F: '/^[^#]/ { print $1 }' | awk -v UUID="${ITEM}" '{ if($2==UUID){print $0} }' | wc -l` echo ${RET} exit 0; ;; script.version) echo ${version} ;; help) echo "please use these params { discovery xen.version xen.dom0_mem xen.brand xen.memory_total_kib xen.memory_free_kib xen.xapi_memory_usage_kib xen.xapi_free_memory_kib xen.xapi_live_memory_kib xen.xapi_allocation_kib xen.cpu_usage xen.pool_autorun xen.sr_virtual-allocation xen.sr_physical-utilisation xen.sr_physical-size xen.sr_type xen.sr_name-label xen.vm_runnig xen.vm_name-label xen.vm_power-state xen.vm_memory-actual xen.vm_is_backuped xen.vm_autorun script.version }" ;; *) echo "" ;; esac