插件聚焦:Exec 和 Execd

导航至

Telegraf 包含 200 多个输入插件,这些插件从全面的来源列表中收集指标和事件。虽然这些插件涵盖了大量用例,但 Telegraf 提供了另一种机制,让用户能够满足几乎任何用例:ExecExecd 输入插件。这些插件允许用户从用户自定义的命令和来源收集指标和事件。

Telegraf input plugins - Exec and Execd chart

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 插件

借助 execexecd 插件,用户可以从几乎任何来源收集数据和指标。这些插件为用户提供了极大的灵活性和自由度,以便开始收集数据。结合免费的 InfluxDB 云端帐户,下载 Telegraf,查看完整的输入插件列表,并开始使用 Telegraf 收集指标!