Add Prometheus metrics for indexes specifically
This commit is contained in:
parent
2fa9f151f6
commit
5267bde603
2 changed files with 78 additions and 10 deletions
|
|
@ -19,7 +19,8 @@
|
|||
#:use-module (ice-9 match)
|
||||
#:use-module (squee)
|
||||
#:export (fetch-high-level-table-size-metrics
|
||||
fetch-pg-stat-user-tables-metrics))
|
||||
fetch-pg-stat-user-tables-metrics
|
||||
fetch-pg-stat-user-indexes-metrics))
|
||||
|
||||
(define (fetch-high-level-table-size-metrics conn)
|
||||
;; Adapted from https://wiki.postgresql.org/wiki/Disk_Usage
|
||||
|
|
@ -41,7 +42,6 @@ SELECT table_name,
|
|||
COALESCE(pg_tablespace.spcname,'default') AS tablespace,
|
||||
row_estimate,
|
||||
table_bytes,
|
||||
index_bytes,
|
||||
toast_bytes
|
||||
FROM (
|
||||
SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes
|
||||
|
|
@ -75,12 +75,11 @@ FROM (
|
|||
LEFT JOIN pg_tablespace ON tablespace_id = pg_tablespace.oid")
|
||||
|
||||
(map (match-lambda
|
||||
((name tablespace row-estimate table-bytes index-bytes toast-bytes)
|
||||
((name tablespace row-estimate table-bytes toast-bytes)
|
||||
(list name
|
||||
tablespace
|
||||
(or (string->number row-estimate) 0)
|
||||
(or (string->number table-bytes) 0)
|
||||
(or (string->number index-bytes) 0)
|
||||
(or (string->number toast-bytes) 0))))
|
||||
(exec-query conn query)))
|
||||
|
||||
|
|
@ -126,3 +125,33 @@ SELECT relname, seq_scan, seq_tup_read,
|
|||
(analyze-count . ,analyze-count)
|
||||
(autoanalyze-count . ,autoanalyze-count))))
|
||||
(exec-query conn query)))
|
||||
|
||||
(define (fetch-pg-stat-user-indexes-metrics conn)
|
||||
(define query
|
||||
"
|
||||
SELECT pg_indexes.indexname,
|
||||
pg_indexes.tablename,
|
||||
COALESCE(pg_indexes.tablespace,'default') AS tablespace,
|
||||
pg_stat_user_indexes.idx_scan,
|
||||
pg_stat_user_indexes.idx_tup_read,
|
||||
pg_stat_user_indexes.idx_tup_fetch,
|
||||
pg_relation_size(indexrelid) AS size_in_bytes
|
||||
FROM pg_stat_user_indexes
|
||||
LEFT JOIN pg_indexes
|
||||
ON pg_stat_user_indexes.indexrelname = pg_indexes.indexname
|
||||
AND pg_stat_user_indexes.schemaname = pg_indexes.schemaname
|
||||
WHERE pg_stat_user_indexes.schemaname = 'guix_data_service'")
|
||||
|
||||
(map
|
||||
(match-lambda
|
||||
((indexname tablename tablespace
|
||||
idx_scan idx_tup_read idx_tup_fetch
|
||||
size_in_bytes)
|
||||
`((name . ,indexname)
|
||||
(table-name . ,tablename)
|
||||
(tablespace . ,tablespace)
|
||||
(idx-scan . ,idx_scan)
|
||||
(idx-tup-read . ,idx_tup_read)
|
||||
(idx-tup-fetch . ,idx_tup_fetch)
|
||||
(bytes . ,size_in_bytes))))
|
||||
(exec-query conn query)))
|
||||
|
|
|
|||
|
|
@ -130,7 +130,24 @@
|
|||
"-"
|
||||
"_"))
|
||||
#:labels '(name))))
|
||||
pg-stat-fields)))
|
||||
pg-stat-fields))
|
||||
|
||||
(pg-stat-indexes-fields '(idx-scan idx-tup-read
|
||||
idx-tup-fetch bytes))
|
||||
|
||||
(pg-stat-indexes-metrics (map (lambda (field)
|
||||
(cons
|
||||
field
|
||||
(make-gauge-metric
|
||||
registry
|
||||
(string-append
|
||||
"pg_stat_indexes_"
|
||||
(string-replace-substring
|
||||
(symbol->string field)
|
||||
"-"
|
||||
"_"))
|
||||
#:labels '(name))))
|
||||
pg-stat-indexes-fields)))
|
||||
(lambda ()
|
||||
(letpar& ((metric-values
|
||||
(with-thread-postgresql-connection
|
||||
|
|
@ -141,13 +158,16 @@
|
|||
(pg-stat-user-tables-metrics
|
||||
(with-thread-postgresql-connection
|
||||
fetch-pg-stat-user-tables-metrics))
|
||||
(pg-stat-user-indexes-metrics
|
||||
(with-thread-postgresql-connection
|
||||
fetch-pg-stat-user-indexes-metrics))
|
||||
(load-new-guix-revision-job-metrics
|
||||
(with-thread-postgresql-connection
|
||||
select-load-new-guix-revision-job-metrics)))
|
||||
|
||||
(for-each (match-lambda
|
||||
((name tablespace row-estimate
|
||||
table-bytes index-bytes toast-bytes)
|
||||
table-bytes toast-bytes)
|
||||
|
||||
(metric-set table-row-estimate-metric
|
||||
row-estimate
|
||||
|
|
@ -156,10 +176,6 @@
|
|||
table-bytes
|
||||
#:label-values `((name . ,name)
|
||||
(tablespace . ,tablespace)))
|
||||
(metric-set table-index-bytes-metric
|
||||
index-bytes
|
||||
#:label-values `((name . ,name)
|
||||
(tablespace . ,tablespace)))
|
||||
(metric-set table-toast-bytes-metric
|
||||
toast-bytes
|
||||
#:label-values `((name . ,name)
|
||||
|
|
@ -183,6 +199,29 @@
|
|||
field-values)))
|
||||
pg-stat-user-tables-metrics)
|
||||
|
||||
(map (lambda (field-values)
|
||||
(let ((name (assq-ref field-values 'name))
|
||||
(table-name (assq-ref field-values 'table-name))
|
||||
(tablespace (assq-ref field-values 'tablespace)))
|
||||
(for-each
|
||||
(match-lambda
|
||||
(('name . _) #f)
|
||||
(('table-name . _) #f)
|
||||
(('tablespace . _) #f)
|
||||
((field . value)
|
||||
(let ((metric (or (assq-ref pg-stat-indexes-metrics field)
|
||||
(error field))))
|
||||
(metric-set metric
|
||||
value
|
||||
#:label-values
|
||||
`((name . ,name)
|
||||
(table . ,table-name)
|
||||
,@(if (eq? field 'bytes)
|
||||
`((tablespace . ,tablespace))
|
||||
'()))))))
|
||||
field-values)))
|
||||
pg-stat-user-indexes-metrics)
|
||||
|
||||
(for-each (match-lambda
|
||||
((repository-label completed count)
|
||||
(metric-set
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue