Track some pg_stat metrics
Hopefully this'll help track database things better.
This commit is contained in:
parent
404f39a9ee
commit
7f49756bac
2 changed files with 82 additions and 2 deletions
|
|
@ -18,7 +18,8 @@
|
||||||
(define-module (guix-data-service metrics)
|
(define-module (guix-data-service metrics)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (squee)
|
#:use-module (squee)
|
||||||
#:export (fetch-high-level-table-size-metrics))
|
#:export (fetch-high-level-table-size-metrics
|
||||||
|
fetch-pg-stat-user-tables-metrics))
|
||||||
|
|
||||||
(define (fetch-high-level-table-size-metrics conn)
|
(define (fetch-high-level-table-size-metrics conn)
|
||||||
;; Adapted from https://wiki.postgresql.org/wiki/Disk_Usage
|
;; Adapted from https://wiki.postgresql.org/wiki/Disk_Usage
|
||||||
|
|
@ -77,3 +78,46 @@ FROM (
|
||||||
(or (string->number index-bytes) 0)
|
(or (string->number index-bytes) 0)
|
||||||
(or (string->number toast-bytes) 0))))
|
(or (string->number toast-bytes) 0))))
|
||||||
(exec-query conn query)))
|
(exec-query conn query)))
|
||||||
|
|
||||||
|
(define (fetch-pg-stat-user-tables-metrics conn)
|
||||||
|
(define query
|
||||||
|
"
|
||||||
|
SELECT relname, seq_scan, seq_tup_read,
|
||||||
|
idx_scan, idx_tup_fetch,
|
||||||
|
n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd,
|
||||||
|
n_live_tup, n_dead_tup, n_mod_since_analyze,
|
||||||
|
COALESCE(extract(epoch from last_vacuum), 0),
|
||||||
|
COALESCE(extract(epoch from last_autovacuum), 0),
|
||||||
|
COALESCE(extract(epoch from last_analyze), 0),
|
||||||
|
COALESCE(extract(epoch from last_autoanalyze), 0),
|
||||||
|
vacuum_count, autovacuum_count, analyze_count, autoanalyze_count
|
||||||
|
FROM pg_stat_user_tables")
|
||||||
|
|
||||||
|
(map (match-lambda
|
||||||
|
((relname seq-scan seq-tup-read
|
||||||
|
idx-scan idx-tup-fetch
|
||||||
|
n-tup-ins n-tup-upd n-tup-del n-tup-hot-upd
|
||||||
|
n-live-tup n-dead-tup n-mod-since-analyze
|
||||||
|
last-vacuum last-autovacuum last-analyze last-autoanalyze
|
||||||
|
vacuum-count autovacuum-count analyze-count autoanalyze-count)
|
||||||
|
`((name . ,relname)
|
||||||
|
(seq-scan . ,seq-scan)
|
||||||
|
(seq-tup-read . ,seq-tup-read)
|
||||||
|
(idx-scan . ,idx-scan)
|
||||||
|
(idx-tup-fetch . ,idx-tup-fetch)
|
||||||
|
(n-tup-ins . ,n-tup-ins)
|
||||||
|
(n-tup-upd . ,n-tup-upd)
|
||||||
|
(n-tup-del . ,n-tup-del)
|
||||||
|
(n-tup-hot-upd . ,n-tup-hot-upd)
|
||||||
|
(n-live-tup . ,n-live-tup)
|
||||||
|
(n-dead-tup . ,n-dead-tup)
|
||||||
|
(n-mod-since-analyze . ,n-mod-since-analyze)
|
||||||
|
(last-vacuum . ,last-vacuum)
|
||||||
|
(last-autovacuum . ,last-autovacuum)
|
||||||
|
(last-analyze . ,last-analyze)
|
||||||
|
(last-autoanalyze . ,last-autoanalyze)
|
||||||
|
(vacuum-count . ,vacuum-count)
|
||||||
|
(autovacuum-count . ,autovacuum-count)
|
||||||
|
(analyze-count . ,analyze-count)
|
||||||
|
(autoanalyze-count . ,autoanalyze-count))))
|
||||||
|
(exec-query conn query)))
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
#:use-module (ice-9 vlist)
|
#:use-module (ice-9 vlist)
|
||||||
#:use-module (ice-9 pretty-print)
|
#:use-module (ice-9 pretty-print)
|
||||||
#:use-module (ice-9 textual-ports)
|
#:use-module (ice-9 textual-ports)
|
||||||
|
#:use-module (ice-9 string-fun)
|
||||||
#:use-module (rnrs bytevectors)
|
#:use-module (rnrs bytevectors)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-11)
|
#:use-module (srfi srfi-11)
|
||||||
|
|
@ -106,7 +107,28 @@
|
||||||
#:labels '(name)))
|
#:labels '(name)))
|
||||||
(table-toast-bytes-metric (make-gauge-metric registry
|
(table-toast-bytes-metric (make-gauge-metric registry
|
||||||
"table_toast_bytes"
|
"table_toast_bytes"
|
||||||
#:labels '(name))))
|
#:labels '(name)))
|
||||||
|
|
||||||
|
(pg-stat-fields '(seq-scan seq-tup-read idx-scan idx-tup-fetch
|
||||||
|
n-tup-ins n-tup-upd n-tup-del
|
||||||
|
n-tup-hot-upd n-live-tup n-dead-tup
|
||||||
|
n-mod-since-analyze last-vacuum
|
||||||
|
last-autovacuum last-analyze last-autoanalyze
|
||||||
|
vacuum-count autovacuum-count
|
||||||
|
analyze-count autoanalyze-count))
|
||||||
|
|
||||||
|
(pg-stat-metrics (map (lambda (field)
|
||||||
|
(cons
|
||||||
|
field
|
||||||
|
(make-gauge-metric
|
||||||
|
registry
|
||||||
|
(string-append "pg_stat_"
|
||||||
|
(string-replace-substring
|
||||||
|
(symbol->string field)
|
||||||
|
"-"
|
||||||
|
"_"))
|
||||||
|
#:labels '(name))))
|
||||||
|
pg-stat-fields)))
|
||||||
(lambda (conn)
|
(lambda (conn)
|
||||||
(let ((metric-values (fetch-high-level-table-size-metrics conn)))
|
(let ((metric-values (fetch-high-level-table-size-metrics conn)))
|
||||||
(for-each (match-lambda
|
(for-each (match-lambda
|
||||||
|
|
@ -129,6 +151,20 @@
|
||||||
(metric-set revisions-count-metric
|
(metric-set revisions-count-metric
|
||||||
(count-guix-revisions conn))
|
(count-guix-revisions conn))
|
||||||
|
|
||||||
|
(map (lambda (field-values)
|
||||||
|
(let ((name (assq-ref field-values 'name)))
|
||||||
|
(for-each
|
||||||
|
(match-lambda
|
||||||
|
(('name . _) #f)
|
||||||
|
((field . value)
|
||||||
|
(let ((metric (or (assq-ref pg-stat-metrics field)
|
||||||
|
(error field))))
|
||||||
|
(metric-set metric
|
||||||
|
value
|
||||||
|
#:label-values `((name . ,name))))))
|
||||||
|
field-values)))
|
||||||
|
(fetch-pg-stat-user-tables-metrics conn))
|
||||||
|
|
||||||
(for-each (match-lambda
|
(for-each (match-lambda
|
||||||
((repository-label completed count)
|
((repository-label completed count)
|
||||||
(metric-set
|
(metric-set
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue