From 3c39d8aa9751bb49382884b19cc904b10fb0c856 Mon Sep 17 00:00:00 2001 From: James Campbell Date: Thu, 3 Jul 2025 01:13:58 -0400 Subject: [PATCH] Remove CIDR prefix from replication id --- sample-config/pgmon-metrics.yml | 44 ++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/sample-config/pgmon-metrics.yml b/sample-config/pgmon-metrics.yml index 5bdb6d5..ac905be 100644 --- a/sample-config/pgmon-metrics.yml +++ b/sample-config/pgmon-metrics.yml @@ -8,14 +8,21 @@ metrics: 0: > SELECT datname AS dbname FROM pg_database + + # Note: If the user lacks sufficient privileges, these fields will be NULL. + # The WHERE clause is intended to prevent Zabbix from discovering a + # connection it cannot monitor. Ideally this would generate an error + # instead. discover_rep: type: set query: 0: > - SELECT client_addr || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') AS repid, + SELECT host(client_addr) || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') AS repid, client_addr, state FROM pg_stat_replication + WHERE state IS NOT NULL + discover_slots: type: set query: @@ -36,6 +43,7 @@ metrics: active FROM pg_replication_slots + ## # cluster-wide metrics ## @@ -85,7 +93,6 @@ metrics: FROM pg_stat_bgwriter bg CROSS JOIN pg_stat_checkpointer cp - io_per_backend: type: set query: @@ -108,6 +115,7 @@ metrics: FROM pg_stat_io GROUP BY backend_type + ## # Per-database metrics ## @@ -210,14 +218,20 @@ metrics: # FROM pg_class c # CROSS JOIN LATERAL pg_sequence_parameters(c.oid) AS s # WHERE c.relkind = 'S' - 100000: > - SELECT COALESCE(MAX(pg_sequence_last_value(c.oid)::float / sp.maximum_value), 0) AS max_usage - FROM pg_class c - CROSS JOIN LATERAL pg_sequence_parameters(c.oid) AS sp - WHERE c.relkind = 'S' + 100000: SELECT COALESCE(MAX(last_value::float / max_value), 0) AS max_usage FROM pg_sequences; test_args: dbname: postgres + sequence_visibility: + type: row + query: + 100000: > + SELECT COUNT(*) FILTER (WHERE has_sequence_privilege(c.oid, 'SELECT,USAGE'::text)) AS readable_sequences, + COUNT(*) AS total_sequences + FROM pg_class AS c + WHERE relkind = 'S'; + + ## # Per-replication metrics ## @@ -237,7 +251,7 @@ metrics: NULL AS replay_lag, sync_state FROM pg_stat_replication - WHERE client_addr || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') = %(repid)s + WHERE host(client_addr) || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') = %(repid)s 100000: > SELECT pid, usename, EXTRACT(EPOCH FROM backend_start)::integer AS backend_start, @@ -250,7 +264,8 @@ metrics: COALESCE(EXTRACT(EPOCH FROM flush_lag), 0)::integer AS flush_lag, COALESCE(EXTRACT(EPOCH FROM replay_lag), 0)::integer AS replay_lag, sync_state - FROM pg_stat_replication WHERE client_addr || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') = %(repid)s + FROM pg_stat_replication + WHERE host(client_addr) || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') = %(repid)s test_args: repid: 127.0.0.1_test_rep @@ -264,24 +279,25 @@ metrics: 90400: > SELECT NULL as active_pid, xmin, - pg_xlog_location_diff(pg_current_xlog_location(), restart_lsn) AS restart_bytes, + pg_xlog_location_diff(pg_current_xlog_location(), restart_lsn)::bigint AS restart_bytes, NULL AS confirmed_flush_bytes FROM pg_replication_slots WHERE slot_name = %(slot)s 90600: > SELECT active_pid, xmin, - pg_xlog_location_diff(pg_current_xlog_location(), restart_lsn) AS restart_bytes, - pg_xlog_location_diff(pg_current_xlog_location(), confirmed_flush_lsn) AS confirmed_flush_bytes + pg_xlog_location_diff(pg_current_xlog_location(), restart_lsn)::bigint AS restart_bytes, + pg_xlog_location_diff(pg_current_xlog_location(), confirmed_flush_lsn)::bigint AS confirmed_flush_bytes FROM pg_replication_slots WHERE slot_name = %(slot)s 100000: > SELECT active_pid, xmin, - pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS restart_bytes, - pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS confirmed_flush_bytes + pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)::bigint AS restart_bytes, + pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)::bigint AS confirmed_flush_bytes FROM pg_replication_slots WHERE slot_name = %(slot)s test_args: slot: test_slot + ## # Debugging ##