diff --git a/docs/20_Checks/check_psqlserver.md b/docs/20_Checks/check_psqlserver.md new file mode 100644 index 0000000000000000000000000000000000000000..b343d528d9b47903684e2ebd876a4ff6a3afda2c --- /dev/null +++ b/docs/20_Checks/check_psqlserver.md @@ -0,0 +1,210 @@ +# check PostgreSql server + +## Introduction + +**check_psqlserver** is a plugin execute different checks on a postgreSql server instance. +The kind of check is defined by a paameter `-m METHOD`. + +## Requirements + +The icinga user needs to connect to the database server. + +## Syntax + +`$ check_psqlserver [-i|-u|-m METHOD]` + +```txt +./check_psqlserver +______________________________________________________________________ + +CHECK_PSQLSERVER :: v0.6 + +(c) Institute for Medical Education - University of Bern +Licence: GNU GPL 3 +______________________________________________________________________ + +USAGE: + check_psqlserver [OPTIONS] -m METHOD + +OPTIONS: + -h this help + -i install monitoring user (must be executed as root) + -u uninstall monitoring user (must be executed as root) + +PARAMETERS: + -m method; valid methods are: + activity running processes and queries + conflicts Detected conflicts from pg_stat_database_conflicts + dbrows Count of database row actions + 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: + check_psqlserver -i + check_psqlserver -m activity + +``` + +## Installation + +To give access to the database there is the param `-i`(for "install"). +This command needs to be run as root. + +```txt +./check_psqlserver -i +``` + +This creates a database user "icingamonitor" with a 64 byte random password. +To store the credentials a file file be created: `/etc/icingaclient/.psql.conf`. It is a shell script that will be sourced by check_psqlserver. + +```shell +cat /etc/icingaclient/.psql.conf +# +# generated on Thu Jun 8 03:44:06 CEST 2023 +# +export PGUSER=icingamonitor +export PGPASSWORD=87B9jUcRp38DgkLDL3uHzC3V8YjgX6KZMxIxqpWieTWWIBgNoFYt8yvK9Y8RmdL0 +export PGHOST=localhost + +# set default database because a user db won't be created +export PGDATABASE=postgres +``` + +## Checks + +The checks are done on the server and summarize data from statistic tables for all databases. + +see <https://www.postgresql.org/docs/current/monitoring-stats.html> + +If you need to troubleshot and want to see which of your databases causes the trouble you can execute the statement which is ggiven in the hint. + +### activity + +Show running processes and queries + +```txt +./check_psqlserver -m activity +OK: Pgsql activity :: Running total: 33 ... active: 2 idle: 25 fastpath: 0 other: 6 + +Hint: Query for details: +select * from pg_stat_activity. + + |running-total=33;; running-active=2;; running-idle=25;; running-fastpath=0;; running-other=6;; +``` + +### conflicts + +Detected conflicts from pg_stat_database_conflicts + +```txt +./check_psqlserver -m conflicts +OK: Pgsql conflicts :: ... OK, nothing was found + confl_tablespace : 0 ... delta = 0 per min + confl_lock : 0 ... delta = 0 per min + confl_snapshot : 0 ... delta = 0 per min + confl_bufferpin : 0 ... delta = 0 per min + confl_deadlock : 0 ... delta = 0 per min + +Hint: Query for details per database: +select * from pg_stat_database_conflicts. + + |confltablespace=0;; confllock=0;; conflsnapshot=0;; conflbufferpin=0;; confldeadlock=0;; +``` + + +### dbrows + +Count of database row actions + +```txt +./check_psqlserver -m dbrows +OK: Pgsql dbrows :: Count of database row actions + tup_returned : 744761392127 ... delta = 0 per sec + tup_fetched : 21597149760 ... delta = 0 per sec + tup_inserted : 42683720 ... delta = 0 per sec + tup_updated : 1282902 ... delta = 0 per sec + tup_deleted : 1878883 ... delta = 0 per sec + +Hint: Query for details per database: +select * from pg_stat_database. + + |tupreturned=0;; tupfetched=0;; tupinserted=0;; tupupdated=0;; tupdeleted=0;; +``` + +### diskblock + +Count of diskblocks physically read or coming from cache + +```txt +./check_psqlserver -m diskblock +OK: Pgsql diskblock :: Count of diskblocks physically read or coming from cache (from pg_stat_database) + blks_read : 20391240674 ... delta = 439 per sec + blks_hit : 103015908887 ... delta = 6549 per sec + +Hint: Query for details per database: +select * from pg_stat_database. + + |blksread=439;; blkshit=6549;; +``` + +### problems + +Problems and troublemakers + +```txt +./check_psqlserver -m problems +OK: Pgsql problems :: Problems and troublemakers (from pg_stat_database) ... OK, nothing was found + conflicts : 0 ... delta = 0 per min + deadlocks : 0 ... delta = 0 per min + checksumfailures : 0 ... delta = 0 per min + temp_files : 5617739 ... delta = 0 per min + temp_bytes : 2896790521548 ... delta = 0 per min + +Hint: Query for details per database: +select * from pg_stat_database. + + |conflicts=0;; deadlocks=0;; checksumfailures=0;; tempfiles=0;; tempbytes=0;; +``` + +### replication + +Replication status. + +It shows the defined replication and their status. +It switches to state warning if one of the replications is not "streaming". + +Aditionally it fetches the maximum lag of write, flush and replay of all replications. +The state switches to warning if it is larger 1 sec (just experimental). + +```txt +./check_psqlserver -m replication +OK: Pgsql replication :: status + OK: all replications have the state 'streaming'. +OK: maximum lag is 0.2077 sec (below 1 sec). + application_name : client_addr : state : write_lag : flush_lag : replay_lag : max_lag : sync_state +------------------+----------------+-----------+-----------------+-----------------+---------------+---------------+------------ + psqlbackup : 192.168.10.21 : streaming : 00:00:00.000673 : 00:00:00.003771 : 00:00:00.2077 : 00:00:00.2077 : async +(1 row) +Hint: Query for details per replication: +select * from pg_stat_replication. + + |total=1;; state-streaming=1;; state-other=0;; max-lag=0.2077;; +``` + +### transactions + +Count of transactions over all databases + +```txt +./check_psqlserver -m transactions +OK: Pgsql transactions :: Count of transactions over all databases + commit : 380856524 ... delta = 0 per sec + rollback : 13173 ... delta = 0 per sec + +Hint: Query for details per database: +select * from pg_stat_database. + + |commit=0;; rollback=0;; +```