diff --git a/doc/guix.texi b/doc/guix.texi index b5340aa368..13e0dcf6b7 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -22038,6 +22038,11 @@ The prometheus-node-exporter package to use. @item @code{web-listen-address} (default: @code{":9100"}) Bind the web interface to the specified address. +@item @code{textfile-directory} (default: @code{"/var/lib/prometheus/node-exporter"}) +This directory can be used to export metrics specific to this machine. +Files containing metrics in the text format, with the filename ending in +@code{.prom} should be placed in this directory. + @end table @end deftp diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm index faa1e71dcb..a7fd4328cf 100644 --- a/gnu/services/monitoring.scm +++ b/gnu/services/monitoring.scm @@ -126,7 +126,9 @@ (define-record-type* (package prometheus-node-exporter-configuration-package (default go-github-com-prometheus-node-exporter)) (web-listen-address prometheus-node-exporter-web-listen-address - (default ":9100"))) + (default ":9100")) + (textfile-directory prometheus-node-exporter-textfile-directory + (default "/var/lib/prometheus/node-exporter"))) (define %prometheus-node-exporter-accounts (list (user-account @@ -143,7 +145,7 @@ (define %prometheus-node-exporter-accounts (define prometheus-node-exporter-shepherd-service (match-lambda (( $ - package web-listen-address) + package web-listen-address textfile-directory) (list (shepherd-service (documentation "Prometheus node exporter.") @@ -151,12 +153,29 @@ (define prometheus-node-exporter-shepherd-service (requirement '(networking)) (start #~(make-forkexec-constructor (list #$(file-append package "/bin/node_exporter") - "--web.listen-address" #$web-listen-address) + "--web.listen-address" #$web-listen-address + #$@(if textfile-directory + (list "--collector.textfile.directory" + textfile-directory) + '())) #:user "prometheus-node-exporter" #:group "prometheus-node-exporter" #:log-file "/var/log/prometheus-node-exporter.log")) (stop #~(make-kill-destructor))))))) +(define (prometheus-node-exporter-activation config) + (with-imported-modules '((guix build utils)) + #~(let ((textfile-directory + #$(prometheus-node-exporter-textfile-directory config))) + (use-modules (guix build utils)) + + (when textfile-directory + (let ((user (getpw "prometheus-node-exporter"))) + #t + (mkdir-p textfile-directory) + (chown textfile-directory (passwd:uid user) (passwd:gid user)) + (chmod textfile-directory #o775)))))) + (define prometheus-node-exporter-service-type (service-type (name 'prometheus-node-exporter) @@ -167,6 +186,8 @@ (define prometheus-node-exporter-service-type (list (service-extension account-service-type (const %prometheus-node-exporter-accounts)) + (service-extension activation-service-type + prometheus-node-exporter-activation) (service-extension shepherd-root-service-type prometheus-node-exporter-shepherd-service))) (default-value (prometheus-node-exporter-configuration))))