Перейти к основному содержимому

PostgreSQL by Zabbix agent 2

Macros used

NameValue
{$PG.CONFLICTS.MAX.WARN}0
{$PG.CONN_TOTAL_PCT.MAX.WARN}90
{$PG.DATABASE}postgres
{$PG.DEADLOCKS.MAX.WARN}0
{$PG.LLD.FILTER.APPLICATION}(.+)
{$PG.LLD.FILTER.DBNAME}(.+)
{$PG.PASSWORD}postgres
{$PG.QUERY_ETIME.MAX.WARN}30
{$PG.SLOW_QUERIES.MAX.WARN}5
{$PG.URI}tcp://localhost:5432
{$PG.USER}postgres

Items collected

NameDescriptionTypeIntervalKey and additional info
Archive: Count of archive filesCollect all metrics from pg_stat_activity https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-ARCHIVER-VIEWDEPENDENT

-

pgsql.archive.count_archived_files
Archive: Count of files in archive_status need to archive

-

DEPENDENT

-

pgsql.archive.count_files_to_archive
Archive: Count of attempts to archive filesCollect all metrics from pg_stat_activity https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-ARCHIVER-VIEWDEPENDENT

-

pgsql.archive.failed_trying_to_archive
Archive: Count of files need to archiveSize of files to archiveDEPENDENT

-

pgsql.archive.size_files_to_archive
PostgreSQL: Get archiveCollect archive status metrics

-

-

pgsql.archive["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Autovacuum: Count of autovacuum workersNumber of autovacuum workers.

-

-

pgsql.autovacuum.count["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Bgwriter: Buffers allocatedNumber of buffers allocatedDEPENDENT

-

pgsql.bgwriter.buffers_alloc.rate
Bgwriter: Buffers written directly by a backendNumber of buffers written directly by a backendDEPENDENT

-

pgsql.bgwriter.buffers_backend.rate
Bgwriter: Times a backend execute its own fsyncNumber of times a backend had to execute its own fsync call (normally the background writer handles those even when the backend does its own write)DEPENDENT

-

pgsql.bgwriter.buffers_backend_fsync.rate
Checkpoint: Buffers checkpoints writtenNumber of buffers written during checkpointsDEPENDENT

-

pgsql.bgwriter.buffers_checkpoint.rate
Checkpoint: Buffers background writtenNumber of buffers written by the background writerDEPENDENT

-

pgsql.bgwriter.buffers_clean.rate
Checkpoint: RequestedNumber of requested checkpoints that have been performedDEPENDENT

-

pgsql.bgwriter.checkpoints_req.rate
Checkpoint: By timeoutNumber of scheduled checkpoints that have been performedDEPENDENT

-

pgsql.bgwriter.checkpoints_timed.rate
Checkpoint: Checkpoint sync timeTotal amount of time that has been spent in the portion of checkpoint processing where files are synchronized to diskDEPENDENT

-

pgsql.bgwriter.checkpoint_sync_time.rate
Checkpoint: Checkpoint write timeTotal amount of time that has been spent in the portion of checkpoint processing where files are written to disk, in millisecondsDEPENDENT

-

pgsql.bgwriter.checkpoint_write_time.rate
Bgwriter: Number of bgwriter stoppedNumber of times the background writer stopped a cleaning scan because it had written too many buffersDEPENDENT

-

pgsql.bgwriter.maxwritten_clean.rate
PostgreSQL: Get bgwriterhttps://www.postgresql.org/docs/12/monitoring-stats.html#PG-STAT-BGWRITER-VIEW

-

-

pgsql.bgwriter["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Cache hit

-

CALCULATED

-

pgsql.cache.hit["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Connections sum: ActiveTotal number of connections executing a queryDEPENDENT

-

pgsql.connections.active
Connections sum: DisabledTotal number of disabled connectionsDEPENDENT

-

pgsql.connections.disabled
Connections sum: Fastpath function callTotal number of connections executing a fast-path functionDEPENDENT

-

pgsql.connections.fastpath_function_call
Connections sum: IdleTotal number of connections waiting for a new client commandDEPENDENT

-

pgsql.connections.idle
Connections sum: Idle in transactionTotal number of connections in a transaction state, but not executing a queryDEPENDENT

-

pgsql.connections.idle_in_transaction
Connections sum: Idle in transaction (aborted)Total number of connections in a transaction state, but not executing a query and one of the statements in the transaction caused an error.DEPENDENT

-

pgsql.connections.idle_in_transaction_aborted
Connections sum: PreparedTotal number of prepared transactions https://www.postgresql.org/docs/current/sql-prepare-transaction.htmlDEPENDENT

-

pgsql.connections.prepared
Connections sum: TotalTotal number of connectionsDEPENDENT

-

pgsql.connections.total
Connections sum: Total %Total number of connections in percentageDEPENDENT

-

pgsql.connections.total_pct
Connections sum: WaitingTotal number of waiting connections https://www.postgresql.org/docs/current/monitoring-stats.html#WAIT-EVENT-TABLEDEPENDENT

-

pgsql.connections.waiting
PostgreSQL: Get connectionsCollect all metrics from pg_stat_activity https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW

-

-

pgsql.connections["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Custom queriesExecute custom queries from file *.sql (check for option Plugins.Postgres.CustomQueriesPath at agent configuration)

-

-

pgsql.custom.query["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DATABASE}",""]
Dbstat: Hit blocks readNumber of times disk blocks were found already in the buffer cacheDEPENDENT

-

pgsql.dbstat.sum.blks_hit.rate
Dbstat: Disk blocks readNumber of disk blocks readDEPENDENT

-

pgsql.dbstat.sum.blks_read.rate
Dbstat: Blocks read timeTime spent reading data file blocks by backends, in millisecondsDEPENDENT

-

pgsql.dbstat.sum.blk_read_time
Dbstat: Blocks write timeTime spent writing data file blocks by backends, in millisecondsDEPENDENT

-

pgsql.dbstat.sum.blk_write_time
Dbstat: Checksum failuresNumber of data page checksum failures detected (or on a shared object), or NULL if data checksums are not enabled. This metric included in PostgreSQL 12DEPENDENT

-

pgsql.dbstat.sum.checksum_failures.rate
Dbstat: ConflictsNumber of queries canceled due to conflicts with recovery. (Conflicts occur only on standby servers; see pg_stat_database_conflicts for details.)DEPENDENT

-

pgsql.dbstat.sum.conflicts.rate
Dbstat: DeadlocksNumber of deadlocks detectedDEPENDENT

-

pgsql.dbstat.sum.deadlocks.rate
Dbstat: Backends connectedNumber of connected backendsDEPENDENT

-

pgsql.dbstat.sum.numbackends
Dbstat: Number temp bytesTotal amount of data written to temporary files by queriesDEPENDENT

-

pgsql.dbstat.sum.temp_bytes.rate
Dbstat: Number temp bytesNumber of temporary files created by queriesDEPENDENT

-

pgsql.dbstat.sum.temp_files.rate
Dbstat: Rows deletedNumber of rows deleted by queriesDEPENDENT

-

pgsql.dbstat.sum.tup_deleted.rate
Dbstat: Rows fetchedNumber of rows fetched by queriesDEPENDENT

-

pgsql.dbstat.sum.tup_fetched.rate
Dbstat: Rows insertedNumber of rows inserted by queriesDEPENDENT

-

pgsql.dbstat.sum.tup_inserted.rate
Dbstat: Rows returnedNumber of rows returned by queriesDEPENDENT

-

pgsql.dbstat.sum.tup_returned.rate
Dbstat: Rows updatedNumber of rows updated by queriesDEPENDENT

-

pgsql.dbstat.sum.tup_updated.rate
Dbstat: Committed transactionsNumber of transactions that have been committedDEPENDENT

-

pgsql.dbstat.sum.xact_commit.rate
Dbstat: Roll backed transactionsNumber of transactions that have been rolled backDEPENDENT

-

pgsql.dbstat.sum.xact_rollback.rate
PostgreSQL: Get dbstat sumCollect all metrics from pg_stat_database per database https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-DATABASE-VIEW

-

-

pgsql.dbstat.sum["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Get dbstatCollect all metrics from pg_stat_database per database https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-DATABASE-VIEW

-

-

pgsql.dbstat["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Get locksCollect all metrics from pg_locks per database https://www.postgresql.org/docs/current/explicit-locking.html#LOCKING-TABLES

-

-

pgsql.locks["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Age of oldest xidAge of oldest xid.

-

-

pgsql.oldest.xid["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Ping

-

-

-

pgsql.ping["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Get queriesCollect all metrics by query execution time

-

-

pgsql.queries["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DATABASE}","{$PG.QUERY_ETIME.MAX.WARN}"]
Replication: Standby countNumber of standby servers

-

-

pgsql.replication.count["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Replication: Lag in bytesReplication lag with Master in byte.

-

-

pgsql.replication.lag.b["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Replication: Lag in secondsReplication lag with Master in seconds.

-

-

pgsql.replication.lag.sec["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Get replicationCollect metrics from the pg_stat_replication, which contains information about the WAL sender process, showing statistics about replication to that sender's connected standby server.

-

-

pgsql.replication.process["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Replication: Recovery roleReplication role: 1 — recovery is still in progress (standby mode), 0 — master mode.

-

-

pgsql.replication.recovery_role["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
Replication: StatusReplication status: 0 — streaming is down, 1 — streaming is up, 2 — master mode

-

-

pgsql.replication.status["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
PostgreSQL: Uptime

-

-

-

pgsql.uptime["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
WAL: Segments countNumber of WAL segmentsDEPENDENT

-

pgsql.wal.count
WAL: Bytes receivedWAL receive in bytesDEPENDENT

-

pgsql.wal.receive
PostgreSQL: Get WALCollect WAL metrics

-

5mpgsql.wal.stat["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
WAL: Bytes writtenWAL write in bytesDEPENDENT

-

pgsql.wal.write

Triggers

NameDescriptionExpressionPriorityDependencies
Connections sum: Total number of connections is too high

-

min(/PostgreSQL by Zabbix agent 2/pgsql.connections.total_pct,5m) > {$PG.CONN_TOTAL_PCT.MAX.WARN}AVERAGE ⚠Connections sum: Total %
PostgreSQL: Oldest xid is too big

-

last(/PostgreSQL by Zabbix agent 2/pgsql.oldest.xid["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]) > 18000000AVERAGE ⚠PostgreSQL: Age of oldest xid
PostgreSQL: Service is down

-

last(/PostgreSQL by Zabbix agent 2/pgsql.ping["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"])=0HIGH ⛔PostgreSQL: Ping
PostgreSQL: Service has been restarted

-

last(/PostgreSQL by Zabbix agent 2/pgsql.uptime["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]) < 600AVERAGE ⚠PostgreSQL: Uptime

Discovery rule №1

NameDescriptionTypeIntervalKey and additional info
Database discovery

-

-

1hpgsql.db.discovery["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]

Item prototypes

NameDescriptionTypeIntervalKey and additional info
DB {#DBNAME}: Database ageDatabase age

-

10mpgsql.db.age["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}","{#DBNAME}"]
DB {#DBNAME}: Get bloating tablesNumber of bloating tables

-

-

pgsql.db.bloating_tables["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}","{#DBNAME}"]
DB {#DBNAME}: Database sizeDatabase size

-

5mpgsql.db.size["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}","{#DBNAME}"]
DB {#DBNAME}: Blocks hit per secondTotal number of times disk blocks were found already in the buffer cache, so that a read was not necessaryDEPENDENT

-

pgsql.dbstat.blks_hit.rate["{#DBNAME}"]
DB {#DBNAME}: Disk blocks read per secondTotal number of disk blocks read in this databaseDEPENDENT

-

pgsql.dbstat.blks_read.rate["{#DBNAME}"]
DB {#DBNAME}: Disk blocks read timeTime spent reading data file blocks by backends, in millisecondsDEPENDENT

-

pgsql.dbstat.blk_read_time.rate["{#DBNAME}"]
DB {#DBNAME}: Disk blocks write timeTime spent writing data file blocks by backends, in millisecondsDEPENDENT

-

pgsql.dbstat.blk_write_time.rate["{#DBNAME}"]
DB {#DBNAME}: Checksum failuresNumber of data page checksum failures detected in this databaseDEPENDENT

-

pgsql.dbstat.checksum_failures.rate["{#DBNAME}"]
DB {#DBNAME}: Detected conflicts per secondTotal number of queries canceled due to conflicts with recovery in this databaseDEPENDENT

-

pgsql.dbstat.conflicts.rate["{#DBNAME}"]
DB {#DBNAME}: Detected deadlocks per secondTotal number of detected deadlocks in this databaseDEPENDENT

-

pgsql.dbstat.deadlocks.rate["{#DBNAME}"]
DB {#DBNAME}: Backends connectedNumber of backends currently connected to this databaseDEPENDENT

-

pgsql.dbstat.numbackends["{#DBNAME}"]
DB {#DBNAME}: Temp_bytes written per secondTotal amount of data written to temporary files by queries in this databaseDEPENDENT

-

pgsql.dbstat.temp_bytes.rate["{#DBNAME}"]
DB {#DBNAME}: Temp_files created per secondTotal number of temporary files created by queries in this databaseDEPENDENT

-

pgsql.dbstat.temp_files.rate["{#DBNAME}"]
DB {#DBNAME}: Tuples deleted per secondTotal number of rows deleted by queries in this databaseDEPENDENT

-

pgsql.dbstat.tup_deleted.rate["{#DBNAME}"]
DB {#DBNAME}: Tuples fetched per secondTotal number of rows fetched by queries in this databaseDEPENDENT

-

pgsql.dbstat.tup_fetched.rate["{#DBNAME}"]
DB {#DBNAME}: Tuples inserted per secondTotal number of rows inserted by queries in this databaseDEPENDENT

-

pgsql.dbstat.tup_inserted.rate["{#DBNAME}"]
DB {#DBNAME}: Tuples returned per secondNumber of rows returned by queries in this databaseDEPENDENT

-

pgsql.dbstat.tup_returned.rate["{#DBNAME}"]
DB {#DBNAME}: Tuples updated per secondTotal number of rows updated by queries in this databaseDEPENDENT

-

pgsql.dbstat.tup_updated.rate["{#DBNAME}"]
DB {#DBNAME}: Commits per secondNumber of transactions in this database that have been committedDEPENDENT

-

pgsql.dbstat.xact_commit.rate["{#DBNAME}"]
DB {#DBNAME}: Rollbacks per secondTotal number of transactions in this database that have been rolled backDEPENDENT

-

pgsql.dbstat.xact_rollback.rate["{#DBNAME}"]
DB {#DBNAME}: Num of accessexclusive locksNumber of accessexclusive locks for each databaseDEPENDENT

-

pgsql.locks.accessexclusive["{#DBNAME}"]
DB {#DBNAME}: Num of accessshare locksNumber of accessshare locks for each databaseDEPENDENT

-

pgsql.locks.accessshare["{#DBNAME}"]
DB {#DBNAME}: Num of exclusive locksNumber of exclusive locks for each databaseDEPENDENT

-

pgsql.locks.exclusive["{#DBNAME}"]
DB {#DBNAME}: Num of rowexclusive locksNumber of rowexclusive locks for each databaseDEPENDENT

-

pgsql.locks.rowexclusive["{#DBNAME}"]
DB {#DBNAME}: Num of rowshare locksNumber of rowshare locks for each databaseDEPENDENT

-

pgsql.locks.rowshare["{#DBNAME}"]
DB {#DBNAME}: Num of sharerowexclusive locksNumber of total sharerowexclusive for each databaseDEPENDENT

-

pgsql.locks.sharerowexclusive["{#DBNAME}"]
DB {#DBNAME}: Num of shareupdateexclusive locksNumber of shareupdateexclusive locks for each databaseDEPENDENT

-

pgsql.locks.shareupdateexclusive["{#DBNAME}"]
DB {#DBNAME}: Num of share locksNumber of share locks for each databaseDEPENDENT

-

pgsql.locks.share["{#DBNAME}"]
DB {#DBNAME}: Num of total locksNumber of total locks for each databaseDEPENDENT

-

pgsql.locks.total["{#DBNAME}"]
DB {#DBNAME}: Queries slow maintenance countSlow maintenance query countDEPENDENT

-

pgsql.queries.mro.slow_count["{#DBNAME}"]
DB {#DBNAME}: Queries max maintenance timeMax maintenance query timeDEPENDENT

-

pgsql.queries.mro.time_max["{#DBNAME}"]
DB {#DBNAME}: Queries sum maintenance timeSum maintenance query timeDEPENDENT

-

pgsql.queries.mro.time_sum["{#DBNAME}"]
DB {#DBNAME}: Queries slow query countSlow query countDEPENDENT

-

pgsql.queries.query.slow_count["{#DBNAME}"]
DB {#DBNAME}: Queries max query timeMax query timeDEPENDENT

-

pgsql.queries.query.time_max["{#DBNAME}"]
DB {#DBNAME}: Queries sum query timeSum query timeDEPENDENT

-

pgsql.queries.query.time_sum["{#DBNAME}"]
DB {#DBNAME}: Queries slow transaction countSlow transaction query countDEPENDENT

-

pgsql.queries.tx.slow_count["{#DBNAME}"]
DB {#DBNAME}: Queries max transaction timeMax transaction query timeDEPENDENT

-

pgsql.queries.tx.time_max["{#DBNAME}"]
DB {#DBNAME}: Queries sum transaction timeSum transaction query timeDEPENDENT

-

pgsql.queries.tx.time_sum["{#DBNAME}"]

Trigger prototypes

NameDescriptionExpressionPriorityDependencies
DB {#DBNAME}: Too many recovery conflictsThe primary and standby servers are in many ways loosely connected. Actions on the primary will have an effect on the standby. As a result, there is potential for negative interactions or conflicts between them. https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-CONFLICTmin(/PostgreSQL by Zabbix agent 2/pgsql.dbstat.conflicts.rate["{#DBNAME}"],5m) > {$PG.CONFLICTS.MAX.WARN:"{#DBNAME}"}AVERAGE ⚠DB {#DBNAME}: Detected conflicts per second
DB {#DBNAME}: Deadlock occurred

-

min(/PostgreSQL by Zabbix agent 2/pgsql.dbstat.deadlocks.rate["{#DBNAME}"],5m) > {$PG.DEADLOCKS.MAX.WARN:"{#DBNAME}"}HIGH ⛔DB {#DBNAME}: Detected deadlocks per second
DB {#DBNAME}: Too many slow queries

-

min(/PostgreSQL by Zabbix agent 2/pgsql.queries.query.slow_count["{#DBNAME}"],5m)>{$PG.SLOW_QUERIES.MAX.WARN:"{#DBNAME}"}WARNING 📢DB {#DBNAME}: Queries slow query count

Discovery rule №2

NameDescriptionTypeIntervalKey and additional info
Replication Discovery

-

-

15mpgsql.replication.process.discovery["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]

Item prototypes

NameDescriptionTypeIntervalKey and additional info
Application {#APPLICATION_NAME}: Replication flush lag

-

DEPENDENT

-

pgsql.replication.process.flush_lag["{#APPLICATION_NAME}"]
Application {#APPLICATION_NAME}: Replication replay lag

-

DEPENDENT

-

pgsql.replication.process.replay_lag["{#APPLICATION_NAME}"]
Application {#APPLICATION_NAME}: Replication write lag

-

DEPENDENT

-

pgsql.replication.process.write_lag["{#APPLICATION_NAME}"]