[][src]Crate epimetheus

An easy-to-use prometheus-compatible metrics library

Writing metrics

A "metric" is a named value of type f64. There is a single global set of metrics; you can update it from any thread.

use epimetheus::metric;


If you increment a metric which has never been set, it is considered to start from zero.

// now barqux = 6.5


The base part of the name is fixed statically at at compile-time. However, a metric's name may also include "labels", which are dynamic.

let user_id = 7;

The label values can be anything which implements Display.

// enum LoginResult { Success, BadUsername, BadPassword }
// impl Display for LoginResult { ... }

let result = try_log_in(user_id, passwd);
metric!(login_attempts{user=user_id, result=result}).add(1.0);

Labels can be useful, but they come at a performance cost (see README).

Seeing your metrics

You need to call spawn_http_server() somewhere near the start of your program. (Personally I do it straight after I initialize the log backend.) This will spawn a new thread which will serve metrics over HTTP.


Connect to the server to see the current values of all metrics. Metrics appear in the output after being updated for the first time.

$ curl localhost:9898
barqux 6.5
foobar 20
login_attempts{result="Success",user="7"} 1
login_attempts{user="7"} 1

By default the HTTP server runs on port 9898, but you can change this by setting the RUST_METRICS_PORT environment variable. Tip: If you want to specify the metrics port in your application itself, you can do so like this:

std::env::set_var("RUST_METRICS_PORT", "1234");

By the way, if you try to update a metric before calling spawn_http_server(), the update is thrown away silently, and quickly. This means that if you want to disable your metrics, you can just omit the call to spawn_http_server() and all your metric updates become fairly cheap no-ops.

if opts.enable_metrics {



Refer to a metric.



A named metric; it has a associated global mutable f64 value.



Get the port of a running server if it exists.