如何使用Go外部插件与Telegraf交互?
我有一个虚拟的GO插件,使用它,我想把数据发送到telegraf。但是,我无法找到任何方法将数据从插件发送到telegraf。 这个外部Go插件如下所示如何使用Go外部插件与Telegraf交互?,go,plugins,grafana,influxdb,telegraf,Go,Plugins,Grafana,Influxdb,Telegraf,我有一个虚拟的GO插件,使用它,我想把数据发送到telegraf。但是,我无法找到任何方法将数据从插件发送到telegraf。 这个外部Go插件如下所示 package main import ( "fmt" "time" ) type greeting string type n int func (g greeting) Greet() { for i := 0; i < 10; i++ { timer1 := time.NewTimer(
package main
import (
"fmt"
"time"
)
type greeting string
type n int
func (g greeting) Greet() {
for i := 0; i < 10; i++ {
timer1 := time.NewTimer(2 * time.Second)
<-timer1.C
fmt.Println("value ", i)
sum := 0
sum += i * 100
fmt.Println(sum)
}
}
// exported
var Greeter greeting
有谁能帮我找到一个方法或方向,如何使GO插件和telegraf之间的交互工作。敬请留意。目前,Telegraf不支持使用外部插件。 已针对此请求的功能进行了一次更改并关闭 如果你打算用Golang编写代码,我建议你创建一个定制的Telegraf插件。Telegraf插件不使用go外部插件包,而是使用Telegraf本身构建的。您的插件必须满足基于您想要创建的插件类型的特定接口。基于您的问题,我假设您希望创建一个输入插件,Telegraf在其源代码中创建了每种类型的插件
import (
"fmt"
"os"
"plugin"
)
type Greeter interface {
Greet()
}
func main() {
var mod string
mod = "./eng/eng.so"
// load module
// 1. open the so file to load the symbols
plug, err := plugin.Open(mod)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// 2. look up a symbol (an exported function or variable)
// in this case, variable Greeter
symGreeter, err := plug.Lookup("Greeter")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// 3. Assert that loaded symbol is of a desired type
// in this case interface type Greeter (defined above)
var greeter Greeter
greeter, ok := symGreeter.(Greeter)
if !ok {
fmt.Println("unexpected type from module symbol")
os.Exit(1)
}
// 4. use the module
greeter.Greet()
}