No description
Find a file
2025-11-19 12:34:24 +00:00
.gitignore Initial commit 2020-08-31 13:38:22 +01:00
bootstrap Initial commit 2020-08-31 13:38:22 +01:00
configure.ac Allow for cross-compilation 2020-10-05 17:17:48 +01:00
COPYING Initial commit 2020-08-31 13:38:22 +01:00
guile.am Allow for cross-compilation 2020-10-05 17:17:48 +01:00
guix-dev.scm Initial commit 2020-08-31 13:38:22 +01:00
Makefile.am Initial commit 2020-08-31 13:38:22 +01:00
pre-inst-env.in Initial commit 2020-08-31 13:38:22 +01:00
prometheus.scm Remove usage of error 2025-11-19 12:34:24 +00:00
README Add more information and an example to the README 2020-08-31 19:00:52 +01:00

-*- mode: org -*-

This Guile library provides instrumentation code intended to be used
with the Prometheus time series service.

Counter, gauge and histogram metric types are supported.

This client library is still in early development, and there will be
probably be breaking changes in the future, prior to the first stable
release.

Some information on how to use this library can be found in the
docstrings of exported procedures in the prometheus.scm file.

** Web service example

The following example demonstrates a Guile web server, with some
instrumentation for the number of requests. Each time a request is
handled, the metric is instrumented. For the /metrics path, the
response is the metrics and their values. This is intended to be
scraped by Prometheus so that it can retrieve and record the metric
values.

#+BEGIN_SRC scheme
(use-modules (web server)
             (web request)
             (web response)
             (web uri)
             (prometheus))

(define my-registry (make-metrics-registry #:namespace "exampleapp"))

(define request-counter (make-counter-metric my-registry
                                             "requests_count"))

(define (request-handler request body)
  (metric-increment request-counter)

  (if (equal? (split-and-decode-uri-path (uri-path (request-uri request)))
              '("metrics"))
      (values '((content-type . (text/plain)))
              (lambda (port)
                (write-metrics my-registry port)))
      (values '((content-type . (text/plain)))
              (lambda (port)
                (display "Incrementing metric\n" port)))))

(run-server request-handler)
#+END_SRC