0b61c01550 | ||
---|---|---|
assets | ||
examples | ||
handbook | ||
schema | ||
src | ||
tests | ||
.directory | ||
.gitignore | ||
.travis.yml | ||
CHANGES.md | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
Makefile | ||
README.md | ||
README.md.skt.md | ||
build.rs |
README.md
dipstick
A one-stop shop metrics library for Rust applications with lots of features,
minimal impact on applications and a choice of output to downstream systems.
Features
Dipstick is a toolkit to help all sorts of application collect and send out metrics. As such, it needs a bit of set up to suit one's needs. Skimming through the handbook handbook should help you get an idea of the possible configurations.
In short, dipstick-enabled apps can:
- Send metrics to console, log, statsd, graphite or prometheus (one or many)
- Serve metrics over HTTP
- Locally aggregate the count, sum, mean, min, max and rate of metric values
- Publish aggregated metrics, on schedule or programmatically
- Customize output statistics and formatting
- Define global or scoped (e.g. per request) metrics
- Statistically sample metrics (statsd)
- Choose between sync or async operation
- Choose between buffered or immediate output
- Switch between metric backends at runtime
For convenience, dipstick builds on stable Rust with minimal, feature-gated dependencies.
Non-goals
For performance reasons, dipstick will not
- plot graphs
- send alerts
- track histograms
These are all best done by downstream timeseries visualization and monitoring tools.
Show me the code!
Here's a basic aggregating & auto-publish counter metric:
let bucket = Bucket::new();
bucket.set_target(Text::output(io::stdout()));
bucket.flush_every(Duration::from_secs(3));
let counter = bucket.counter("counter_a");
counter.count(8)
Persistent apps wanting to declare static metrics will prefer using the metrics!
macro:
metrics! { METRICS = "my_app" =>
pub COUNTER: Counter = "my_counter";
}
fn main() {
METRICS.set_target(Graphite::output("graphite.com:2003").unwrap());
COUNTER.count(32);
}
For sample applications see the examples. For documentation see the handbook.
To use Dipstick in your project, add the following line to your Cargo.toml
in the [dependencies]
section:
dipstick = "0.7.0"
License
Dipstick is licensed under the terms of the Apache 2.0 and MIT license.