Skip to content
Snippets Groups Projects
Commit c39caedb authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

Merge branch '6010-check-pqsql' into 'master'

first public version for postgresql check

See merge request !86
parents 28852137 a9f071d1
No related branches found
No related tags found
1 merge request!86first public version for postgresql check
#!/bin/bash #!/bin/bash
# ====================================================================== # ======================================================================
# #
# !!! WORK IN PROGRESS !!! DO NOT USE YET !!!
#
# Check PSQL SERVER # Check PSQL SERVER
# #
# requirements: # requirements:
...@@ -12,27 +10,25 @@ ...@@ -12,27 +10,25 @@
# - execute check_psqlserver -i # - execute check_psqlserver -i
# #
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# 2023-06-xx v0.0 <axel.hahn@unibe.ch> # Postgresql docs:
# https://www.postgresql.org/docs/current/monitoring-stats.html
# ----------------------------------------------------------------------
# 2023-06-07 v0.2 <axel.hahn@unibe.ch>
# ====================================================================== # ======================================================================
. $(dirname $0)/inc_pluginfunctions . $(dirname $0)/inc_pluginfunctions
self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] ) self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] )
self_APPVERSION=0.1 self_APPVERSION=0.2
# --- set HOME
HOME=/etc/icinga2-passive-client
# HOME=/etc/icingaclient
# --- other vars... # --- other vars...
cfgfile=$HOME/.psql.conf cfgfile=/etc/icingaclient/.psql.conf
myuser=icingamonitor myuser=icingamonitor
# new line # new line
NL=" NL="
" "
lastvalue=
out=" " out=" "
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
...@@ -46,6 +42,7 @@ function _uninstall(){ ...@@ -46,6 +42,7 @@ function _uninstall(){
unset PGHOST unset PGHOST
unset PGUSER unset PGUSER
unset PGPASSWORD unset PGPASSWORD
unset PGDATABASE
} }
# (re)install database user for monitoring # (re)install database user for monitoring
...@@ -85,6 +82,8 @@ function _install(){ ...@@ -85,6 +82,8 @@ function _install(){
export PGUSER=${myuser} export PGUSER=${myuser}
export PGPASSWORD=${mypw} export PGPASSWORD=${mypw}
export PGHOST=localhost export PGHOST=localhost
# set default database because a user db won't be created
export PGDATABASE=postgres export PGDATABASE=postgres
EOF EOF
ls -l $cfgfile ls -l $cfgfile
...@@ -94,6 +93,7 @@ EOF ...@@ -94,6 +93,7 @@ EOF
fi fi
} }
# show help
function _usage(){ function _usage(){
local _self=$( basename $0 ) local _self=$( basename $0 )
cat <<EOH cat <<EOH
...@@ -101,8 +101,6 @@ ______________________________________________________________________ ...@@ -101,8 +101,6 @@ ______________________________________________________________________
${self_APPNAME} :: v${self_APPVERSION} ${self_APPNAME} :: v${self_APPVERSION}
THIS IS AN PRE ALPHA VERSION - DO NOT USE THIS
(c) Institute for Medical Education - Univerity of Bern (c) Institute for Medical Education - Univerity of Bern
Licence: GNU GPL 3 Licence: GNU GPL 3
______________________________________________________________________ ______________________________________________________________________
...@@ -117,7 +115,13 @@ OPTIONS: ...@@ -117,7 +115,13 @@ OPTIONS:
PARAMETERS: PARAMETERS:
-m method; valid methods are: -m method; valid methods are:
dbstat first implmenetation test activity running processes and queries
dbrows Count of database row actions
conflicts Detected conflicts from pg_stat_database_conflicts
diskblock Count of diskblocks physically read or coming from cache
problems Problems and troublemakers
replication Replication status (table output only)
transactions Count of transactions over all databases
EXAMPLES: EXAMPLES:
$_self -i $_self -i
...@@ -126,30 +130,31 @@ EXAMPLES: ...@@ -126,30 +130,31 @@ EXAMPLES:
EOH EOH
} }
function renderCounts(){ # render incremental counters from integer results of a given sql query
local _query="$1" # global string out output of check
local _out=$( psql -c "${_query}") # param string database query
# out+=$( echo "DEBUG: _query=${_query}${NL}" ) function renderCounters(){
# echo "DEBUG: _out="; echo "${_out}" local _query; _query="$1"
local _out; _out=$( psql -c "${_query}")
local _iCounter=0 local _iCounter; typeset -i _iCounter=0
typeset -i _iCounter local _header; _header=$( echo "${_out}" | head -1 | tr -d ' ')
local _data; _data=$( echo "${_out}" | head -3 | tail -1 | tr -d ' ')
local _header local _sDeltaUnit; _sDeltaUnit=sec
_header=$( echo "${_out}" | head -1 | tr -d ' ') local _iSpeed; typeset -i _iSpeed=0
local _data local _sStoreid; _sStoreid=$( md5sum <<< "${_query}" | awk '{ print $1 }' )
_data=$( echo "${_out}" | head -3 | tail -1 | tr -d ' ') local _iValue; typeset -i _iValue
# echo "DEBUG: _header=${_header}" # read psql result and put columns and values to an array
IFS="|" IFS="|"
read -ra aCols <<< "$_header" read -ra aCols <<< "$_header"
read -ra aVals <<< "$_data" read -ra aVals <<< "$_data"
for sColumn in ${aCols[*]} for sColumn in ${aCols[*]}
do do
local value=${aVals[$_iCounter]} _iValue=${aVals[$_iCounter]}
# echo "DEBUG: $sColumn = $value" _iSpeed=$( ph.perfdeltaspeed "psql-${sColumn}-${_sStoreid}" ${_iValue} sec $_sDeltaUnit)
out+=$( printf "%25s: %10s \n" "${sColumn}" "${value}${NL}") out=$out$(printf "%25s: %10s %s \n" "${sColumn}" "${_iValue}" "... delta = ${_iSpeed} per $_sDeltaUnit${NL}")
ph.perfadd "${sColumn}" "${value}" ph.perfadd "${sColumn}" "${_iSpeed}"
_iCounter+=1 _iCounter+=1
done done
} }
...@@ -175,8 +180,6 @@ if [ $bOptInstall -eq 1 -a "$( whoami )" = "root" ]; then ...@@ -175,8 +180,6 @@ if [ $bOptInstall -eq 1 -a "$( whoami )" = "root" ]; then
ph.status "SKIP installation. config file already exists: $cfgfile." ph.status "SKIP installation. config file already exists: $cfgfile."
ph.exit ph.exit
fi fi
HOME=/root
export HOME
_uninstall _uninstall
_install _install
...@@ -187,7 +190,6 @@ fi ...@@ -187,7 +190,6 @@ fi
# --- uninstall # --- uninstall
if [ $bOptUninstall -eq 1 -a "$( whoami )" = "root" ]; then if [ $bOptUninstall -eq 1 -a "$( whoami )" = "root" ]; then
HOME=/root
_uninstall _uninstall
rm -f $cfgfile rm -f $cfgfile
...@@ -208,21 +210,71 @@ fi ...@@ -208,21 +210,71 @@ fi
sMode=$(ph.getValueWithParam '' m "$@") sMode=$(ph.getValueWithParam '' m "$@")
case "${sMode}" in case "${sMode}" in
"activity")
"dbstat") _out=$( psql -c "select pid,usename,state,query,backend_type,backend_start from pg_stat_activity" )
descr="statistics over all databases" typeset -i iQTotal; iQTotal=$( tail -1 <<< "$_out" | cut -f 1 -d ' ' | tr -d '(' )
renderCounts "select \ typeset -i iQActive; iQActive=$( awk '{ print $5 }' <<< "$_out" | grep -c "active" )
sum(xact_commit) as commit, \
sum(xact_rollback) as rollback, \ descr="Running total: $iQTotal ... active: $iQActive"
sum(blks_read) as blkread, \ out="${_out}${NL}"
sum(blks_hit) as blkhit \ ph.perfadd "running-total" "${iQTotal}"
ph.perfadd "running-active" "${iQActive}"
;;
"conflicts")
descr="Detected conflicts (from pg_stat_database_conflicts)"
renderCounters "select \
sum(confl_tablespace) as confltablespace, \
sum(confl_lock) as confllock, \
sum(confl_snapshot) as conflsnapshot, \
sum(confl_bufferpin) as conflbufferpin, \
sum(confl_deadlock) as confldeadlock \
from pg_stat_database_conflicts "
;;
"dbrows")
descr="Count of database row actions (from pg_stat_database)"
renderCounters "select \
sum(tup_returned) as return, \
sum(tup_fetched) as fetch, \
sum(tup_inserted) as insert, \
sum(tup_updated) as update, \
sum(tup_deleted) as delete \
from pg_stat_database "
;;
"diskblock")
descr="Count of diskblocks physically read or coming from cache (from pg_stat_database)"
renderCounters "select \
sum(blks_read) as read, \
sum(blks_hit) as cached \
from pg_stat_database " from pg_stat_database "
;; ;;
"queries") "problems")
# psql -c "select * from pg_stat_activity " descr="Problems and troublemakers (from pg_stat_database)"
# psql -c "select * from pg_stat_statements " -> av psql v11 renderCounters "select \
sum(conflicts) as conflicts, \
sum(deadlocks) as deadlocks, \
sum(checksum_failures) as checksumfailures, \
sum(temp_files) as tmpfiles, \
sum(temp_bytes) as tmpbytes \
from pg_stat_database "
;;
"replication")
_out=$( psql -c "select * from pg_stat_replication" )
if tail -1 <<< "$_out" | grep "(0 rows)" >/dev/null ; then
descr="No data in pg_stat_replication - this is no slave."
out=""
else
descr="status (from pg_stat_replication)"
out="${_out}${NL}"
fi
;; ;;
"transactions")
descr="Count of transactions over all databases (from pg_stat_database)"
renderCounters "select \
sum(xact_commit) as commit, \
sum(xact_rollback) as rollback \
from pg_stat_database "
;;
*) *)
echo ERRROR: [${sMode}] is an INVALID mode echo ERRROR: [${sMode}] is an INVALID mode
_usage _usage
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment