Foreword
You'll notice that almost anything mentioned here are extensions for Graphite. This is because metrics2.0 originated out of that ecosystem.
However by now metrics2.0 aims to cover IT/monitoring systems in general, not just graphite.
Protocol implementations
carbon2.0
In simple protocols like the carbon protocol, we can serialize the structured metric in a string representation that's compatible with graphite:
intrinsic_tags meta_tags value timestamp
site=mydomain mtype=rate unit=Req/s host=web12 agent=statsdaemon1 234 1234567890
- tags are space separated. Note double space to separate tags from meta_tags
- There are no specific requirements of order of tags. For intrinsic tags, pick an order and stick with it, otherwise the metric id will change
- In metrics storage databases we'll typically reference the timeseries by a key. If this is the serialized set of intrinsic tags of the metric2.0, things are clearer when working with the raw data, although you could also use another key and keep an explicit mapping. As long as you somehow associate the structured data model with the timeseries
- If you can't, you can leave out the key. it will be automatically assigned (n1, n2, ...) so that you can query for 'avg by n2' etc
raintank-messagepack
raintank.io is building an open source metrics2.0 protocol in Golang using messagepack encoding.
It's a work in progress, currently undocumented and can be currently
here.
Tools that currently support metrics 2.0
Statsdaemon (metric aggregator)
vimeo/statsdaemon is a statsd-like aggregator for graphite.
If it detects input metrics to be in metrics 2.0 format, it will report the output in metrics 2.0 format too.
So for example a metric with metric_type=count and unit=Req will result in a computed rate metric with tags metric_type=rate and unit=Req/s.
Graph-Explorer (Graphite dashboard)
Graph-Explorer is the prototypical metrics 2.0 dashboard implementation for graphite.
It leverages a database of metrics 2.0, which can be populated by carbon-tagger or structured_metrics (see below).
For given input queries, it takes care of the retrieving of metrics, grouping metrics into graphs, aggregations, processing (unit conversion etc), setting graph titles and labels, etc; and provides complete interactive graphs, dashboards and alerting rules based with very little manual work.
Metricsd (agent)
metricsd:
Inspired by diamond, golang metrics collection agent with native metrics2.0 support.
Carbon-tagger
Carbon-tagger is a service that you can put in your carbon2.0 pipeline,
it automatically maintains a database of all metrics 2.0 it sees, so that you can query it, e.g. with Graph-Explorer.
Structured Metrics
structured_metrics is
a small python utility that comes with Graph-Explorer, it updates metrics 2.0 in a database by parsing legacy graphite metrics.
I.e. you can use this to keep using your old, existing plugins as metrics 2.0.
It comes with plugins for diamond, collectd and openstack, it's easy to add your own.