Skip to content

Graphite cluster backend with ClickHouse support

License

Notifications You must be signed in to change notification settings

skbkontur/graphite-clickhouse

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

deb rpm

graphite-clickhouse

Graphite cluster backend with ClickHouse support

Work scheme

stack.png

Gray components are optional or alternative

TL;DR

Preconfigured docker-compose

Docker

Docker images are available on packages page.

Compatibility

Build

Required golang 1.18+

# build binary
git clone https://github.com/lomik/graphite-clickhouse.git
cd graphite-clickhouse
make

Installation

  1. Setup Yandex ClickHouse and carbon-clickhouse
  2. Setup and configure graphite-clickhouse
  3. Add graphite-clickhouse host:port to graphite-web CLUSTER_SERVERS

Configuration

See configuration documentation.

Special headers processing

Some HTTP headers are processed specially by the service

Request headers

Grafana headers: X-Dashboard-Id, X-Grafana-Org-Id, and X-Panel-Id are logged and passed further to the ClickHouse.

Debug headers (see debugging.md for details):

  • X-Gch-Debug-External-Data - when this header is set to anything and every of directory, directory-perm, and external-data-perm parameters in [debug] is set and valid, service will save the dump of external data tables in the directory for debug output.
  • X-Gch-Debug-Output - header to enable special processing for format=carbonapi_v3_pb and format=json render output.
  • X-Gch-Debug-Protobuf - header enables the original marshallers for protobuf and carbonapi_v3_pb to check the binary data integrity.

Response headers

  • X-Gch-Request-Id - the current request ID.
  • X-Cached-Find - Flag for find cache hit.

Run on same host with old graphite-web 0.9.x

By default graphite-web won't connect to CLUSTER_SERVER on localhost. Cheat:

class ForceLocal(str):
    def split(self, *args, **kwargs):
        return ["8.8.8.8", "8080"]

CLUSTER_SERVERS = [ForceLocal("127.0.0.1:9090")]

About

Graphite cluster backend with ClickHouse support

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • Go 94.6%
  • Smarty 4.8%
  • Other 0.6%