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

first public version for postgresql check

parent 77d0e434
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