插件聚焦: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 收集
可选的 signal 设置可以指示 Telegraf 在 STDIN 上传递一个换行符,或一些其他信号到进程,以收集新数据。当用户希望 Telegraf 通知命令是时候运行收集时,signal 设置非常有用。
例如,以下 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 云端帐户,下载 Telegraf,查看完整的输入插件列表,并开始使用 Telegraf 收集指标!