From 2119c85dd0838b26c90d5d1b626a597d31cb2dad Mon Sep 17 00:00:00 2001 From: Mike D'Morto Date: Thu, 28 Jan 2021 16:06:29 +0700 Subject: [PATCH] iostat --- iostat/iostat.conf | 3 ++ iostat/iostat.sh | 79 ++++++++++++++++++++++++++++++++++++++++++++++ iostat/sudoers | 2 ++ 3 files changed, 84 insertions(+) create mode 100644 iostat/iostat.conf create mode 100755 iostat/iostat.sh create mode 100644 iostat/sudoers diff --git a/iostat/iostat.conf b/iostat/iostat.conf new file mode 100644 index 0000000..4ab3cf4 --- /dev/null +++ b/iostat/iostat.conf @@ -0,0 +1,3 @@ +#iostat +UserParameter=iostat[*],/etc/zabbix/scripts/iostat.sh "none" "$1" "$2" + diff --git a/iostat/iostat.sh b/iostat/iostat.sh new file mode 100755 index 0000000..be25ec2 --- /dev/null +++ b/iostat/iostat.sh @@ -0,0 +1,79 @@ +#!/bin/bash +export LC_ALL="" +export LANG="en_US.UTF-8" +# +if [[ -z "$1" || -z "$2" || -z "$3" ]]; then + ##### DISCOVERY ##### + DEVICES=`iostat -d | awk '{print $1}' | sed -e '/\(^nvme[0-9]n*[0-9]*\)\|^\([xhsv]*d[a-z][0-9]*\)$/!d'` + if [[ -n ${DEVICES} ]]; then + JSON="{ \"data\":[" + SEP="" + for DEV in ${DEVICES}; do + JSON=${JSON}"$SEP{\"{#HDNAME}\":\"${DEV}\"}" + SEP=", " + done + JSON=${JSON}"]}" + echo ${JSON} + fi + exit 0 +fi +##### PARAMETERS ##### +RESERVED="$1" +METRIC="$2" +DISK="$3" +CACHE_TTL="25" +CACHE_FILE="/tmp/zabbix.iostat.cache" +EXEC_TIMEOUT="2" +NOW_TIME=`date '+%s'` +##### RUN ##### +if [ ${METRIC} = "read" ]; then + iostat -k | grep ${DISK} | head -n 1 | awk '{print $5}' + exit 0 +fi +if [ ${METRIC} = "write" ]; then + iostat -k | grep ${DISK} | head -n 1 | awk '{print $6}' + exit 0 +fi +##### CACHE ##### +if [ -s "${CACHE_FILE}" ]; then + CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"` +else + CACHE_TIME=0 +fi +DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME})) +# +if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then + sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME})) +elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then + echo "" >> "${CACHE_FILE}" # !!! + DATACACHE=`iostat -x 1 2 2>&1` + echo "${DATACACHE}" > "${CACHE_FILE}" # !!! + chmod 640 "${CACHE_FILE}" +fi +# +if [ ${METRIC} = "util" ]; then + cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $12}' + exit 0 +fi +if [ ${METRIC} = "svctm" ]; then + cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $11}' + exit 0 +fi +if [ ${METRIC} = "await" ]; then + cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $10}' + exit 0 +fi +if [ ${METRIC} = "avgqu" ]; then + cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $9}' + exit 0 +fi +if [ ${METRIC} = "rs" ]; then + cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $4}' + exit 0 +fi +if [ ${METRIC} = "ws" ]; then + cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $5}' + exit 0 +fi + + diff --git a/iostat/sudoers b/iostat/sudoers new file mode 100644 index 0000000..d5e571e --- /dev/null +++ b/iostat/sudoers @@ -0,0 +1,2 @@ +Defaults:zabbix !requiretty +zabbix ALL=NOPASSWD: ALL