Skip to content

Commit

Permalink
Add compute_logical_snapshots_bytes metric
Browse files Browse the repository at this point in the history
This metric exposes the size of all non-temporary logical snapshot
files.

Signed-off-by: Tristan Partin <[email protected]>
  • Loading branch information
tristan957 committed Dec 3, 2024
1 parent bbe4dfa commit f0f7ddc
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions compute/etc/neon_collector.jsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import 'sql_exporter/compute_backpressure_throttling_seconds.libsonnet',
import 'sql_exporter/compute_current_lsn.libsonnet',
import 'sql_exporter/compute_logical_snapshot_files.libsonnet',
import 'sql_exporter/compute_logical_snapshots_bytes.libsonnet',
import 'sql_exporter/compute_max_connections.libsonnet',
import 'sql_exporter/compute_receive_lsn.libsonnet',
import 'sql_exporter/compute_subscriptions_count.libsonnet',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
SELECT
(SELECT current_setting('neon.timeline_id')) AS timeline_id,
-- Postgres creates temporary snapshot files of the form %X-%X.snap.%d.tmp.
-- These temporary snapshot files are renamed to the actual snapshot files
-- after they are completely built. We only WAL-log the completely built
-- snapshot files
(SELECT COALESCE(sum(size), 0) FROM pg_ls_logicalsnapdir() WHERE name LIKE '%.snap') AS logical_snapshots_bytes;
17 changes: 17 additions & 0 deletions compute/etc/sql_exporter/compute_logical_snapshots_bytes.libsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
local neon = import 'neon.libsonnet';

local pg_ls_logicalsnapdir = importstr 'sql_exporter/compute_logical_snapshots_bytes.16.sql';
local pg_ls_dir = importstr 'sql_exporter/compute_logical_snapshots_bytes.sql';

{
metric_name: 'compute_logical_snapshots_bytes',
type: 'gauge',
help: 'Size of the pg_logical/snapshots directory, not including temporary files',
key_labels: [
'timeline_id',
],
values: [
'logical_snapshots_bytes',
],
query: if neon.PG_MAJORVERSION_NUM < 16 then pg_ls_dir else pg_ls_logicalsnapdir,
}
9 changes: 9 additions & 0 deletions compute/etc/sql_exporter/compute_logical_snapshots_bytes.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
SELECT
(SELECT setting FROM pg_settings WHERE name = 'neon.timeline_id') AS timeline_id,
-- Postgres creates temporary snapshot files of the form %X-%X.snap.%d.tmp.
-- These temporary snapshot files are renamed to the actual snapshot files
-- after they are completely built. We only WAL-log the completely built
-- snapshot files
(SELECT COALESCE(sum((pg_stat_file('pg_logical/snapshots/' || name, missing_ok => true)).size), 0)
FROM (SELECT * FROM pg_ls_dir('pg_logical/snapshots') WHERE pg_ls_dir LIKE '%.snap') AS name
) AS logical_snapshots_bytes;

0 comments on commit f0f7ddc

Please sign in to comment.