Skip to content
This repository was archived by the owner on Jan 25, 2026. It is now read-only.
This repository was archived by the owner on Jan 25, 2026. It is now read-only.

Config format #5

@mattrco

Description

@mattrco

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions