Carbonapi is a Go-based Graphite frontend. It provides two binaries,
carbonzipper, that unify responses from multiple Graphite
backends and provide math and graphing functions.
This project is run in production at Booking.com. We are in the process of documenting its installation and setup, but can answer any questions that interested persons have.
CarbonAPI supports a significant subset of graphite functions; see COMPATIBILITY. In our testing it has shown to be 5x-10x faster than requesting data from graphite-web.
To build both the
carbonzipper binaries, run:
To build the binaries with debug symbols, run:
We do not provide packages for install at this time. Contact us if you're interested in those.
You can easily run the program with sample config provided in
config/ directory by running
We recommend using at least version 1.10 of Go. Booking.com builds its binaries with the latest stable release of Go at any time. The binaries likely compile on older versions of Go (at least 1.9), but we don't test the build against them because of problems with computing test coverage of the whole project.
At the moment, we only guarantee that Carbonapi can talk to the go-carbon Graphite store. We are interested in supporting other stores.
OSX Build Notes
Some additional steps may be needed to build carbonapi with cairo rendering on MacOSX.
brew install Caskroom/cask/xquartz brew install cairo --with-x11
Acknowledgement and history
This program was originally developed for Booking.com. With approval from Booking.com, the code was generalised and published as Open Source on GitHub, for which the author would like to express his gratitude.
This is Booking.com's fork of go-graphite/carbonapi. That project's current performance characteristics are not sufficient for our production needs, and we decided it had moved too far ahead for us to be able to improve them effectively. We thus reverted back to versions 0.9.2 of carbonapi and 0.74 of carbonzipper, and are moving more slowly in the same direction as the original project.
This code is licensed under the BSD-2 license.
Package backend defines an interface and RPC methods for communication with Graphite backends.
|Package backend defines an interface and RPC methods for communication with Graphite backends.|
Package mock defines a mock backend for testing.
|Package mock defines a mock backend for testing.|
Package net implements a backend that communicates over a network.
|Package net implements a backend that communicates over a network.|
Package types defines the main Graphite types we use internally.
|Package types defines the main Graphite types we use internally.|
Package carbonapi_v2 defines encoding and decoding methods for Find, Info and Render responses.
|Package carbonapi_v2 defines encoding and decoding methods for Find, Info and Render responses.|
Package json defines encoding and decoding methods for Find, Info and Render responses.
|Package json defines encoding and decoding methods for Find, Info and Render responses.|
Package pickle defines encoding methods for Find and Render responses.
|Package pickle defines encoding methods for Find and Render responses.|
Package util provides UUIDs for CarbonAPI and CarbonZipper HTTP requests.
|Package util provides UUIDs for CarbonAPI and CarbonZipper HTTP requests.|