Metrictank is a cassandra-backed, metrics2.0 based, multi-tenant timeseries database for Graphite and friends
metrictank is a timeseries database, inspired by the Facebook gorilla paper. Most notably, it employs the compression mechanism described in the paper to dramatically lower storage overhead, as well as data chunking to lower the load on cassandra. Graphite users are first-class citizens.
While GrafanaLabs has been running metrictank in production since december 2015, there are still plenty of kinks to work out and bugs to fix. It should be considered an alpha project.
- no performance/availability isolation between tenants per instance. (only data isolation)
- minimum computation locality: we move the data from storage to processing code, which is both metrictank and graphite.
- the datastructures can use performance engineering. A Go GC issue may occasionally inflate response times.
- the native input protocol is inefficient. Should not send all metadata with each point (wip
- we use metrics2.0 in native input protocol and indexes, but barely do anything with it yet.
- can't overwrite old data. We support reordering the most recent time window but that's it. (unless you restart MT)
- upgrades / process restarts requires running multiple instances (potentially only for the duration of the maintenance) and re-assigning the primary role. Otherwise data loss of current chunks will be incurred. See operations guide
- clustering works best with an orchestrator like kubernetes. MT itself does not automate master promotions. See clustering for more.
- only float64 values. Ints and bools currently stored as floats (works quite well due to the gorilla compression), No text support.
- only uint32 unix timestamps in second resolution. For higher resolution, consider streaming directly to grafana
- no data locality: doesn't seem needed yet to put related series together.
- 100% open source
- graphite is a first class citizen. As of graphite-1.0.1, metrictank can be used as a graphite CLUSTER_SERVER.
- can also be used with Prometheus (but the experience won't be as good as something built just for prometheus, which we're also working on)
- accurate, flexible rollups by storing min/max/sum/count (which also gives us average). So we can do consolidation (combined runtime+archived) accurately and correctly, unlike most other graphite backends like whisper
- metrictank acts as a writeback RAM cache for recent data.
- flexible tenancy: can be used as single tenant or multi tenant. Selected data can be shared across all tenants.
- input options: carbon, metrics2.0, kafka. (soon: json or msgpack over http)
- guards against excessive data requests
- efficient data compression and efficient use of Cassandra.
- Overview
- Quick start using docker
- Installation guides
- Configuration
- Memory server
- Compression tips
- Cassandra
- Kafka
- Inputs
- Metrics
- Operations
- Tools
-
we aim to keep
master
stable and vet code before merging to master -
We're pre-1.0 but adopt semver for our
0.MAJOR.MINOR
format. The rules are simple:- MAJOR version for incompatible API or functionality changes
- MINOR version when you add functionality in a backwards-compatible manner, and
We don't do patch level releases since minor releases are frequent enough.
Copyright 2016-2018 Dieter Plaetinck, Anthony Woods, Jeremy Bingham, Damian Gryski, raintank inc
This software is distributed under the terms of the GNU Affero General Public License.