[PATCH 0/6] Prometheus node exporter service enhancements

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Christopher Baines
Owner
unassigned
Submitted by
Christopher Baines
Severity
normal

Debbugs page

Christopher Baines wrote 4 years ago
(address . guix-patches@gnu.org)
87zh31u1q0.fsf@cbaines.net
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(-)
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAl/CPMdfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XcXdg/8DjveluxX4m7VL7Ybsfha7BeaNCHuyCK2
Cj2XbjhNiLwiVaM8CIX1WGXo/wC3J3wqnuTcYKb9hdplGCG7yyG5BfC4xcjM/fja
4c2mzyX1BK2ZGQ2GaN/NwE1R1A+/YYJHhgBLd+hD53mi0WExKPE2ZDz8UlaDX0vv
CyFX7Ef0eaom1cy1z/uHJwRCmqDDkPqmsPsrb147uVQw8o2BvrY7pXn8o0RZ4SgW
MnoXs46BrFklw2gia4w1SC4Tc+xnAxXKCY70LJoBbVyvhAjyU6DErjKOSeorz6pt
wqWTF2qeADzjUGvmV5p2enJePArspEPmjKzYp7pNOgRajG6xNGCVe2m0TsvoXJ6I
s1+b6C7ltOCaWnxcDHC/N02qLUCVun4rbXsuhuNppmGy0TrrIAgj8UueSD5EpIC9
jNSupsPmLy9wTpn6iN4k7fXvp6aCjGiK0hPy3taTGlnjezreyQozuNXUmKjYtN0X
sACcPxR6pxLBhArOLQZ/oFhNz2gTP5ARS6Bg24hGLmOl98X6x2uxtoIS1cS7cyit
P9cuHRZ/FV+qoLhKYR21fCmyb9c7w7hb5qqG3Cu+wWk3FTrKCbfX+BXRVqfZDcD4
s4cp1uwjjwbQ6hhw2LxIpKAQC/ylLlBxMQ8i7g52C6earABjwZ/Zn5mrNjQfBjpZ
DI8gFVs+VnU=
=Ua8Y
-----END PGP SIGNATURE-----

Christopher Baines wrote 4 years ago
[PATCH 1/6] services: monitoring: Neaten up the Prometheus node exporter.
(address . 44922@debbugs.gnu.org)
20201128121149.18639-1-mail@cbaines.net
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(-)

Toggle diff (41 lines)
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
Christopher Baines wrote 4 years ago
[PATCH 2/6] monitoring: Add user and group for the Prometheus node exporter.
(address . 44922@debbugs.gnu.org)
20201128121149.18639-2-mail@cbaines.net
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(-)

Toggle diff (63 lines)
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
Christopher Baines wrote 4 years ago
[PATCH 3/6] services: monitoring: Use a log file for Prometheus node exporter.
(address . 44922@debbugs.gnu.org)
20201128121149.18639-3-mail@cbaines.net
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(-)

Toggle diff (16 lines)
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
Christopher Baines wrote 4 years ago
[PATCH 4/6] doc: Remove redundant node exporter configuration from the example.
(address . 44922@debbugs.gnu.org)
20201128121149.18639-4-mail@cbaines.net
* doc/guix.texi (Prometheus Node Exporter Service): Simplify the example.
---
doc/guix.texi | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

Toggle diff (22 lines)
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
Christopher Baines wrote 4 years ago
[PATCH 6/6] monitoring: Support extra options for the Prometheus node exporter.
(address . 44922@debbugs.gnu.org)
20201128121149.18639-6-mail@cbaines.net
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(-)

Toggle diff (50 lines)
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
Christopher Baines wrote 4 years ago
[PATCH 5/6] monitoring: Enable the Prometheus node exporter textfile collector.
(address . 44922@debbugs.gnu.org)
20201128121149.18639-5-mail@cbaines.net
* 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(-)

Toggle diff (82 lines)
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
Ludovic Courtès wrote 4 years ago
Re: [bug#44922] [PATCH 0/6] Prometheus node exporter service enhancements
(name . Christopher Baines)(address . mail@cbaines.net)(address . 44922@debbugs.gnu.org)
87mtyq370h.fsf@gnu.org
Hi,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (6 lines)
> 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’.
Christopher Baines wrote 4 years ago
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 44922-done@debbugs.gnu.org)
87a6uqq8cf.fsf@cbaines.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (15 lines)
> Hi,
>
> Christopher Baines <mail@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
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAl/N9EBfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XdqGg/+I1wWWIcPeQHIqbRyn5CiPwsi3RME5YEf
6UTgi7yjiKp1cWYjevwh2LYuwo65Qp31CMcrG8yXosGpaMfrvivCM7YXBDgXX6J0
r+T8FpqMWUhXhRTcfyn3dcgQWkdj6hX9Kh7Dc33/DcNdVfX2JSMGdedT+2nvRbqw
LsHIKwdz7DqgdWKnILDvqVG/EgqOkQE6P4Xe6nF/n7hSuN9UO4onHLB+Nf/vy9kq
K7tBfjdmsKsQ2EzBc3JDw4q5I3d95CuPDIiqqBYrHYoKqD+XZDAI42qJ4dj9bBAq
kcaoXS6b+ScxlMVRiVnMqzQuQZ/I1h8eTGPWTJYRsN41+SKhVNIzvbgiVxStsXTE
sVsiWiVdvp4C3CD8WflyGCiuorLmpgf0KD6lUVg00bp/TrCZlO/E3N7maXkYLH3O
zuypRTujjxYSYi19b0igFRuEpn2VZxmT6ovmHf0URvKZrN4bAurwpzpYQLNOoNm2
2cqauI+c2+5mxvD/NAM+qGpwnxGCOlaHiV4yHvbJmXWStmAAGBMnFcg7grGljL4Q
hOtrdhWeq+KlhJAOHPy0aCLK8PZD2WjZg3Y4+Rm2i1x7e5I9Peh2wbzSLUSg9/1Q
Oot0bJL0PNxnXs5KKOAObHW6HE8UUi2obFawQ62GxkEI1BthKsHqgcaLNbOp2+2J
wkFsahNkhQQ=
=Gn5L
-----END PGP SIGNATURE-----

Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 44922@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 44922
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help