feat(processors.noop): Noop processor (#14297)
This commit is contained in:
parent
a590a1b5b3
commit
0a63e2e1aa
|
|
@ -0,0 +1,5 @@
|
|||
//go:build !custom || processors || processors.noop
|
||||
|
||||
package all
|
||||
|
||||
import _ "github.com/influxdata/telegraf/plugins/processors/noop" // register plugin
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
# Noop Processor Plugin
|
||||
|
||||
The noop processor plugin does nothing to metrics. Instead it can be used to
|
||||
apply the global configuration options after other processing. Global config
|
||||
options like tagpass, fieldpass, and others are applied before a processor,
|
||||
aggregator, or output. As such a user might want to apply these after doing
|
||||
processing, but before an output or another processor.
|
||||
|
||||
## Global configuration options <!-- @/docs/includes/plugin_config.md -->
|
||||
|
||||
In addition to the plugin-specific configuration settings, plugins support
|
||||
additional global and plugin configuration settings. These settings are used to
|
||||
modify metrics, tags, and field or create aliases and configure ordering, etc.
|
||||
See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
||||
|
||||
[CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins
|
||||
|
||||
## Configuration
|
||||
|
||||
```toml @sample.conf
|
||||
# Do nothing processor
|
||||
[[processors.noop]]
|
||||
|
||||
## Metric Filtering
|
||||
## The following options provide mechanisms to include or exclude entire
|
||||
## metrics. For specific details and examples see the metric filtering docs:
|
||||
## https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#metric-filtering
|
||||
|
||||
## Metric Selectors - These will drop entire metrics
|
||||
## Filter on metric name or tag key + value
|
||||
# namepass = []
|
||||
# namedrop = []
|
||||
# tagpass = {}
|
||||
# tagdrop = {}
|
||||
|
||||
## Filter on Common Expression Language (CEL) expression
|
||||
# metricpass = ""
|
||||
|
||||
## Metric Modifiers - These will drop tags and fields from metrics
|
||||
## Filter on tag key or field key
|
||||
# taginclude = []
|
||||
# tagexclude = []
|
||||
# fieldpass = []
|
||||
# fielddrop = []
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
Consider a use-case where you have processed a metric based on a tag, but no
|
||||
longer need that tag for additional processing:
|
||||
|
||||
```toml
|
||||
[[processors.ifname]]
|
||||
order = 1
|
||||
...
|
||||
|
||||
[[processors.noop]]
|
||||
order = 2
|
||||
tagexclude = ["useless_tag"]
|
||||
```
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
//go:generate ../../../tools/readme_config_includer/generator
|
||||
package noop
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/plugins/processors"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
var sampleConfig string
|
||||
|
||||
type Noop struct{}
|
||||
|
||||
func (*Noop) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (p *Noop) Apply(in ...telegraf.Metric) []telegraf.Metric {
|
||||
return in
|
||||
}
|
||||
|
||||
func init() {
|
||||
processors.Add("noop", func() telegraf.Processor {
|
||||
return &Noop{}
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package noop
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestNoopNoMetric(t *testing.T) {
|
||||
processor := Noop{}
|
||||
|
||||
m := []telegraf.Metric{}
|
||||
actual := processor.Apply(m...)
|
||||
require.Empty(t, actual)
|
||||
testutil.RequireMetricsEqual(t, m, actual)
|
||||
}
|
||||
|
||||
func TestNoopSingleMetric(t *testing.T) {
|
||||
processor := Noop{}
|
||||
|
||||
m := []telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"test",
|
||||
map[string]string{
|
||||
"tag": "tag_value",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"value": 42,
|
||||
},
|
||||
time.Now(),
|
||||
telegraf.Gauge,
|
||||
),
|
||||
}
|
||||
actual := processor.Apply(m...)
|
||||
require.Len(t, actual, 1)
|
||||
testutil.RequireMetricsEqual(t, m, actual)
|
||||
}
|
||||
|
||||
func TestNoopMultipleMetrics(t *testing.T) {
|
||||
processor := Noop{}
|
||||
|
||||
m := []telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"test",
|
||||
map[string]string{
|
||||
"tag": "tag_value",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"value": 42,
|
||||
},
|
||||
time.Now(),
|
||||
telegraf.Gauge,
|
||||
),
|
||||
testutil.MustMetric(
|
||||
"test",
|
||||
map[string]string{
|
||||
"tag": "tag_value",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"value": 42,
|
||||
},
|
||||
time.Now(),
|
||||
telegraf.Gauge,
|
||||
),
|
||||
}
|
||||
actual := processor.Apply(m...)
|
||||
require.Len(t, actual, 2)
|
||||
testutil.RequireMetricsEqual(t, m, actual)
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# Do nothing processor
|
||||
[[processors.noop]]
|
||||
|
||||
## Metric Filtering
|
||||
## The following options provide mechanisms to include or exclude entire
|
||||
## metrics. For specific details and examples see the metric filtering docs:
|
||||
## https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#metric-filtering
|
||||
|
||||
## Metric Selectors - These will drop entire metrics
|
||||
## Filter on metric name or tag key + value
|
||||
# namepass = []
|
||||
# namedrop = []
|
||||
# tagpass = {}
|
||||
# tagdrop = {}
|
||||
|
||||
## Filter on Common Expression Language (CEL) expression
|
||||
# metricpass = ""
|
||||
|
||||
## Metric Modifiers - These will drop tags and fields from metrics
|
||||
## Filter on tag key or field key
|
||||
# taginclude = []
|
||||
# tagexclude = []
|
||||
# fieldpass = []
|
||||
# fielddrop = []
|
||||
Loading…
Reference in New Issue