diff --git a/CHANGELOG.md b/CHANGELOG.md index aae65b99a..a9803116e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,9 @@ based on _prefix_ in addition to globs. This means that a filter like - [#1107](https://github.com/influxdata/telegraf/issues/1107): Support lustre2 job stats. Thanks @hanleyja! - [#1122](https://github.com/influxdata/telegraf/pull/1122): Support setting config path through env variable and default paths. - [#1128](https://github.com/influxdata/telegraf/pull/1128): MongoDB jumbo chunks metric for MongoDB input plugin +- [#1110](https://github.com/influxdata/telegraf/pull/1110): Sanitize * to - in graphite serializer. Thanks @goodeggs! +- [#1118](https://github.com/influxdata/telegraf/pull/1118): Sanitize Counter names for `win_perf_counters` input. +- [#1127](https://github.com/influxdata/telegraf/pull/1127): Support for glob patterns in exec plugin commands configuration. ### Bugfixes diff --git a/plugins/inputs/exec/README.md b/plugins/inputs/exec/README.md index a75ae7856..bcb92ef29 100644 --- a/plugins/inputs/exec/README.md +++ b/plugins/inputs/exec/README.md @@ -6,22 +6,32 @@ Please also see: [Telegraf Input Data Formats](https://github.com/influxdata/tel #### Configuration -In this example a script called ```/tmp/test.sh``` and a script called ```/tmp/test2.sh``` -are configured for ```[[inputs.exec]]``` in JSON format. +In this example a script called ```/tmp/test.sh```, a script called ```/tmp/test2.sh```, and +all scripts matching glob pattern ```/tmp/collect_*.sh``` are configured for ```[[inputs.exec]]``` +in JSON format. Glob patterns are matched on every run, so adding new scripts that match the pattern +will cause them to be picked up immediately. ``` # Read flattened metrics from one or more commands that output JSON to stdout [[inputs.exec]] - # Shell/commands array - commands = ["/tmp/test.sh", "/tmp/test2.sh"] + ## Full path to executable with parameters, + ## or a glob pattern to run all matching files. + ## the glob pattern will be run at every interval, so new files will + ## automatically be picked up. + commands = ["/tmp/test.sh", "/usr/bin/mycollector --foo=bar", "/tmp/collect_*.sh"] - # Data format to consume. - # NOTE json only reads numerical measurements, strings and booleans are ignored. - data_format = "json" + ## Timeout for each command to complete. + timeout = "5s" - # measurement name suffix (for separating different commands) + ## measurement name suffix (for separating different commands) name_suffix = "_mycollector" + ## Data format to consume. + ## Each data format has it's own unique set of configuration options, read + ## more about them here: + ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md + data_format = "json" + ## Below configuration will be used for data_format = "graphite", can be ignored for other data_format ## If matching multiple measurement files, this string will be used to join the matched values. #separator = "." @@ -180,4 +190,3 @@ sensu.metric.net.server0.eth0.rx_dropped 0 1444234982 The templates configuration will be used to parse the graphite metrics to support influxdb/opentsdb tagging store engines. More detail information about templates, please refer to [The graphite Input](https://github.com/influxdata/influxdb/blob/master/services/graphite/README.md) - diff --git a/plugins/inputs/exec/exec.go b/plugins/inputs/exec/exec.go index c1b2092e8..b739fc4c6 100644 --- a/plugins/inputs/exec/exec.go +++ b/plugins/inputs/exec/exec.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" "os/exec" + "path/filepath" "sync" "syscall" "time" @@ -18,8 +19,11 @@ import ( ) const sampleConfig = ` - ## Commands array - commands = ["/tmp/test.sh", "/usr/bin/mycollector --foo=bar"] + ## Full path to executable with parameters, + ## or a glob pattern to run all matching files. + ## the glob pattern will be run at every interval, so new files will + ## automatically be picked up. + commands = ["/tmp/test.sh", "/usr/bin/collector --foo=bar", "/tmp/collect_*.sh"] ## Timeout for each command to complete. timeout = "5s" @@ -150,10 +154,19 @@ func (e *Exec) Gather(acc telegraf.Accumulator) error { e.Command = "" } - e.errChan = make(chan error, len(e.Commands)) + commands := make([]string, len(e.Commands)) + for _, pattern := range e.Commands { + matches, err := filepath.Glob(pattern) + if err != nil { + return err + } + commands = append(commands, matches...) + } - e.wg.Add(len(e.Commands)) - for _, command := range e.Commands { + e.errChan = make(chan error, len(commands)) + + e.wg.Add(len(commands)) + for _, command := range commands { go e.ProcessCommand(command, acc) } e.wg.Wait()