prometheus.cl

2020-12-20

No Description

Upstream URL

github.com/deadtrickster/prometheus.cl

Author

Ilya Khaprov <ilya.kharpov@publitechs.com>, Ilya Khaprov <ilya.khaprov@publitechs.com> and CONTRIBUTORS

Maintainer

Ilya Khaprov <ilya.khaprov@publitechs.com>

License

MIT
README

Prometheus.io Common Lisp Client Build Status Coverage Status

Example Grafana dashboard for Hunchentoot on SBCL:

Prometheus + Grafan + SBCL + Hunchentoot

You can get this dashboard here.

Example Quick Start

Currently example uses Linux and SBCL specific collectors.

(ql:quickload :prometheus.examples)
(prometheus.example:run)

You can override app/exporter host/port in prometheus.example:run arguments. To stop example app call prometheus.example:stop

Metric Types

  • Counter
  • Int Counter (can only work with unsigned int64)
  • Gauge
  • Histogram
  • Simple Summary (without quantiles)
  • Summary (with quantiles)

Custom collectors

SBCL runtime information

  • Threads
  • Memory

Process information

  • Open fds count
  • Max fds count
  • Virtual memory bytes
  • Resident memory bytes
  • Process CPU seconds{stime|utime} (total)
  • Process start time (Unix epoch)
  • Process uptime

Linux? only

Performance / Optimization

Counter

On SBCL counter can use CAS. On SBCL int counter can use atomic-incf.

Benchmark (30 threads each doing 100000 counter.inc):

MethodAvg inc n/s
Mutex7885
CAS (SBCL)1902
ATOMIC (SBCL)141

Gauge

On SBCL gauge can use CAS.

Benchmark (30 threads each doing 100000 gauge.set):

MethodAvg set n/s
Mutex9618
CAS (SBCL)2204

Exposers

Hunchentoot

Example

Hunchentoot exposer plus SBCL metrics.

(prom.sbcl:make-memory-collector)
(prom.sbcl:make-threads-collector)
(defclass my-acceptor (prom.tbnl::hunchentoot-exposer tbnl:acceptor)
  ())
(tbnl:start (make-instance 'my-acceptor :address "172.17.0.1" :port 9101))

will produce something like this:

SBCL Dashboard

Effect of (sb-ext:gc) can be seen clearly.

License

MIT

Dependencies (18)

  • alexandria
  • bordeaux-threads
  • cffi
  • chipz
  • cl-coveralls
  • cl-fad
  • cl-interpol
  • cl-ppcre
  • drakma
  • hunchentoot
  • local-time
  • log4cl
  • mw-equiv
  • prove
  • quantile-estimator.cl
  • salza2
  • split-sequence
  • trivial-utf-8
  • GitHub
  • Quicklisp