We at Spotify have been developing an metrics and event agent who's only purpose is to receive and forward metrics and events to various system.
It just so happens that the internal representation for metrics matches really well with what is described in the Metrics 2.0 specification.
The format is specified
in the docs. And with the reference
JSON protocol there is a basic description of the internal representation. You have tags (list of strings) and attributes (a map, string -> string). An attribute for would be the Metrics 2.0 tag.
Check it out, will probably add a plugin for metrics write protocol in the soon future.
I have two concerns with the specification.
The specification does define escape sequences for control characters in tags, meaning that =, (space) and , are effectively reserved and there is no way to work around that. This has bitten us before when clients have been acting as thin translation layers allowing broken data to slip through. The spec should either strongly emphasize that these characters are reserved and should be dropped/ignored/whatnot. Or define escape sequences so we can build strong libraries.
The unit tag is mandatory and has a set of specifications, however most metrics are rates over some period (requests/minute) and this has implications over further aggregations (ex. find the average between two time series).
From my experience so far, trying to standardize all available units, periods and aggregation types at the collector is a difficult endeavor, it could unnecessarily complicate the specification and surrounding systems.
Our approach is instead to present the end user with the available raw metric, and then in the appropriate UI add support for them to define its unit through the way the various time series are aggregated and presented.
Thanks for the initiative!