2020-02-28 18:46:03 +00:00
|
|
|
# Execd Input Plugin
|
|
|
|
|
2020-02-28 18:58:56 +00:00
|
|
|
The `execd` plugin runs an external program as a daemon. The programs must output metrics in any one of the accepted
|
|
|
|
[Input Data Formats](https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md) on its standard output.
|
2020-02-28 18:46:03 +00:00
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
```toml
|
2020-02-28 18:58:56 +00:00
|
|
|
[[inputs.execd]]
|
2020-02-28 18:46:03 +00:00
|
|
|
## 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.
|
|
|
|
## The process must output metrics by itself.
|
|
|
|
## "STDIN" : Send a newline on STDIN.
|
|
|
|
## "SIGHUP" : Send a HUP signal. Not available on Windows.
|
|
|
|
## "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
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
counter=0
|
|
|
|
|
|
|
|
while IFS= read -r LINE; do
|
|
|
|
echo "counter_bash count=${counter}"
|
|
|
|
let counter=counter+1
|
|
|
|
done
|
|
|
|
```
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[[inputs.execd]]
|
|
|
|
command = ["plugins/inputs/execd/examples/count.sh"]
|
|
|
|
signal = "STDIN"
|
|
|
|
```
|
|
|
|
|
|
|
|
##### Go daemon using SIGHUP
|
|
|
|
|
|
|
|
```go
|
|
|
|
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++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[[inputs.execd]]
|
|
|
|
command = ["plugins/inputs/execd/examples/count.go.exe"]
|
|
|
|
signal = "SIGHUP"
|
|
|
|
```
|
|
|
|
|
|
|
|
##### Ruby daemon running standalone
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
#!/usr/bin/env ruby
|
|
|
|
|
|
|
|
counter = 0
|
|
|
|
|
|
|
|
loop do
|
|
|
|
puts "counter_ruby count=#{counter}"
|
|
|
|
STDOUT.flush
|
|
|
|
|
|
|
|
counter += 1
|
|
|
|
sleep 1
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[[inputs.execd]]
|
|
|
|
command = ["plugins/inputs/execd/examples/count.rb"]
|
|
|
|
signal = "none"
|
|
|
|
```
|