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

Config format #5

Open
mattrco opened this issue Jul 19, 2014 · 1 comment
Open

Config format #5

mattrco opened this issue Jul 19, 2014 · 1 comment

Comments

@mattrco
Copy link
Owner

mattrco commented Jul 19, 2014

At the moment main.go provides a simple way of getting started just by passing a metric name. As more inputs/analyzers/outputs are added, this will be changed to provide an interactive demo/tutorial for exploring data.

Which leaves the question of how a user configures anode (running as a service) to wire up different plugins to form processing pipelines.

Heka's approach is to use toml, with named sections for each plugin. So anode's version might look like:

[Input]
type = "graphite_input"
metric = "app.latency"
tag = "app.latency"

[Analyzer]
type = "three_sigma"
tag = "app.latency"

[Output]
type = "graphite_output"
tag = "app.latency"
prefix = "anode.three_sigma"

The config file parser can then initialize each plugin with the config given and wire together pipelines based on the tag.

But pipelines are graphs, and there are already DSLs for describing graphs, like DOT:

digraph LatencyPipeline {
  graphite_input [metric = "app.latency"]; /* declare node */
  graphite_input -> three_sigma; /* declare edge and node with default config */
  graphite_output [prefix = "anode.three_sigma"];
  three_sigma -> graphite_output;
}

Support for arbitrary config keys would be required so it may be beyond the capabilities of DOT, but it's a reasonable starting point.

Suggestions and links to prior art welcome.

@mattrco
Copy link
Owner Author

mattrco commented Jul 20, 2014

I'm leaning towards using an extended version of DOT, by changing the BNF to support more attributes, then using gocc to generate a parser.

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

1 participant