feat(agent): Add option to skip re-running processors after aggregators (#14882)
This commit is contained in:
parent
3929a42504
commit
f0656a4910
|
|
@ -136,7 +136,7 @@ func (a *Agent) Run(ctx context.Context) error {
|
||||||
var au *aggregatorUnit
|
var au *aggregatorUnit
|
||||||
if len(a.Config.Aggregators) != 0 {
|
if len(a.Config.Aggregators) != 0 {
|
||||||
aggC := next
|
aggC := next
|
||||||
if len(a.Config.AggProcessors) != 0 {
|
if len(a.Config.AggProcessors) != 0 && !a.Config.Agent.SkipProcessorsAfterAggregators {
|
||||||
aggC, apu, err = a.startProcessors(next, a.Config.AggProcessors)
|
aggC, apu, err = a.startProcessors(next, a.Config.AggProcessors)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -1013,7 +1013,7 @@ func (a *Agent) runTest(ctx context.Context, wait time.Duration, outputC chan<-
|
||||||
var au *aggregatorUnit
|
var au *aggregatorUnit
|
||||||
if len(a.Config.Aggregators) != 0 {
|
if len(a.Config.Aggregators) != 0 {
|
||||||
procC := next
|
procC := next
|
||||||
if len(a.Config.AggProcessors) != 0 {
|
if len(a.Config.AggProcessors) != 0 && !a.Config.Agent.SkipProcessorsAfterAggregators {
|
||||||
procC, apu, err = a.startProcessors(next, a.Config.AggProcessors)
|
procC, apu, err = a.startProcessors(next, a.Config.AggProcessors)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -1112,7 +1112,7 @@ func (a *Agent) runOnce(ctx context.Context, wait time.Duration) error {
|
||||||
var au *aggregatorUnit
|
var au *aggregatorUnit
|
||||||
if len(a.Config.Aggregators) != 0 {
|
if len(a.Config.Aggregators) != 0 {
|
||||||
procC := next
|
procC := next
|
||||||
if len(a.Config.AggProcessors) != 0 {
|
if len(a.Config.AggProcessors) != 0 && !a.Config.Agent.SkipProcessorsAfterAggregators {
|
||||||
procC, apu, err = a.startProcessors(next, a.Config.AggProcessors)
|
procC, apu, err = a.startProcessors(next, a.Config.AggProcessors)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -222,9 +222,7 @@ func TestCases(t *testing.T) {
|
||||||
// Process expected metrics and compare with resulting metrics
|
// Process expected metrics and compare with resulting metrics
|
||||||
options := []cmp.Option{
|
options := []cmp.Option{
|
||||||
testutil.IgnoreTags("host"),
|
testutil.IgnoreTags("host"),
|
||||||
}
|
testutil.IgnoreTime(),
|
||||||
if expected[0].Time().IsZero() {
|
|
||||||
options = append(options, testutil.IgnoreTime())
|
|
||||||
}
|
}
|
||||||
testutil.RequireMetricsEqual(t, expected, actual, options...)
|
testutil.RequireMetricsEqual(t, expected, actual, options...)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
metric value=420
|
||||||
|
metric value_min=4200,value_max=4200
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
metric value=42.0
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Test for not skipping processors after running aggregators
|
||||||
|
[agent]
|
||||||
|
omit_hostname = true
|
||||||
|
skip_processors_after_aggregators = false
|
||||||
|
|
||||||
|
[[inputs.file]]
|
||||||
|
files = ["testcases/aggregators-rerun-processors/input.influx"]
|
||||||
|
data_format = "influx"
|
||||||
|
|
||||||
|
[[processors.starlark]]
|
||||||
|
source = '''
|
||||||
|
def apply(metric):
|
||||||
|
for k, v in metric.fields.items():
|
||||||
|
if type(v) == "float":
|
||||||
|
metric.fields[k] = v * 10
|
||||||
|
return metric
|
||||||
|
'''
|
||||||
|
|
||||||
|
[[aggregators.minmax]]
|
||||||
|
period = "1s"
|
||||||
|
drop_original = false
|
||||||
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
metric value=420
|
||||||
|
metric value_min=420,value_max=420
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
metric value=42.0
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Test for skipping processors after running aggregators
|
||||||
|
[agent]
|
||||||
|
omit_hostname = true
|
||||||
|
skip_processors_after_aggregators = true
|
||||||
|
|
||||||
|
[[inputs.file]]
|
||||||
|
files = ["testcases/aggregators-skip-processors/input.influx"]
|
||||||
|
data_format = "influx"
|
||||||
|
|
||||||
|
[[processors.starlark]]
|
||||||
|
source = '''
|
||||||
|
def apply(metric):
|
||||||
|
for k, v in metric.fields.items():
|
||||||
|
if type(v) == "float":
|
||||||
|
metric.fields[k] = v * 10
|
||||||
|
return metric
|
||||||
|
'''
|
||||||
|
|
||||||
|
[[aggregators.minmax]]
|
||||||
|
period = "1s"
|
||||||
|
drop_original = false
|
||||||
|
|
||||||
|
|
@ -94,3 +94,8 @@
|
||||||
## stateful plugins on termination of Telegraf. If the file exists on start,
|
## stateful plugins on termination of Telegraf. If the file exists on start,
|
||||||
## the state in the file will be restored for the plugins.
|
## the state in the file will be restored for the plugins.
|
||||||
# statefile = ""
|
# statefile = ""
|
||||||
|
|
||||||
|
## Flag to skip running processors after aggregators
|
||||||
|
## By default, processors are run a second time after aggregators. Changing
|
||||||
|
## this setting to true will skip the second run of processors.
|
||||||
|
# skip_processors_after_aggregators = false
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,11 @@ type AgentConfig struct {
|
||||||
// Flag to always keep tags explicitly defined in the global tags section
|
// Flag to always keep tags explicitly defined in the global tags section
|
||||||
// and ensure those tags always pass filtering.
|
// and ensure those tags always pass filtering.
|
||||||
AlwaysIncludeGlobalTags bool `toml:"always_include_global_tags"`
|
AlwaysIncludeGlobalTags bool `toml:"always_include_global_tags"`
|
||||||
|
|
||||||
|
// Flag to skip running processors after aggregators
|
||||||
|
// By default, processors are run a second time after aggregators. Changing
|
||||||
|
// this setting to true will skip the second run of processors.
|
||||||
|
SkipProcessorsAfterAggregators bool `toml:"skip_processors_after_aggregators"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// InputNames returns a list of strings of the configured inputs.
|
// InputNames returns a list of strings of the configured inputs.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue