telegraf/plugins/inputs/exec
Cameron Sparr 434a14978f Allow exec plugin to parse line-protocol
closes #613
2016-01-30 19:40:45 +00:00
..
README.md Allow exec plugin to parse line-protocol 2016-01-30 19:40:45 +00:00
exec.go Allow exec plugin to parse line-protocol 2016-01-30 19:40:45 +00:00
exec_test.go Allow exec plugin to parse line-protocol 2016-01-30 19:40:45 +00:00

README.md

Exec Input Plugin

The exec plugin can execute arbitrary commands which output JSON or InfluxDB line-protocol.

If using JSON, only numeric values are parsed and turned into floats. Booleans and strings will be ignored.

Configuration

# Read flattened metrics from one or more commands that output JSON to stdout
[[inputs.exec]]
  # the command to run
  command = "/usr/bin/mycollector --foo=bar"

  # Data format to consume. This can be "json" or "influx" (line-protocol)
  # NOTE json only reads numerical measurements, strings and booleans are ignored.
  data_format = "json"

  # measurement name suffix (for separating different commands)
  name_suffix = "_mycollector"

Other options for modifying the measurement names are:

name_override = "measurement_name"
name_prefix = "prefix_"

Example 1

Let's say that we have the above configuration, and mycollector outputs the following JSON:

{
    "a": 0.5,
    "b": {
        "c": 0.1,
        "d": 5
    }
}

The collected metrics will be stored as fields under the measurement "exec_mycollector":

exec_mycollector a=0.5,b_c=0.1,b_d=5 1452815002357578567

Example 2

Now let's say we have the following configuration:

[[inputs.exec]]
  # the command to run
  command = "/usr/bin/line_protocol_collector"

  # Data format to consume. This can be "json" or "influx" (line-protocol)
  # NOTE json only reads numerical measurements, strings and booleans are ignored.
  data_format = "influx"

And line_protocol_collector outputs the following line protocol:

cpu,cpu=cpu0,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
cpu,cpu=cpu1,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
cpu,cpu=cpu2,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
cpu,cpu=cpu3,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
cpu,cpu=cpu4,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
cpu,cpu=cpu5,host=foo,datacenter=us-east usage_idle=99,usage_busy=1
cpu,cpu=cpu6,host=foo,datacenter=us-east usage_idle=99,usage_busy=1

You will get data in InfluxDB exactly as it is defined above, tags are cpu=cpuN, host=foo, and datacenter=us-east with fields usage_idle and usage_busy. They will receive a timestamp at collection time.