reblocks-prometheus - This is an addon for Reblocks Common Lisp framework which allows to gather metrics in Prometheus format.
REBLOCKS-PROMETHEUS ASDF System Details
Description: This is an addon for Reblocks Common Lisp framework which allows to gather metrics in Prometheus format.
Licence: Unlicense
Author: Alexander Artemenko
Homepage: https://40ants.com/reblocks-prometheus
Bug tracker: https://github.com/40ants/reblocks-prometheus/issues
Source control: GIT
Depends on: 40ants-routes, prometheus, prometheus-gc, prometheus.collectors.process, prometheus.collectors.sbcl, prometheus.formats.text, reblocks
This is an addon for Reblocks Common Lisp framework which allows to gather metrics in Prometheus format.
Installation
You can install this library from Quicklisp, but you want to receive updates quickly, then install it from Ultralisp.org:
(ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil)
(ql:quickload :reblocks-prometheus)Usage
Add a special metrics route into you're app's route list. Use reblocks-prometheus:metrics macro to define this route.
(defapp app
:prefix "/"
:routes
((reblocks-prometheus:metrics (\"/metrics\" :user-metrics *user-metrics*)))
)A new route /metrics will be added to serve metrics in Prometheus format.
Adding custom metrics
To add business specific metrics, define them as global variables
and then the pass to the reblocks-prometheus:metrics macro like this:
(defparameter *load-average*
(prometheus:make-gauge :name \"test_load_average\"
:help \"Test load average\"
:registry nil))
(defparameter *num-users*
(prometheus:make-counter :name \"test_num_users_created\"
:help \"Test num users created after the last metrics collection\"
:registry nil))
(defparameter *user-metrics*
(list *load-average*
*num-users*))
(defapp app
:prefix "/"
:routes
((reblocks-prometheus:metrics (\"/metrics\" :user-metrics *user-metrics*)))
)After this, you can change this counter and gauge using methods from prometheus.cl library:
(prometheus:gauge.set *load-average* 2)
(prometheus:counter.inc *num-users* :value 1)
(prometheus:counter.inc *num-users* :value 3)and their values will change during subsequent get queries for /metrics page.
API
REBLOCKS-PROMETHEUS
Classes
METRICS-ROUTE
Readers
PROMETHEUS-APP-MIXIN
A mixin which gathers some stats to report in Prometheus format.
Also, this mixin adds a /metrics slot to the app.
Use stats-registry to access the registry slot.
Functions
Call this function during handler's body to update gauges before metrics will be collected.
Macros
This macro creates a route of metrics-route class.
The body passed as HANDLER-BODY will be executed each time when metrics are collected.
You can use metrics-registry function to access the prometheus metrics registry
from the handler body code.