From b934a30124368c9f2e31faa7c9760ff6c5211f4c Mon Sep 17 00:00:00 2001 From: James Campbell Date: Sat, 28 Jun 2025 00:30:03 -0400 Subject: [PATCH] Add pg_stat_io query * Add a query for pg_stat_io metrics grouped by backend type * Switch some unsupported values from 0 to NULL to better reflect their nonexistence --- sample-config/pgmon-metrics.yml | 43 ++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/sample-config/pgmon-metrics.yml b/sample-config/pgmon-metrics.yml index 97c8209..00f7e41 100644 --- a/sample-config/pgmon-metrics.yml +++ b/sample-config/pgmon-metrics.yml @@ -49,7 +49,7 @@ metrics: query: 0: > SELECT max(age(datfrozenxid)) AS xid_age, - 0 AS mxid_age + NULL AS mxid_age FROM pg_database 90600: > SELECT max(age(datfrozenxid)) AS xid_age, @@ -86,6 +86,28 @@ metrics: CROSS JOIN pg_stat_checkpointer cp + io_per_backend: + type: set + query: + 160000: > + SELECT backend_type, + COALESCE(SUM(reads), 0) AS reads, + COALESCE(SUM(read_time), 0) AS read_time, + COALESCE(SUM(writes), 0) AS writes, + COALESCE(SUM(write_time), 0) AS write_time, + COALESCE(SUM(writebacks), 0) AS writebacks, + COALESCE(SUM(writeback_time), 0) AS writeback_time, + COALESCE(SUM(extends), 0) AS extends, + COALESCE(SUM(extend_time), 0) AS extend_time, + COALESCE(SUM(op_bytes), 0) AS op_bytes, + COALESCE(SUM(hits), 0) AS hits, + COALESCE(SUM(evictions), 0) AS evictions, + COALESCE(SUM(reuses), 0) AS reuses, + COALESCE(SUM(fsyncs), 0) AS fsyncs, + COALESCE(SUM(fsync_time), 0) AS fsync_time + FROM pg_stat_io + GROUP BY backend_type + ## # Per-database metrics ## @@ -107,16 +129,16 @@ metrics: temp_files, temp_bytes, deadlocks, - 0 AS checksum_failures, + NULL AS checksum_failures, blk_read_time, blk_write_time, - 0 AS session_time, - 0 AS active_time, - 0 AS idle_in_transaction_time, - 0 AS sessions, - 0 AS sessions_abandoned, - 0 AS sessions_fatal, - 0 AS sessions_killed, + NULL AS session_time, + NULL AS active_time, + NULL AS idle_in_transaction_time, + NULL AS sessions, + NULL AS sessions_abandoned, + NULL AS sessions_fatal, + NULL AS sessions_killed, extract('epoch' from stats_reset)::float AS stats_reset FROM pg_stat_database WHERE datname = %(dbname)s 140000: > @@ -134,8 +156,7 @@ metrics: temp_files, temp_bytes, deadlocks, - COALESCE(checksum_failures, - 0) AS checksum_failures, + COALESCE(checksum_failures, 0) AS checksum_failures, blk_read_time, blk_write_time, session_time,