Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prometheus read/write support #255

Open
iksaif opened this issue Mar 28, 2017 · 2 comments
Open

Prometheus read/write support #255

iksaif opened this issue Mar 28, 2017 · 2 comments
Assignees

Comments

@iksaif
Copy link
Contributor

iksaif commented Mar 28, 2017

See https://github.com/prometheus/prometheus/blob/HEAD/storage/remote/remote.proto for the protocol

@iksaif iksaif added this to the v0.9.0 milestone Jun 3, 2017
@iksaif
Copy link
Contributor Author

iksaif commented Jun 3, 2017

https://github.com/criteo/graphite-remote-adapter for the go part, which may have a biggraphite specific client.

First step: native Graphite implementation

Prefix all prometheus metrics by prometheus (or something configurable).
Always call /find first to get the list of metric, then call render. We call render once per metric (or maybe batch).
Only get data older than x amount of time (configurable)

  • metric => prometheus.metric
  • metric{label="value"} => prometheus.metric.** (check if we can stuf)
  • `metric{environment=~"staging|testing|development",method!="GET"} (metrics.**)

We will probably want to heavilly cache the results.

Second step: BigGraphite implementation

On the write path:

  • store the schema of the metric (how many labels, names of the labels). Put that in metrics_metadata.
  • in the metrics table, store the value of the labels as components.
  • cache the schema in carbon, if we receive a metric that doesn't match the current schema, discard it
  • add a tool to change the schema (probably duplicating part of what bgutil copy does).

For the read path:

  • =: easy
  • !=, =~, !~: wildcard plus post-filtering. Might do some prefix matching in some cases.

First, use the Graphite read path and chose some special characters to do {label=value}. Later, have our own fast-path for prometheus.

@iksaif
Copy link
Contributor Author

iksaif commented Jun 14, 2017

@iksaif iksaif removed this from the v0.9.0 milestone Dec 19, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants