Uber has released its large-scale metrics platform for Prometheus, M3, for others to try and build upon, demonstrating that even a ride-sharing and food delivering colossus has to ask for a little help from the broader tech community every now and again.
M3 is built on M3DB, a distributed timeseries database the company uses to house large-scale metrics over long retention time windows. To get it to work with popular Prometheus, there’s also the M3 Coordinator, which is a sidecar for the monitoring and alerting project, that provides a global query and storage interface on top of M3DB clusters. The Coordinator can also be used to perform downsampling, retention and aggregations on subsets of metrics, if needed.
The M3 platform can serve as a remote storage backend for Prometheus, which isn’t limited by single nodes as the latter, but provides a scalable, configurable multi-tenant store. Some of the guiding principles while designing the project were giving engineers as much storage as possible for the least amount of hardware speed, compressing data as much as possible, keeping access time down, avoiding compaction where possible, and not requiring a lot of operational attention to run with a high write volume.
M3 was initially built out of other open source products, namely statsite for aggregation, the Cassandra database with Data Tiered Compaction Strategy for time series storage, and Elasticsearch for indexing. According to Uber’s Rob Skillington the company switched to their own solution when operational burdens, and cost efficiency became too much, and more features were needed.
Along with presenting the project to the public goes a call to help the infrastructure people at Uber by submitting feedback via proposals, issues, and pull requests. To try the platform out, users have to set up a M3DB cluster first, so that they can store and query metrics, and install the Coordinator sidecar to their Prometheus instances. Documentation is available, but still in its early stages, so that a visit to the project’s Gitter or mailing list might be necessary before it all works.
In the coming months the team behind M3 plans to get the reverse index out of beta state, and add ways to use StatsD for the aggregation of statistics and Graphite as a monitoring tool. There’s also an UI in the works which is supposed to make authoring of retention and aggregation downsampling rules easier.
M3 isn’t the first Uber open source project to see the light. The company’s software development teams have released quite a few data visualisation tools into the wild and are also active in the backend tooling department. One of the most prominent examples has to be distributed tracing system Jaeger, which got accepted into the Cloud Native Computing Foundation, where it is fostered as incubating project at the moment.