Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/postgresql?at=release/6.2
PostgreSQL by Zabbix agent
Overview
For Zabbix version: 6.2 and higher
Templates to monitor PostgreSQL by Zabbix.
This template was tested on PostgreSQL versions 9.6, 10 and 11 on Linux and Windows.
Setup
See Zabbix template operation for basic instructions.
-
Install Zabbix agent and create a read-only
zbx_monitor
user with proper access to your PostgreSQL server.For PostgreSQL version 10 and above:
CREATE USER zbx_monitor WITH PASSWORD '<PASSWORD>' INHERIT; GRANT pg_monitor TO zbx_monitor;
For PostgreSQL version 9.6 and below:
CREATE USER zbx_monitor WITH PASSWORD '<PASSWORD>'; GRANT SELECT ON pg_stat_database TO zbx_monitor; -- To collect WAL metrics, the user must have a `superuser` role. ALTER USER zbx_monitor WITH SUPERUSER;
-
Copy
postgresql/
to Zabbix agent home directory/var/lib/zabbix/
. Thepostgresql/
directory contains the files needed to obtain metrics from PostgreSQL. -
Copy
template_db_postgresql.conf
to Zabbix agent configuration directory/etc/zabbix/zabbix_agentd.d/
and restart Zabbix agent service. -
Edit
pg_hba.conf
to allow connections from Zabbix agent https://www.postgresql.org/docs/current/auth-pg-hba-conf.html.Add rows (for example):
host all zbx_monitor 127.0.0.1/32 trust host all zbx_monitor 0.0.0.0/0 md5 host all zbx_monitor ::0/0 md5
-
Import template file to Zabbix and link it to the target host
-
Set {$PG.HOST}, {$PG.PORT}, {$PG.USER}, {$PG.PASSWORD} and {$PG.DB} macros values.
Zabbix configuration
If PostgreSQL is installed from the PGDG
repository, then add the path to pg_isready
to the PATH
environment variable for zabbix
user.
Macros used
Name | Description | Default |
---|---|---|
{$PG.CACHE_HITRATIO.MIN.WARN} | - |
90 |
{$PG.CHECKPOINTS_REQ.MAX.WARN} | - |
5 |
{$PG.CONFLICTS.MAX.WARN} | - |
0 |
{$PG.CONN_IDLE_IN_TRANS.MAX.WARN} | - |
5 |
{$PG.CONN_TOTAL_PCT.MAX.WARN} | - |
90 |
{$PG.CONN_WAIT.MAX.WARN} | - |
0 |
{$PG.DB} | - |
postgres |
{$PG.DEADLOCKS.MAX.WARN} | - |
0 |
{$PG.FROZENXID_PCT_STOP.MIN.HIGH} | - |
75 |
{$PG.HOST} | - |
127.0.0.1 |
{$PG.LLD.FILTER.DBNAME} | - |
(.*) |
{$PG.LOCKS.MAX.WARN} | - |
100 |
{$PG.PASSWORD} | Please set user's password in this macro. |
`` |
{$PG.PING_TIME.MAX.WARN} | - |
1s |
{$PG.PORT} | - |
5432 |
{$PG.QUERY_ETIME.MAX.WARN} | - |
30 |
{$PG.REPL_LAG.MAX.WARN} | - |
10m |
{$PG.SLOW_QUERIES.MAX.WARN} | - |
5 |
{$PG.TRANS_ACTIVE.MAX.WARN} | - |
30s |
{$PG.TRANS_IDLE.MAX.WARN} | - |
30s |
{$PG.TRANS_WAIT.MAX.WARN} | - |
30s |
{$PG.USER} | - |
zbx_monitor |
Template links
There are no template links in this template.
Discovery rules
Name | Description | Type | Key and additional info |
---|---|---|---|
Database discovery | - |
ZABBIX_PASSIVE | pgsql.discovery.db["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] Filter: - {#DBNAME} MATCHES_REGEX |
Items collected
Group | Name | Description | Type | Key and additional info |
---|---|---|---|---|
PostgreSQL | Bgwriter: Buffers allocated per second | Number of buffers allocated |
DEPENDENT | pgsql.bgwriter.buffers_alloc.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Buffers written directly by a backend per second | Number of buffers written directly by a backend |
DEPENDENT | pgsql.bgwriter.buffers_backend.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Buffers backend fsync per second | Number 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 Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Buffers written during checkpoints per second | Number of buffers written during checkpoints |
DEPENDENT | pgsql.bgwriter.buffers_checkpoint.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Buffers written by the background writer per second | Number of buffers written by the background writer |
DEPENDENT | pgsql.bgwriter.buffers_clean.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Requested checkpoints per second | Number of requested checkpoints that have been performed |
DEPENDENT | pgsql.bgwriter.checkpoints_req.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Scheduled checkpoints per second | Number of scheduled checkpoints that have been performed |
DEPENDENT | pgsql.bgwriter.checkpoints_timed.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Checkpoint sync time | Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk |
DEPENDENT | pgsql.bgwriter.checkpoint_sync_time Preprocessing: - JSONPATH: - MULTIPLIER: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Checkpoint write time | Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk, in milliseconds |
DEPENDENT | pgsql.bgwriter.checkpoint_write_time Preprocessing: - JSONPATH: - MULTIPLIER: - CHANGE_PER_SECOND |
PostgreSQL | Bgwriter: Max written per second | Number of times the background writer stopped a cleaning scan because it had written too many buffers |
DEPENDENT | pgsql.bgwriter.maxwritten_clean.rate Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | Status: Cache hit ratio % | Cache hit ratio |
ZABBIX_PASSIVE | pgsql.cache.hit["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
PostgreSQL | Status: Config hash | PostgreSQL configuration hash |
ZABBIX_PASSIVE | pgsql.config.hash["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] Preprocessing: - DISCARD_UNCHANGED_HEARTBEAT: |
PostgreSQL | Connections sum: Active | Total number of connections executing a query |
DEPENDENT | pgsql.connections.sum.active Preprocessing: - JSONPATH: |
PostgreSQL | Connections sum: Idle | Total number of connections waiting for a new client command |
DEPENDENT | pgsql.connections.sum.idle Preprocessing: - JSONPATH: |
PostgreSQL | Connections sum: Idle in transaction | Total number of connections in a transaction state, but not executing a query |
DEPENDENT | pgsql.connections.sum.idle_in_transaction Preprocessing: - JSONPATH: |
PostgreSQL | Connections sum: Prepared | Total number of prepared transactions https://www.postgresql.org/docs/current/sql-prepare-transaction.html |
DEPENDENT | pgsql.connections.sum.prepared Preprocessing: - JSONPATH: |
PostgreSQL | Connections sum: Total | Total number of connections |
DEPENDENT | pgsql.connections.sum.total Preprocessing: - JSONPATH: |
PostgreSQL | Connections sum: Total % | Total number of connections in percentage |
DEPENDENT | pgsql.connections.sum.total_pct Preprocessing: - JSONPATH: |
PostgreSQL | Connections sum: Waiting | Total number of waiting connections https://www.postgresql.org/docs/current/monitoring-stats.html#WAIT-EVENT-TABLE |
DEPENDENT | pgsql.connections.sum.waiting Preprocessing: - JSONPATH: |
PostgreSQL | Status: Ping time | - |
ZABBIX_PASSIVE | pgsql.ping.time["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] Preprocessing: - REGEX: - MULTIPLIER: |
PostgreSQL | Status: Ping | - |
ZABBIX_PASSIVE | pgsql.ping["{$PG.HOST}","{$PG.PORT}"] Preprocessing: - JAVASCRIPT: - DISCARD_UNCHANGED_HEARTBEAT: |
PostgreSQL | Replication: standby count | Number of standby servers |
ZABBIX_PASSIVE | pgsql.replication.count["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
PostgreSQL | Replication: lag in seconds | Replication lag with Master in seconds |
ZABBIX_PASSIVE | pgsql.replication.lag.sec["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
PostgreSQL | Replication: recovery role | Replication role: 1 — recovery is still in progress (standby mode), 0 — master mode. |
ZABBIX_PASSIVE | pgsql.replication.recovery_role["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
PostgreSQL | Replication: status | Replication status: 0 — streaming is down, 1 — streaming is up, 2 — master mode |
ZABBIX_PASSIVE | pgsql.replication.status["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
PostgreSQL | Transactions: Max active transaction time | Current max active transaction time |
DEPENDENT | pgsql.transactions.active Preprocessing: - JSONPATH: |
PostgreSQL | Transactions: Max idle transaction time | Current max idle transaction time |
DEPENDENT | pgsql.transactions.idle Preprocessing: - JSONPATH: |
PostgreSQL | Transactions: Max prepared transaction time | Current max prepared transaction time |
DEPENDENT | pgsql.transactions.prepared Preprocessing: - JSONPATH: |
PostgreSQL | Transactions: Max waiting transaction time | Current max waiting transaction time |
DEPENDENT | pgsql.transactions.waiting Preprocessing: - JSONPATH: |
PostgreSQL | Status: Uptime | - |
ZABBIX_PASSIVE | pgsql.uptime["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
PostgreSQL | Status: Version | PostgreSQL version |
ZABBIX_PASSIVE | pgsql.version["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] Preprocessing: - DISCARD_UNCHANGED_HEARTBEAT: |
PostgreSQL | WAL: Segments count | Number of WAL segments |
DEPENDENT | pgsql.wal.count Preprocessing: - JSONPATH: |
PostgreSQL | WAL: Bytes written | WAL write in bytes |
DEPENDENT | pgsql.wal.write Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Database size | Database size |
ZABBIX_PASSIVE | pgsql.db.size["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}","{#DBNAME}"] |
PostgreSQL | DB {#DBNAME}: Blocks hit per second | Total number of times disk blocks were found already in the buffer cache, so that a read was not necessary |
DEPENDENT | pgsql.dbstat.blks_hit.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Disk blocks read per second | Total number of disk blocks read in this database |
DEPENDENT | pgsql.dbstat.blks_read.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Detected conflicts per second | Total number of queries canceled due to conflicts with recovery in this database |
DEPENDENT | pgsql.dbstat.conflicts.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Detected deadlocks per second | Total number of detected deadlocks in this database |
DEPENDENT | pgsql.dbstat.deadlocks.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Temp_bytes written per second | Total amount of data written to temporary files by queries in this database |
DEPENDENT | pgsql.dbstat.temp_bytes.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Temp_files created per second | Total number of temporary files created by queries in this database |
DEPENDENT | pgsql.dbstat.temp_files.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Tuples deleted per second | Total number of rows deleted by queries in this database |
DEPENDENT | pgsql.dbstat.tup_deleted.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Tuples fetched per second | Total number of rows fetched by queries in this database |
DEPENDENT | pgsql.dbstat.tup_fetched.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Tuples inserted per second | Total number of rows inserted by queries in this database |
DEPENDENT | pgsql.dbstat.tup_inserted.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Tuples returned per second | Total number of rows updated by queries in this database |
DEPENDENT | pgsql.dbstat.tup_returned.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Tuples updated per second | Total number of rows updated by queries in this database |
DEPENDENT | pgsql.dbstat.tup_updated.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Commits per second | Number of transactions in this database that have been committed |
DEPENDENT | pgsql.dbstat.xact_commit.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Rollbacks per second | Total number of transactions in this database that have been rolled back |
DEPENDENT | pgsql.dbstat.xact_rollback.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Frozen XID before avtovacuum % | reventing Transaction ID Wraparound Failures https://www.postgresql.org/docs/current/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND |
DEPENDENT | pgsql.frozenxid.prc_before_av["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Frozen XID before stop % | Preventing Transaction ID Wraparound Failures https://www.postgresql.org/docs/current/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND |
DEPENDENT | pgsql.frozenxid.prc_before_stop["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Locks total | Total number of locks in the database |
DEPENDENT | pgsql.locks.total["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries slow maintenance count | Slow maintenance query count |
DEPENDENT | pgsql.queries.mro.slow_count["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries max maintenance time | Max maintenance query time |
DEPENDENT | pgsql.queries.mro.time_max["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries sum maintenance time | Sum maintenance query time |
DEPENDENT | pgsql.queries.mro.time_sum["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries slow query count | Slow query count |
DEPENDENT | pgsql.queries.query.slow_count["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries max query time | Max query time |
DEPENDENT | pgsql.queries.query.time_max["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries sum query time | Sum query time |
DEPENDENT | pgsql.queries.query.time_sum["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries slow transaction count | Slow transaction query count |
DEPENDENT | pgsql.queries.tx.slow_count["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries max transaction time | Max transaction query time |
DEPENDENT | pgsql.queries.tx.time_max["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Queries sum transaction time | Sum transaction query time |
DEPENDENT | pgsql.queries.tx.time_sum["{#DBNAME}"] Preprocessing: - JSONPATH: |
PostgreSQL | DB {#DBNAME}: Index scans per second | Number of index scans in the database |
DEPENDENT | pgsql.scans.idx.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
PostgreSQL | DB {#DBNAME}: Sequential scans per second | Number of sequential scans in the database |
DEPENDENT | pgsql.scans.seq.rate["{#DBNAME}"] Preprocessing: - JSONPATH: - CHANGE_PER_SECOND |
Zabbix raw items | PostgreSQL: Get bgwriter | Statistics about the background writer process's activity |
ZABBIX_PASSIVE | pgsql.bgwriter["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
Zabbix raw items | PostgreSQL: Get connections sum | Collect all metrics from pg_stat_activity https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW |
ZABBIX_PASSIVE | pgsql.connections.sum["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
Zabbix raw items | PostgreSQL: Get dbstat | Collect all metrics from pg_stat_database per database https://www.postgresql.org/docs/current/monitoring-stats.html#PG-STAT-DATABASE-VIEW |
ZABBIX_PASSIVE | pgsql.dbstat["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
Zabbix raw items | PostgreSQL: Get locks | Collect all metrics from pg_locks per database https://www.postgresql.org/docs/current/explicit-locking.html#LOCKING-TABLES |
ZABBIX_PASSIVE | pgsql.locks["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
Zabbix raw items | PostgreSQL: Get queries | Collect all metrics by query execution time |
ZABBIX_PASSIVE | pgsql.queries["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}","{$PG.QUERY_ETIME.MAX.WARN}"] |
Zabbix raw items | PostgreSQL: Get transactions | Collect metrics by transaction execution time |
ZABBIX_PASSIVE | pgsql.transactions["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
Zabbix raw items | PostgreSQL: Get WAL | Master item to collect WAL metrics |
ZABBIX_PASSIVE | pgsql.wal.stat["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"] |
Zabbix raw items | DB {#DBNAME}: Get frozen XID | - |
ZABBIX_PASSIVE | pgsql.frozenxid["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{#DBNAME}"] |
Zabbix raw items | DB {#DBNAME}: Get scans | Number of scans done for table/index in the database |
ZABBIX_PASSIVE | pgsql.scans["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{#DBNAME}"] |
Triggers
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
PostgreSQL: Required checkpoints occurs too frequently | Checkpoints are points in the sequence of transactions at which it is guaranteed that the heap and index data files have been updated with all information written before that checkpoint. At checkpoint time, all dirty data pages are flushed to disk and a special checkpoint record is written to the log file. https://www.postgresql.org/docs/current/wal-configuration.html |
last(/PostgreSQL by Zabbix agent/pgsql.bgwriter.checkpoints_req.rate) > {$PG.CHECKPOINTS_REQ.MAX.WARN} |
AVERAGE | |
PostgreSQL: Cache hit ratio too low | - |
max(/PostgreSQL by Zabbix agent/pgsql.cache.hit["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],5m) < {$PG.CACHE_HITRATIO.MIN.WARN} |
WARNING | |
PostgreSQL: Configuration has changed | - |
last(/PostgreSQL by Zabbix agent/pgsql.config.hash["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],#1)<>last(/PostgreSQL by Zabbix agent/pgsql.config.hash["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],#2) and length(last(/PostgreSQL by Zabbix agent/pgsql.config.hash["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"]))>0 |
INFO | |
PostgreSQL: Total number of connections is too high | - |
min(/PostgreSQL by Zabbix agent/pgsql.connections.sum.total_pct,5m) > {$PG.CONN_TOTAL_PCT.MAX.WARN} |
AVERAGE | |
PostgreSQL: Response too long | - |
min(/PostgreSQL by Zabbix agent/pgsql.ping.time["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],5m) > {$PG.PING_TIME.MAX.WARN} |
AVERAGE | Depends on: - PostgreSQL: Service is down |
PostgreSQL: Service is down | - |
last(/PostgreSQL by Zabbix agent/pgsql.ping["{$PG.HOST}","{$PG.PORT}"]) = 0 |
HIGH | |
PostgreSQL: Streaming lag with {#MASTER} is too high | - |
min(/PostgreSQL by Zabbix agent/pgsql.replication.lag.sec["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],5m) > {$PG.REPL_LAG.MAX.WARN} |
AVERAGE | |
PostgreSQL: Replication is down | - |
max(/PostgreSQL by Zabbix agent/pgsql.replication.status["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],5m)=0 |
AVERAGE | |
PostgreSQL: Service has been restarted | PostgreSQL uptime is less than 10 minutes |
last(/PostgreSQL by Zabbix agent/pgsql.uptime["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"]) < 10m |
INFO | |
PostgreSQL: Version has changed | - |
last(/PostgreSQL by Zabbix agent/pgsql.version["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],#1)<>last(/PostgreSQL by Zabbix agent/pgsql.version["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],#2) and length(last(/PostgreSQL by Zabbix agent/pgsql.version["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"]))>0 |
INFO | |
DB {#DBNAME}: Too many recovery conflicts | The 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-CONFLICT |
min(/PostgreSQL by Zabbix agent/pgsql.dbstat.conflicts.rate["{#DBNAME}"],5m) > {$PG.CONFLICTS.MAX.WARN:"{#DBNAME}"} |
AVERAGE | |
DB {#DBNAME}: Deadlock occurred | - |
min(/PostgreSQL by Zabbix agent/pgsql.dbstat.deadlocks.rate["{#DBNAME}"],5m) > {$PG.DEADLOCKS.MAX.WARN:"{#DBNAME}"} |
HIGH | |
DB {#DBNAME}: VACUUM FREEZE is required to prevent wraparound | Preventing Transaction ID Wraparound Failures https://www.postgresql.org/docs/current/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND |
last(/PostgreSQL by Zabbix agent/pgsql.frozenxid.prc_before_stop["{#DBNAME}"])<{$PG.FROZENXID_PCT_STOP.MIN.HIGH:"{#DBNAME}"} |
AVERAGE | |
DB {#DBNAME}: Number of locks is too high | - |
min(/PostgreSQL by Zabbix agent/pgsql.locks.total["{#DBNAME}"],5m)>{$PG.LOCKS.MAX.WARN:"{#DBNAME}"} |
WARNING | |
DB {#DBNAME}: Too many slow queries | - |
min(/PostgreSQL by Zabbix agent/pgsql.queries.query.slow_count["{#DBNAME}"],5m)>{$PG.SLOW_QUERIES.MAX.WARN:"{#DBNAME}"} |
WARNING | |
PostgreSQL: Failed to get items | Zabbix has not received data for items for the last 30 minutes |
nodata(/PostgreSQL by Zabbix agent/pgsql.bgwriter["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.PASSWORD}","{$PG.DB}"],30m) = 1 |
WARNING | Depends on: - PostgreSQL: Service is down |
Feedback
Please report any issues with the template at https://support.zabbix.com
You can also provide feedback, discuss the template or ask for help with it at ZABBIX forums.