telegraf/plugins/inputs/execd
Yamagishi Kazutoshi 1e7f714b2b
Add support for env variables to shim config (#7603)
2020-06-02 09:29:57 -04:00
..
examples Support Go execd plugins with shim (#7283) 2020-05-04 14:09:10 -04:00
shim Add support for env variables to shim config (#7603) 2020-06-02 09:29:57 -04:00
README.md shim improvements for docs, clean quit, and slow readers (#7452) 2020-05-05 10:14:57 -04:00
execd.go fix randomly failing CI test (#7514) 2020-05-21 16:53:07 -04:00
execd_posix.go fix randomly failing CI test (#7514) 2020-05-21 16:53:07 -04:00
execd_test.go fix issue with execd-multiline influx line protocol (#7463) 2020-05-05 17:43:45 -04:00
execd_windows.go fix randomly failing CI test (#7514) 2020-05-21 16:53:07 -04:00

README.md

Execd Input Plugin

The execd plugin runs an external program as a long-running daemon. The programs must output metrics in any one of the accepted Input Data Formats on the process's STDOUT, and is expected to stay running. If you'd instead like the process to collect metrics and then exit, check out the inputs.exec plugin.

The signal can be configured to send a signal the running daemon on each collection interval.

Program output on standard error is mirrored to the telegraf log.

Configuration:

[[inputs.execd]]
  ## Program to run as daemon
  command = ["telegraf-smartctl", "-d", "/dev/sda"]

  ## Define how the process is signaled on each collection interval.
  ## Valid values are:
  ##   "none"    : Do not signal anything. (Recommended for service inputs)
  ##               The process must output metrics by itself.
  ##   "STDIN"   : Send a newline on STDIN. (Recommended for gather inputs)
  ##   "SIGHUP"  : Send a HUP signal. Not available on Windows. (not recommended)
  ##   "SIGUSR1" : Send a USR1 signal. Not available on Windows.
  ##   "SIGUSR2" : Send a USR2 signal. Not available on Windows.
  signal = "none"

  ## Delay before the process is restarted after an unexpected termination
  restart_delay = "10s"

  ## Data format to consume.
  ## Each data format has its 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 = "influx"

Example

Daemon written in bash using STDIN signaling
#!/bin/bash

counter=0

while IFS= read -r LINE; do
    echo "counter_bash count=${counter}"
    let counter=counter+1
done
[[inputs.execd]]
  command = ["plugins/inputs/execd/examples/count.sh"]
  signal = "STDIN"
Go daemon using SIGHUP
package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
)

func main() {
    c := make(chan os.Signal, 1)
    signal.Notify(c, syscall.SIGHUP)

    counter := 0

    for {
        <-c

        fmt.Printf("counter_go count=%d\n", counter)
        counter++
    }
}

[[inputs.execd]]
  command = ["plugins/inputs/execd/examples/count.go.exe"]
  signal = "SIGHUP"
Ruby daemon running standalone
#!/usr/bin/env ruby

counter = 0

loop do
  puts "counter_ruby count=#{counter}"
  STDOUT.flush

  counter += 1
  sleep 1
end
[[inputs.execd]]
  command = ["plugins/inputs/execd/examples/count.rb"]
  signal = "none"