guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: services: Add prometheus-node-exporter-service-type.


From: Gábor Boskovits
Subject: 01/01: services: Add prometheus-node-exporter-service-type.
Date: Mon, 9 Jul 2018 04:40:06 -0400 (EDT)

boskovits pushed a commit to branch master
in repository guix.

commit a33652ee336ae9a5d2ab5fd54bf2397caec42a0e
Author: Gábor Boskovits <address@hidden>
Date:   Mon Jun 18 12:43:42 2018 +0200

    services: Add prometheus-node-exporter-service-type.
    
    * gnu/services/monitoring.scm (prometheus-node-exporter-service-type):
    New variable.
    (<prometheus-node-exporter-configuration>): New record type.
    (prometheus-node-exporter-shepherd-service): New procedure.
    * gnu/doc/guix.texi (Monitoring Services): Document it.
    * gnu/tests/monitoring.scm: New file.
    * gnu/local.mk (GNU_SYSTEM_MODULES): Add test module.
---
 doc/guix.texi               | 36 ++++++++++++++++-
 gnu/local.mk                |  3 +-
 gnu/packages/monitoring.scm |  1 +
 gnu/services/monitoring.scm | 38 +++++++++++++++++-
 gnu/tests/monitoring.scm    | 97 +++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 172 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index a458c7c..3f0eedd 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -48,7 +48,8 @@ Copyright @copyright{} 2017 address@hidden
 Copyright @copyright{} 2018 Rutger address@hidden
 Copyright @copyright{} 2018 Oleg address@hidden
 Copyright @copyright{} 2018 Mike address@hidden
-Copyright @copyright{} 2018 Pierre-Antoine Rouby
+Copyright @copyright{} 2018 Pierre-Antoine address@hidden
+Copyright @copyright{} 2018 Gábor address@hidden
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -15649,6 +15650,39 @@ Specify the path of the base URL.  This can be useful 
if
 @end table
 @end deftp
 
address@hidden Prometheus Node Exporter Service
+
address@hidden prometheus-node-exporter
+The Prometheus ``node exporter'' makes hardware and operating system statistics
+provided by the Linux kernel available for the Prometheus monitoring system. 
+This service should be deployed on all physical nodes and virtual machines,
+where monitoring these statistics is desirable. 
+
address@hidden {Scheme variable} prometheus-node-exporter-service-type
+This is the service type for the
address@hidden://github.com/prometheus/node_exporter/, prometheus-node-exporter}
+service, its value must be a @code{prometheus-node-exporter-configuration}
+record as in this example:
+
address@hidden
+(service prometheus-node-exporter-service-type
+         (prometheus-node-exporter-configuration
+           (web-listen-address ":9100")))
address@hidden example
address@hidden defvar
+
address@hidden {Data Type} prometheus-node-exporter-configuration
+Data type representing the configuration of @command{node_exporter}.
+
address@hidden @asis
address@hidden @code{package} (default: 
@code{go-github-com-prometheus-node-exporter})
+The prometheus-node-exporter package to use.
+
address@hidden @code{web-listen-address} (default: @code{":9100"})
+Bind the web interface to the specified address.
+
address@hidden table
address@hidden deftp
 
 @node Kerberos Services
 @subsubsection Kerberos Services
diff --git a/gnu/local.mk b/gnu/local.mk
index dad664c..eb245e3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -15,7 +15,7 @@
 # Copyright © 2017 Tobias Geerinckx-Rice <address@hidden>
 # Copyright © 2017, 2018 Clément Lassieur <address@hidden>
 # Copyright © 2017 Mathieu Othacehe <address@hidden>
-# Copyright © 2017 Gábor Boskovits <address@hidden>
+# Copyright © 2017, 2018 Gábor Boskovits <address@hidden>
 # Copyright © 2018 Amirouche Boubekki <address@hidden>
 # Copyright © 2018 Oleg Pykhalov <address@hidden>
 #
@@ -530,6 +530,7 @@ GNU_SYSTEM_MODULES =                                \
   %D%/tests/databases.scm                      \
   %D%/tests/desktop.scm                                \
   %D%/tests/dict.scm                           \
+  %D%/tests/monitoring.scm                      \
   %D%/tests/nfs.scm                            \
   %D%/tests/install.scm                                \
   %D%/tests/mail.scm                           \
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index db6c22a..fae62d5 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018 Sou Bunnbu <address@hidden>
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <address@hidden>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <address@hidden>
+;;; Copyright © 2018 Gábor Boskovits <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index 49a65db..aa3b63a 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Sou Bunnbu <address@hidden>
+;;; Copyright © 2018 Gábor Boskovits <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,7 +27,9 @@
   #:use-module (guix records)
   #:use-module (ice-9 match)
   #:export (darkstat-configuration
-            darkstat-service-type))
+            prometheus-node-exporter-configuration
+            darkstat-service-type
+            prometheus-node-exporter-service-type))
 
 
 ;;;
@@ -89,3 +92,36 @@ HTTP.")
                              (const %darkstat-accounts))
           (service-extension shepherd-root-service-type
                              (compose list darkstat-shepherd-service))))))
+
+(define-record-type* <prometheus-node-exporter-configuration>
+  prometheus-node-exporter-configuration
+  make-prometheus-node-exporter-configuration
+  prometheus-node-exporter-configuration?
+  (package prometheus-node-exporter-configuration-package
+           (default go-github-com-prometheus-node-exporter))
+  (web-listen-address prometheus-node-exporter-web-listen-address
+                      (default ":9100")))
+
+(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))))))
+
+(define prometheus-node-exporter-service-type
+  (service-type
+   (name 'prometheus-node-exporter)
+   (description
+    "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))))))
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
new file mode 100644
index 0000000..6789998
--- /dev/null
+++ b/gnu/tests/monitoring.scm
@@ -0,0 +1,97 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Gábor Boskovits  <address@hidden>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests monitoring)
+  #:use-module (gnu services)
+  #:use-module (gnu services monitoring)
+  #:use-module (gnu services networking)
+  #:use-module (gnu system vm)
+  #:use-module (gnu tests)
+  #:use-module (guix gexp)
+  #:export (%test-prometheus-node-exporter))
+
+
+;;;
+;;; Prometheus Node Exporter
+;;;
+
+(define* (run-prometheus-node-exporter-server-test name test-os)
+  "Run tests in %PROMETHEUS-NODE-EXPORTER-OS, which has 
prometheus-node-exporter running."
+  (define os
+    (marionette-operating-system
+     test-os
+     #:imported-modules '((gnu services herd))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings '((8080 . 9100)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11)
+                       (srfi srfi-64)
+                       (gnu build marionette)
+                       (web client)
+                       (web response))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin #$name)
+
+          (test-assert "prometheus-node-exporter running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'prometheus-node-exporter)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-equal "http-get"
+            200
+            (begin
+              (wait-for-tcp-port 9100 marionette)
+              (let-values (((response text)
+                            (http-get "http://localhost:8080";)))
+                (response-code response))))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation (string-append name "-test") test))
+
+(define %prometheus-node-exporter-os
+  (simple-operating-system
+   (dhcp-client-service)
+   (service prometheus-node-exporter-service-type
+            (prometheus-node-exporter-configuration))))
+
+(define %test-prometheus-node-exporter
+  (system-test
+   (name "prometheus-node-exporter")
+   (description "Connect to a running prometheus-node-exporter server.")
+   (value (run-prometheus-node-exporter-server-test
+           name %prometheus-node-exporter-os))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]