diff --git a/check_psqlserver b/check_psqlserver index b161b96745156dbe1e399e47297dce84d8f1fe27..026654bd0a80e2ad873a2787e92b445be36d72cd 100755 --- a/check_psqlserver +++ b/check_psqlserver @@ -16,12 +16,13 @@ # 2023-06-07 v0.2 <axel.hahn@unibe.ch> # 2023-06-08 v0.3 <axel.hahn@unibe.ch> show unknown if database connection fails # 2023-06-08 v0.4 <axel.hahn@unibe.ch> get summary for cronflicts and problems +# 2023-06-09 v0.5 <axel.hahn@unibe.ch> deltaunit can be set as parameter # ====================================================================== . $(dirname $0)/inc_pluginfunctions self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] ) -self_APPVERSION=0.2 +self_APPVERSION=0.5 # --- other vars... cfgfile=/etc/icingaclient/.psql.conf @@ -142,13 +143,15 @@ EOH # render incremental counters from integer results of a given sql query # global string out output of check # param string database query +# param string time unit; one of sec|min; default: sec function renderCounters(){ local _query; _query="$1" + local _sDeltaUnit; _sDeltaUnit=${2:-sec} + local _out; _out=$( psql -c "${_query} " 2>&1) || _queryFailed local _iCounter; typeset -i _iCounter=0 local _header; _header=$( echo "${_out}" | head -1 | tr -d ' ') local _data; _data=$( echo "${_out}" | head -3 | tail -1 | tr -d ' ') - local _sDeltaUnit; _sDeltaUnit=sec local _iSpeed; typeset -i _iSpeed=0 local _sStoreid; _sStoreid=$( md5sum <<< "${_query}" | awk '{ print $1 }' ) local _iValue; typeset -i _iValue @@ -229,7 +232,11 @@ case "${sMode}" in typeset -i iQOther; iQOther=$iQTotal-$iQActive-$iQIdle-$iQFastpath descr="Running total: $iQTotal ... active: $iQActive idle: $iQIdle fastpath: $iQFastpath other: $iQOther" - out=$( grep "^.[a-z]" <<< "${_out}" | cut -c 1-150 | tr '|' ':' ) + typeset -i iMax; iMax=20 + out=$( grep "^.[a-z]" <<< "${_out}" | cut -c 1-150 | tr '|' ':' | head -${iMax} ) + if [ ${iQTotal} -gt ${iMax} ]; then + out+="${NL}(showing ${iMax} of ${iQTotal} lines)${NL}" + fi ph.perfadd "running-total" "${iQTotal}" ph.perfadd "running-active" "${iQActive}" ph.perfadd "running-idle" "${iQIdle}" @@ -238,6 +245,7 @@ case "${sMode}" in ;; "conflicts") + deltaunit=min descr="Detected conflicts (from pg_stat_database_conflicts)" renderCounters "select \ sum(confl_tablespace) as confl_tablespace, \ @@ -245,14 +253,14 @@ case "${sMode}" in sum(confl_snapshot) as confl_snapshot, \ sum(confl_bufferpin) as confl_bufferpin, \ sum(confl_deadlock) as confl_deadlock \ - from pg_stat_database_conflicts " + from pg_stat_database_conflicts " "${deltaunit}" # sum of 7th column (with delta per sec) typeset -i iTotal; iTotal=$( echo "$out" | awk '{ sum+=$7} END { print sum;}' ) if [ $iTotal -gt 0 ]; then - ph.setStatus "warning" + ph.setStatus "critical" fi - descr+=" - currently $iTotal per sec" + descr+=" - currently $iTotal per ${deltaunit}" ;; "dbrows") @@ -275,6 +283,7 @@ case "${sMode}" in ;; "problems") + deltaunit=min descr="Problems and troublemakers (from pg_stat_database)" renderCounters "select \ sum(conflicts) as conflicts, \ @@ -282,14 +291,14 @@ case "${sMode}" in sum(checksum_failures) as checksumfailures, \ sum(temp_files) as temp_files, \ sum(temp_bytes) as temp_bytes \ - from pg_stat_database " + from pg_stat_database" "${deltaunit}" # sum of 7th column (with delta per sec) typeset -i iTotal; iTotal=$( echo "$out" | awk '{ sum+=$7} END { print sum;}' ) if [ $iTotal -gt 0 ]; then - ph.setStatus "warning" + ph.setStatus "critical" fi - descr+=" - currently $iTotal per sec" + descr+=" - currently $iTotal per ${deltaunit}" ;; "replication")