GNU bug report logs - #44922
[PATCH 0/6] Prometheus node exporter service enhancements

Previous Next

Package: guix-patches;

Reported by: Christopher Baines <mail <at> cbaines.net>

Date: Sat, 28 Nov 2020 12:05:02 UTC

Severity: normal

Tags: patch

Done: Christopher Baines <mail <at> cbaines.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 44922 in the body.
You can then email your comments to 44922 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:05:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Christopher Baines <mail <at> cbaines.net>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sat, 28 Nov 2020 12:05:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: guix-patches <at> gnu.org
Subject: [PATCH 0/6] Prometheus node exporter service enhancements
Date: Sat, 28 Nov 2020 12:04:23 +0000
[Message part 1 (text/plain, inline)]
Some patches to enhance the Prometheus node exporter service.

Christopher Baines (6):
  services: monitoring: Neaten up the Prometheus node exporter.
  monitoring: Add user and group for the Prometheus node exporter.
  services: monitoring: Use a log file for Prometheus node exporter.
  doc: Remove redundant node exporter configuration from the example.
  monitoring: Enable the Prometheus node exporter textfile collector.
  monitoring: Support extra options for the Prometheus node exporter.

 doc/guix.texi               | 15 ++++---
 gnu/services/monitoring.scm | 81 ++++++++++++++++++++++++++++++-------
 2 files changed, 76 insertions(+), 20 deletions(-)
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:12:02 GMT) Full text and rfc822 format available.

Message #8 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 44922 <at> debbugs.gnu.org
Subject: [PATCH 1/6] services: monitoring: Neaten up the Prometheus node
 exporter.
Date: Sat, 28 Nov 2020 12:11:44 +0000
Add relevant exports, as well as a comment to better indicate where the
relevant code starts.

* gnu/services/monitoring.scm (prometheus-node-exporter-service-type):
Capitalise Prometheus.
---
 gnu/services/monitoring.scm | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index da3d736ba6..92df52b5ae 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -36,8 +36,12 @@
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-35)
   #:export (darkstat-configuration
-            prometheus-node-exporter-configuration
             darkstat-service-type
+
+            prometheus-node-exporter-configuration
+            prometheus-node-exporter-configuration?
+            prometheus-node-exporter-configuration-package
+            prometheus-node-exporter-web-listen-address
             prometheus-node-exporter-service-type
 
             zabbix-server-configuration
@@ -110,6 +114,11 @@ HTTP.")
           (service-extension shepherd-root-service-type
                              (compose list darkstat-shepherd-service))))))
 
+
+;;;
+;;; Prometheus node exporter
+;;;
+
 (define-record-type* <prometheus-node-exporter-configuration>
   prometheus-node-exporter-configuration
   make-prometheus-node-exporter-configuration
@@ -137,7 +146,7 @@ HTTP.")
    (name 'prometheus-node-exporter)
    (description
     "Run @command{node_exporter} to serve hardware and OS metrics to
-prometheus.")
+Prometheus.")
    (extensions
     (list (service-extension
            shepherd-root-service-type
-- 
2.29.2





Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:12:02 GMT) Full text and rfc822 format available.

Message #11 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 44922 <at> debbugs.gnu.org
Subject: [PATCH 2/6] monitoring: Add user and group for the Prometheus node
 exporter.
Date: Sat, 28 Nov 2020 12:11:45 +0000
So it doesn't run as root, and because this will help with the textfile
exporter.

* gnu/services/monitoring.scm (%prometheus-node-exporter-accounts): New
variable.
(prometheus-node-exporter-shepherd-service): Use the relevant user and group.
(prometheus-node-exporter-service-type): Extend the account service type.
---
 gnu/services/monitoring.scm | 39 ++++++++++++++++++++++++++-----------
 1 file changed, 28 insertions(+), 11 deletions(-)

diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index 92df52b5ae..d0934e7f27 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -128,18 +128,33 @@ HTTP.")
   (web-listen-address prometheus-node-exporter-web-listen-address
                       (default ":9100")))
 
+(define %prometheus-node-exporter-accounts
+  (list (user-account
+         (name "prometheus-node-exporter")
+         (group "prometheus-node-exporter")
+         (system? #t)
+         (comment "Prometheus node exporter daemon user")
+         (home-directory "/var/empty")
+         (shell (file-append shadow "/sbin/nologin")))
+        (user-group
+         (name "prometheus-node-exporter")
+         (system? #t))))
+
 (define prometheus-node-exporter-shepherd-service
   (match-lambda
     (( $ <prometheus-node-exporter-configuration>
          package web-listen-address)
-     (shepherd-service
-      (documentation "Prometheus node exporter.")
-      (provision '(prometheus-node-exporter))
-      (requirement '(networking))
-      (start #~(make-forkexec-constructor
-                (list #$(file-append package "/bin/node_exporter")
-                      "--web.listen-address" #$web-listen-address)))
-      (stop #~(make-kill-destructor))))))
+     (list
+      (shepherd-service
+       (documentation "Prometheus node exporter.")
+       (provision '(prometheus-node-exporter))
+       (requirement '(networking))
+       (start #~(make-forkexec-constructor
+                 (list #$(file-append package "/bin/node_exporter")
+                       "--web.listen-address" #$web-listen-address)
+                 #:user "prometheus-node-exporter"
+                 #:group "prometheus-node-exporter"))
+       (stop #~(make-kill-destructor)))))))
 
 (define prometheus-node-exporter-service-type
   (service-type
@@ -148,9 +163,11 @@ HTTP.")
     "Run @command{node_exporter} to serve hardware and OS metrics to
 Prometheus.")
    (extensions
-    (list (service-extension
-           shepherd-root-service-type
-           (compose list prometheus-node-exporter-shepherd-service))))
+    (list
+     (service-extension account-service-type
+                        (const %prometheus-node-exporter-accounts))
+     (service-extension shepherd-root-service-type
+                        prometheus-node-exporter-shepherd-service)))
    (default-value (prometheus-node-exporter-configuration))))
 
 
-- 
2.29.2





Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:12:03 GMT) Full text and rfc822 format available.

Message #14 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 44922 <at> debbugs.gnu.org
Subject: [PATCH 3/6] services: monitoring: Use a log file for Prometheus node
 exporter.
Date: Sat, 28 Nov 2020 12:11:46 +0000
This makes the logs easier to find and read.

* gnu/services/monitoring.scm (prometheus-node-exporter-shepherd-service):
Pass #:log-file to make-forkexec-constructor.
---
 gnu/services/monitoring.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index d0934e7f27..239306fa39 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -153,7 +153,8 @@ HTTP.")
                  (list #$(file-append package "/bin/node_exporter")
                        "--web.listen-address" #$web-listen-address)
                  #:user "prometheus-node-exporter"
-                 #:group "prometheus-node-exporter"))
+                 #:group "prometheus-node-exporter"
+                 #:log-file "/var/log/prometheus-node-exporter.log"))
        (stop #~(make-kill-destructor)))))))
 
 (define prometheus-node-exporter-service-type
-- 
2.29.2





Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:12:03 GMT) Full text and rfc822 format available.

Message #17 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 44922 <at> debbugs.gnu.org
Subject: [PATCH 4/6] doc: Remove redundant node exporter configuration from
 the example.
Date: Sat, 28 Nov 2020 12:11:47 +0000
* doc/guix.texi (Prometheus Node Exporter Service): Simplify the example.
---
 doc/guix.texi | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index b0126b961d..ed41091cae 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21896,13 +21896,10 @@ where monitoring these statistics is desirable.
 @defvar {Scheme variable} prometheus-node-exporter-service-type
 This is the service type for the
 @uref{https://github.com/prometheus/node_exporter/, prometheus-node-exporter}
-service, its value must be a @code{prometheus-node-exporter-configuration}
-record as in this example:
+service, its value must be a @code{prometheus-node-exporter-configuration}.
 
 @lisp
-(service prometheus-node-exporter-service-type
-         (prometheus-node-exporter-configuration
-           (web-listen-address ":9100")))
+(service prometheus-node-exporter-service-type)
 @end lisp
 @end defvar
 
-- 
2.29.2





Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:12:04 GMT) Full text and rfc822 format available.

Message #20 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 44922 <at> debbugs.gnu.org
Subject: [PATCH 6/6] monitoring: Support extra options for the Prometheus node
 exporter.
Date: Sat, 28 Nov 2020 12:11:49 +0000
There are plenty of options supported that the Guix configuration record
doesn't help you with, so add this field to allow users to do their own thing.

* gnu/services/monitoring.scm (<prometheus-node-exporter-configuration>): Add
extra-options field.
(prometheus-node-exporter-shepherd-service): Handle the extra options.
* doc/guix.texi (Prometheus Node Exporter Service): Document this.
---
 doc/guix.texi               | 3 +++
 gnu/services/monitoring.scm | 9 ++++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 6cd65b8739..dc624d89ec 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21918,6 +21918,9 @@ 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.
 
+@item @code{extra-options} (default: @code{'()})
+Extra options to pass to the Prometheus node exporter.
+
 @end table
 @end deftp
 
diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index c4bae229b8..4b6f8ed623 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -128,7 +128,9 @@ HTTP.")
   (web-listen-address prometheus-node-exporter-web-listen-address
                       (default ":9100"))
   (textfile-directory prometheus-node-exporter-textfile-directory
-                      (default "/var/lib/prometheus/node-exporter")))
+                      (default "/var/lib/prometheus/node-exporter"))
+  (extra-options      prometheus-node-exporter-extra-options
+                      (default '())))
 
 (define %prometheus-node-exporter-accounts
   (list (user-account
@@ -145,7 +147,7 @@ HTTP.")
 (define prometheus-node-exporter-shepherd-service
   (match-lambda
     (( $ <prometheus-node-exporter-configuration>
-         package web-listen-address textfile-directory)
+         package web-listen-address textfile-directory extra-options)
      (list
       (shepherd-service
        (documentation "Prometheus node exporter.")
@@ -157,7 +159,8 @@ HTTP.")
                        #$@(if textfile-directory
                               (list "--collector.textfile.directory"
                                     textfile-directory)
-                              '()))
+                              '())
+                       #$@extra-options)
                  #:user "prometheus-node-exporter"
                  #:group "prometheus-node-exporter"
                  #:log-file "/var/log/prometheus-node-exporter.log"))
-- 
2.29.2





Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sat, 28 Nov 2020 12:12:04 GMT) Full text and rfc822 format available.

Message #23 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 44922 <at> debbugs.gnu.org
Subject: [PATCH 5/6] monitoring: Enable the Prometheus node exporter textfile
 collector.
Date: Sat, 28 Nov 2020 12:11:48 +0000
* gnu/services/monitoring.scm (<prometheus-node-exporter-configuration>): Add
textfile-directory.
(prometheus-node-exporter-textfile-directory,
prometheus-node-exporter-activation): New procedures.
(prometheus-node-exporter-shepherd-service): Pass
--collector.textfile.directoryto the service.
(prometheus-node-exporter-service-type): Extend the activation service type.
* doc/guix.texi (Prometheus Node Exporter Service): Document.
---
 doc/guix.texi               |  5 +++++
 gnu/services/monitoring.scm | 27 ++++++++++++++++++++++++---
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index ed41091cae..6cd65b8739 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21913,6 +21913,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 239306fa39..c4bae229b8 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -126,7 +126,9 @@ HTTP.")
   (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 @@ HTTP.")
 (define prometheus-node-exporter-shepherd-service
   (match-lambda
     (( $ <prometheus-node-exporter-configuration>
-         package web-listen-address)
+         package web-listen-address textfile-directory)
      (list
       (shepherd-service
        (documentation "Prometheus node exporter.")
@@ -151,12 +153,29 @@ HTTP.")
        (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 @@ Prometheus.")
     (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))))
-- 
2.29.2





Information forwarded to guix-patches <at> gnu.org:
bug#44922; Package guix-patches. (Sun, 06 Dec 2020 22:28:01 GMT) Full text and rfc822 format available.

Message #26 received at 44922 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Christopher Baines <mail <at> cbaines.net>
Cc: 44922 <at> debbugs.gnu.org
Subject: Re: [bug#44922] [PATCH 0/6] Prometheus node exporter service
 enhancements
Date: Sun, 06 Dec 2020 23:27:10 +0100
Hi,

Christopher Baines <mail <at> cbaines.net> skribis:

>   services: monitoring: Neaten up the Prometheus node exporter.
>   monitoring: Add user and group for the Prometheus node exporter.
>   services: monitoring: Use a log file for Prometheus node exporter.
>   doc: Remove redundant node exporter configuration from the example.
>   monitoring: Enable the Prometheus node exporter textfile collector.
>   monitoring: Support extra options for the Prometheus node exporter.
    ^
Should be “services: prometheus-node-exporter: …”.

Apart from that, on a quick look it LGTM.  Go for it!

Thanks,
Ludo’.




Reply sent to Christopher Baines <mail <at> cbaines.net>:
You have taken responsibility. (Mon, 07 Dec 2020 09:23:02 GMT) Full text and rfc822 format available.

Notification sent to Christopher Baines <mail <at> cbaines.net>:
bug acknowledged by developer. (Mon, 07 Dec 2020 09:23:02 GMT) Full text and rfc822 format available.

Message #31 received at 44922-done <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 44922-done <at> debbugs.gnu.org
Subject: Re: [bug#44922] [PATCH 0/6] Prometheus node exporter service
 enhancements
Date: Mon, 07 Dec 2020 09:22:08 +0000
[Message part 1 (text/plain, inline)]
Ludovic Courtès <ludo <at> gnu.org> writes:

> Hi,
>
> Christopher Baines <mail <at> cbaines.net> skribis:
>
>>   services: monitoring: Neaten up the Prometheus node exporter.
>>   monitoring: Add user and group for the Prometheus node exporter.
>>   services: monitoring: Use a log file for Prometheus node exporter.
>>   doc: Remove redundant node exporter configuration from the example.
>>   monitoring: Enable the Prometheus node exporter textfile collector.
>>   monitoring: Support extra options for the Prometheus node exporter.
>     ^
> Should be “services: prometheus-node-exporter: …”.
>
> Apart from that, on a quick look it LGTM.  Go for it!

Great, I've pushed as 92f7c11af26580a7e6543efa94531652f187923a.

Thanks,

Chris
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 04 Jan 2021 12:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 112 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.