iapetos.collector.ring

initialize

(initialize registry & [{:keys [latency-histogram-buckets labels], :or {latency-histogram-buckets [0.001 0.005 0.01 0.02 0.05 0.1 0.2 0.3 0.5 0.75 1 5]}}])

Initialize all collectors for Ring handler instrumentation. This includes:

  • http_request_latency_seconds
  • http_requests_total
  • http_exceptions_total

Additional :labels can be given which need to be supplied using a :label-fn in wrap-instrumentation or wrap-metrics.

metrics-response

(metrics-response registry)

Create a Ring response map describing the given collector registry’s contents using the text format (version 0.0.4).

wrap-instrumentation

(wrap-instrumentation handler registry & [{:keys [path-fn label-fn], :or {path-fn :uri, label-fn (constantly {})}, :as options}])

Wrap the given Ring handler to write metrics to the given registry:

  • http_requests_total
  • http_request_latency_seconds
  • http_exceptions_total

Note that you have to call initialize on your registry first, to register the necessary collectors.

Be aware that you should implement path-fn (which generates the value for the :path label) if you have any kind of ID in your URIs – since otherwise there will be one timeseries created for each observed ID.

For additional labels in the metrics use label-fn, which takes the request as a first argument and the response as the second argument.

Since collectors, and thus their labels, have to be registered before they are ever used, you need to provide the list of :labels when calling initialize.

wrap-metrics

(wrap-metrics handler registry & [{:keys [path path-fn on-request label-fn], :or {path "/metrics", path-fn :uri, label-fn (constantly {})}, :as options}])

A combination of wrap-instrumentation and wrap-metrics-expose.

Note that you have to call initialize on your registry first, to register the necessary collectors.

Be aware that you should implement path-fn (which generates the value for the :path label) if you have any kind of ID in your URIs – since otherwise there will be one timeseries created for each observed ID.

For additional labels in the metrics use label-fn, which takes the request as a first argument and the response as the second argument.

Since collectors, and thus their labels, have to be registered before they are ever used, you need to provide the list of :labels when calling initialize.

wrap-metrics-expose

(wrap-metrics-expose handler registry & [{:keys [path on-request], :or {path "/metrics", on-request identity}}])

Expose Prometheus metrics at the given constant URI using the text format.

If :on-request is given, it will be called with the collector registry whenever a request comes in (the result will be ignored). This lets you use the Prometheus scraper as a trigger for metrics collection.