Add metrics for tracking cache hit ratios

This commit is contained in:
James Campbell 2025-06-13 01:16:24 -04:00
parent 8fe81e3ab3
commit 7c395a80fe
Signed by: james
GPG Key ID: 2287C33A40DC906A
3 changed files with 106 additions and 2 deletions

View File

@ -19,10 +19,12 @@ metrics:
type: value type: value
query: query:
0: SHOW server_version_num 0: SHOW server_version_num
max_frozen_age: max_frozen_age:
type: row type: row
query: query:
0: SELECT max(age(datfrozenxid)) AS xid_age, max(mxid_age(datminmxid)) AS mxid_age FROM pg_database 0: SELECT max(age(datfrozenxid)) AS xid_age, 0 AS mxid_age FROM pg_database
90600: SELECT max(age(datfrozenxid)) AS xid_age, max(mxid_age(datminmxid)) AS mxid_age FROM pg_database
# Per-database metrics # Per-database metrics
db_stats: db_stats:
@ -33,6 +35,11 @@ metrics:
test_args: test_args:
dbname: postgres dbname: postgres
hit_ratios:
type: row
query:
0: SELECT sum(heap_blks_read)::float / sum(heap_blks_read + heap_blks_hit) AS avg_heap_hit_ratio, sum(idx_blks_hit)::float / sum(idx_blks_read + idx_blks_hit) AS avg_idx_hit_ratio, sum(toast_blks_hit)::float / sum(toast_blks_read + toast_blks_hit) AS avg_toast_hit_ratio, sum(tidx_blks_hit)::float / sum(tidx_blks_read + tidx_blks_hit) AS avg_tidx_hit_ratio FROM pg_statio_all_tables
# Debugging # Debugging
ntables: ntables:
type: value type: value

View File

@ -656,7 +656,11 @@ def test_queries():
# If the metric has arguments to use while testing, grab those # If the metric has arguments to use while testing, grab those
args = metric.get("test_args", {}) args = metric.get("test_args", {})
# Run the query without the ability to retry. # Run the query without the ability to retry.
res = sample_metric(dbname, name, args, retry=False) try:
res = sample_metric(dbname, name, args, retry=False)
except MetricVersionError:
print("{} -> Unsupported for this version".format(name))
continue
# Compare the result to the provided sample results # Compare the result to the provided sample results
# TODO # TODO
print("{} -> {}".format(name, res)) print("{} -> {}".format(name, res))
@ -714,6 +718,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
except LatestVersionCheckError as e: except LatestVersionCheckError as e:
log.error("Failed to retrieve latest version information: {}".format(e)) log.error("Failed to retrieve latest version information: {}".format(e))
self._reply(503, "Failed to retrieve latest version info") self._reply(503, "Failed to retrieve latest version info")
return
# Note: parse_qs returns the values as a list. Since we always expect # Note: parse_qs returns the values as a list. Since we always expect
# single values, just grab the first from each. # single values, just grab the first from each.

View File

@ -673,6 +673,98 @@ zabbix_export:
value: '{#DBNAME}' value: '{#DBNAME}'
- tag: Type - tag: Type
value: Calculated value: Calculated
- uuid: bb0690e123e94e35a9bbd0f05ee322b4
name: 'Database Hit Ratios for {#DBNAME}'
type: HTTP_AGENT
key: 'pgmon_db_hit_ratios[{#DBNAME}]'
history: '0'
value_type: TEXT
trends: '0'
url: 'http://localhost:{$AGENT_PORT}/hit_ratios'
query_fields:
- name: dbname
value: '{#DBNAME}'
tags:
- tag: Application
value: PostgreSQL
- tag: Database
value: '{#DBNAME}'
- uuid: e0edbaf6f98249a6b357ade2ab41a76a
name: 'Average heap hit ratio on {#DBNAME}'
type: DEPENDENT
key: 'pgmon_db_hit_ratio[heap,{#DBNAME}]'
delay: '0'
history: 90d
value_type: FLOAT
description: 'The cache (shared_buffers) hit ratio for heap entries for the given database'
preprocessing:
- type: JSONPATH
parameters:
- $.avg_heap_hit_ratio
master_item:
key: 'pgmon_db_hit_ratios[{#DBNAME}]'
tags:
- tag: Application
value: PostgreSQL
- tag: Database
value: '{#DBNAME}'
- uuid: e4956d433a47455ca0c00d67a0f59355
name: 'Average index hit ratio on {#DBNAME}'
type: DEPENDENT
key: 'pgmon_db_hit_ratio[index,{#DBNAME}]'
delay: '0'
history: 90d
value_type: FLOAT
description: 'The cache (shared_buffers) hit ratio for index entries for the given database'
preprocessing:
- type: JSONPATH
parameters:
- $.avg_idx_hit_ratio
master_item:
key: 'pgmon_db_hit_ratios[{#DBNAME}]'
tags:
- tag: Application
value: PostgreSQL
- tag: Database
value: '{#DBNAME}'
- uuid: 0335267c14a8410a80a16b38167efcb3
name: 'Average toast hit ratio on {#DBNAME}'
type: DEPENDENT
key: 'pgmon_db_hit_ratio[toast,{#DBNAME}]'
delay: '0'
history: 90d
value_type: FLOAT
description: 'The cache (shared_buffers) hit ratio for heap entries for the given database'
preprocessing:
- type: JSONPATH
parameters:
- $.avg_toast_hit_ratio
master_item:
key: 'pgmon_db_hit_ratios[{#DBNAME}]'
tags:
- tag: Application
value: PostgreSQL
- tag: Database
value: '{#DBNAME}'
- uuid: 3f7da45e351443528c6c36145d38f9b8
name: 'Average toast index hit ratio on {#DBNAME}'
type: DEPENDENT
key: 'pgmon_db_hit_ratio[toast_index,{#DBNAME}]'
delay: '0'
history: 90d
value_type: FLOAT
description: 'The cache (shared_buffers) hit ratio for toast index entries for the given database'
preprocessing:
- type: JSONPATH
parameters:
- $.avg_tidx_hit_ratio
master_item:
key: 'pgmon_db_hit_ratios[{#DBNAME}]'
tags:
- tag: Application
value: PostgreSQL
- tag: Database
value: '{#DBNAME}'
- uuid: 492b3cac15f348c2b85f97b69c114d1b - uuid: 492b3cac15f348c2b85f97b69c114d1b
name: 'Database Stats for {#DBNAME}' name: 'Database Stats for {#DBNAME}'
type: HTTP_AGENT type: HTTP_AGENT