120 lines
9 KiB
Text
120 lines
9 KiB
Text
|
|
# postgresql
|
||
|
|
|
||
|
|
# Get the PostgreSQL version
|
||
|
|
UserParameter=psql.version[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "show server_version"
|
||
|
|
# Get the total number of Server Processes that are active
|
||
|
|
UserParameter=psql.server_processes[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "select sum(numbackends) from pg_stat_database"
|
||
|
|
# Get the total number of commited transactions
|
||
|
|
UserParameter=psql.tx_commited[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "select sum(xact_commit) from pg_stat_database"
|
||
|
|
# Get the total number of rolled back transactions
|
||
|
|
UserParameter=psql.tx_rolledback[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "select sum(xact_rollback) from pg_stat_database"
|
||
|
|
|
||
|
|
# replication status
|
||
|
|
# MASTER: pg_stat_replication view: gives the number of current replication streams
|
||
|
|
UserParameter=psql.replication_state[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -tc "select count(1) from pg_stat_replication where state = 'streaming' and application_name = 'walreceiver';"
|
||
|
|
# Get the number of current connections to postgres
|
||
|
|
UserParameter=psql.current_connections[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "select count(*) from pg_stat_activity;"
|
||
|
|
# max_connection parameter
|
||
|
|
UserParameter=psql.max_connections[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "show max_connections;"
|
||
|
|
|
||
|
|
# type of connections:
|
||
|
|
UserParameter=psql.connstate[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $2 -A -t -c "select count(*) from pg_stat_activity where state = '$1';"
|
||
|
|
|
||
|
|
# SLAVE replication lag in second, this can vary widely when there is no activity on the master
|
||
|
|
UserParameter=psql.replication_timelag[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -A -t -c "SELECT extract(EPOCH FROM (clock_timestamp() - pg_last_xact_replay_timestamp())) AS time_lag;"
|
||
|
|
|
||
|
|
# Discovery rule for databases
|
||
|
|
UserParameter=pgsql.db.discovery[*],/etc/zabbix/scripts/dyn_json.sh DBNAME $(/usr/bin/sudo -u postgres psql -p $1 -d postgres -A -t -c "SELECT datname FROM pg_database;"|grep -v template |grep -v postgres)
|
||
|
|
|
||
|
|
# Get the size of a Database (in bytes)
|
||
|
|
UserParameter=psql.db_size[*],/usr/bin/sudo -u postgres /usr/bin/psql -A -t -c "select pg_database_size('$1')"
|
||
|
|
# Get the size of the target table for a specific database ($1 = db, $2 = table)
|
||
|
|
UserParameter=psql.db_table_size[*],/usr/bin/sudo -u postgres psql -d $1 -A -t -c "select sum(pg_relation_size(inhrelid::regclass)) from pg_inherits where inhparent='$2'::regclass::oid;"
|
||
|
|
# Get the maximum number of connection for a specific database (-1 = no limit)
|
||
|
|
UserParameter=psql.db_datconnlimit[*],/usr/bin/sudo -u postgres /usr/bin/psql -A -t -c "select datconnlimit from pg_database where datname = '$1'"
|
||
|
|
|
||
|
|
####################################################################################################
|
||
|
|
# BEGIN pg_stat_database stats
|
||
|
|
# Get number of active connections for a specified database
|
||
|
|
UserParameter=psql.db_connections[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f3
|
||
|
|
# xact_commit
|
||
|
|
UserParameter=psql.db_xact_commit[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f4
|
||
|
|
# xact_rollback
|
||
|
|
UserParameter=psql.db_xact_rollback[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f5
|
||
|
|
# Number of disk blocks read in this database
|
||
|
|
UserParameter=psql.db_blks_read[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f6
|
||
|
|
# Number of Number of times disk blocks were found already in the buffer cache, so that a read was not necessary
|
||
|
|
UserParameter=psql.db_blks_hit[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f7
|
||
|
|
# Get number of tuples returned for a specified database
|
||
|
|
UserParameter=psql.db_returned[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f8
|
||
|
|
# Get number of tuples fetched for a specified database
|
||
|
|
UserParameter=psql.db_fetched[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f9
|
||
|
|
# Get number of tuples inserted for a specified database
|
||
|
|
UserParameter=psql.db_inserted[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f10
|
||
|
|
# Get number of tuples updated for a specified database
|
||
|
|
UserParameter=psql.db_updated[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f11
|
||
|
|
# Get number of tuples deleted for a specified database
|
||
|
|
UserParameter=psql.db_deleted[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f12
|
||
|
|
# Number of queries canceled due to conflicts with recovery in this database. (Conflicts occur only on standby servers; see pg_stat_database_conflicts for details.)
|
||
|
|
UserParameter=psql.db_conflicts[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f13
|
||
|
|
# Number of temporary files created by queries in this database. All temporary files are counted
|
||
|
|
UserParameter=psql.db_temp_files[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f14
|
||
|
|
# Total amount of data written to temporary files by queries in this database. All temporary files are counted
|
||
|
|
UserParameter=psql.db_temp_bytes[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f15
|
||
|
|
# Number of deadlocks detected in this database
|
||
|
|
UserParameter=psql.db_deadlocks[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f16
|
||
|
|
# Time spent reading data file blocks by backends in this database, in milliseconds
|
||
|
|
UserParameter=psql.db_blk_read_time[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f17
|
||
|
|
# Time spent writing data file blocks by backends in this database, in milliseconds
|
||
|
|
UserParameter=psql.db_blk_write_time[*],grep ";$1;" /dev/shm/zabbix-pg_stat_database-$2.cache| cut -d';' -f18
|
||
|
|
# END pg_stat_database stats
|
||
|
|
####################################################################################################
|
||
|
|
|
||
|
|
|
||
|
|
# generic (unused)
|
||
|
|
UserParameter=psql_stat_db[*],/usr/bin/sudo -u postgres /usr/bin/psql -A -t -c "select $2 from pg_stat_database where datname = '$1'"
|
||
|
|
|
||
|
|
# create cache file
|
||
|
|
UserParameter=psql.pg_stat_database[*],/etc/zabbix/scripts/pg_stat_database.sh $1
|
||
|
|
|
||
|
|
# replication slot discovery, $1 = port
|
||
|
|
UserParameter=pgsql.replication_slots.discovery[*],/etc/zabbix/scripts/pg_replication_slots_discovery.sh $1
|
||
|
|
# replication slot info, $1 = port, $2 = slot_name, $3 = column
|
||
|
|
UserParameter=pgsql.replication_slots.info[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "select $3 from pg_replication_slots where slot_name = '$2'"
|
||
|
|
|
||
|
|
# replications discovery, $1 = port
|
||
|
|
UserParameter=pgsql.stat_replication.discovery[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "select client_addr from pg_stat_replication" | awk 'BEGIN{printf "{\"data\":["}; {printf c"{\"{#REPLICATION}\":\""$$1"\"}";c=","}; END{print "]}"}'
|
||
|
|
# replication info, $1 = port, $2 = client_addr, $3 = column
|
||
|
|
UserParameter=pgsql.stat_replication.info[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "select $3 from pg_stat_replication where client_addr = '$2'"
|
||
|
|
|
||
|
|
|
||
|
|
####################################################################################################
|
||
|
|
# postgresql live configuration monitoring
|
||
|
|
|
||
|
|
# monitor the size of a postgres parameter that is dependant on the block_size (ex: shared_buffers)
|
||
|
|
UserParameter=pgsql.parameter.block_size.get[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "select setting::bigint * current_setting('block_size')::bigint from pg_settings where name='$2';"
|
||
|
|
# monitor a parameter in its native unit (usually ms for time based parameters for example)
|
||
|
|
UserParameter=pgsql.parameter.get[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "select setting from pg_settings where name='$2';"
|
||
|
|
# use a simple "show" for parameters that don't have strange unit (ex: autovacuum_freeze_max_age, etc)
|
||
|
|
UserParameter=pgsql.parameter.show[*],/usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "show $2;"
|
||
|
|
|
||
|
|
|
||
|
|
####################################################################################################
|
||
|
|
# get the number of CPU threads on the system
|
||
|
|
UserParameter=pgsql.nproc,nproc
|
||
|
|
|
||
|
|
# average duration of currently active statement, excluding the ones from replication and system users
|
||
|
|
UserParameter=pgsql.average_user_active_transaction_duration[*],echo -n 0 && /usr/bin/sudo -u postgres /usr/bin/psql -p $1 -Atc "select EXTRACT(EPOCH FROM avg(now() - xact_start)) from pg_stat_activity where state = 'active' and usename not like '%replica%' and usename not like '%pitr%' and usename <> 'postgres'"
|
||
|
|
|
||
|
|
# extract statitics from the postgres statistics collector
|
||
|
|
|
||
|
|
# pg_stat_slru
|
||
|
|
UserParameter=pgsql.stats.pg_stat_slru.discovery[*],/etc/zabbix/scripts/dyn_json.sh NAME $(sudo -u postgres psql -p $1 -Atc "SELECT name FROM pg_stat_slru")
|
||
|
|
UserParameter=pgsql.stats.pg_stat_slru[*],sudo -u postgres psql -p $1 -Atc "SELECT $3 from pg_stat_slru where name = '$2'"
|
||
|
|
# this item is the same as the previous one, but we want to display the rate with the previous item and the sum with this one
|
||
|
|
# and zabbix doesn't allow the usage of the same userparameter for different items
|
||
|
|
UserParameter=pgsql.stats.pg_stat_slru_sum[*],sudo -u postgres psql -p $1 -Atc "SELECT $3 from pg_stat_slru where name = '$2'"
|
||
|
|
|
||
|
|
# pg-backup.service status
|
||
|
|
UserParameter=systemd.unit.pg-backup,sudo systemctl is-failed pg-backup.service
|