插件亮点:Exec & Execd
作者:Josh Powers / 用例,产品,开发者
2021年12月02日
导航至
Telegraf 内置超过200+输入插件,从广泛的来源收集指标和事件。虽然这些插件涵盖了大量用例,但Telegraf还提供另一种机制,使用户能够满足几乎任何用例的需求:Exec 和 Execd 输入插件。这些插件允许用户从自定义命令和用户指定的来源收集指标和事件。
Exec 插件
exec
输入插件允许用户在每个收集间隔运行任意命令以收集数据和指标。该插件要求每个命令返回任何接受的输入数据格式的数据。
例如,考虑以下可能的用例
- 与专有或开发中的系统交互
- 从高度独特的使用场景中收集自定义输出
- 直接执行程序以生成和收集数据
插件配置简单,只需提供要运行的命令列表和输出数据格式
[[inputs.exec]]
data_format = "json"
commands = [
"/home/ubuntu/script.sh",
"/usr/bin/cmd --json --option=value"
]
请注意,在每个收集间隔中,所有命令都并行运行,并且命令数组中的每个条目都必须产生有效输出。这些命令必须存在于运行telegraf进程的用户的环境变量PATH
中。最后,如果用户需要执行任何设置或配置,应在用户指定的命令中完成。
用户可以使用多个exec
段和name_suffix选项来区分它们。例如,将“_example”后缀附加到指标名称上,将“exec”更改为“exec_example”。
[[inputs.exec]]
name_suffix = "_script1"
data_format = "influx"
commands = ["/usr/bin/script1.sh --json --option=value"]
[[inputs.exec]]
name_suffix = "_script2"
data_format = "json"
commands = ["/usr/bin/script2.sh --json --option=value"]
Execd 插件
execd
输入插件允许用户将外部命令作为长时间运行的守护进程运行。插件将根据数据到来处理数据,或将信号发送以接收数据。该插件还要求每个命令返回任何接受的输入数据格式的输出数据。
execd
非常适合接收流式、基于事件的 数据。指定的 execd
命令只运行一次,而不是像 exec
一样在每个收集间隔中不断执行命令。一旦运行,Telegraf 就期望命令将数据传递到 STDOUT。
以下是一个示例配置
[[inputs.execd]]
command = ["/usr/bin/script.sh"]
data_format = "json"
Execd 收集
可选的信号设置可以指示 Telegraf 向进程传递换行符或其它信号以收集新数据。信号设置在用户希望 Telegraf 通知命令运行收集时间的情况下非常有用。
例如,以下 Go 代码将监听 STDIN 上的换行符,并在接收到时打印计数器
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
counter := 0
reader := bufio.NewReader(os.Stdin)
for {
reader.ReadString('\n')
fmt.Printf("go_example count=%d\n", counter)
counter++
}
}
用户可以将此代码修改为运行命令以收集特定数据而不是简单的打印。
开始使用 Exec 和 Execd 插件
使用 exec
和 execd
插件,用户可以从几乎任何来源收集数据和指标。这些插件为用户提供了大量灵活性和自由度来开始收集数据。结合免费 InfluxDB Cloud 账户,下载 Telegraf,查看完整的输入插件列表,并开始使用 Telegraf 收集指标!