如何使用Go外部插件与Telegraf交互?

如何使用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(

我有一个虚拟的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(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()


}