簡體   English   中英

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

[英]How to interact with Telegraf using Go external plugin?

我有一個虛擬的 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

主文件看起來像


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()


}

任何人都可以幫助我找到如何在 GO 插件和 Telegraf 之間進行交互的方法或方向。 任何抬頭表示贊賞。

目前,Telegraf 不支持使用外部插件。 一個問題是制造和封閉對此請求的功能。

如果您打算用 Golang 編寫代碼,我建議您創建一個自定義 Telegraf 插件。 Telegraf 插件不使用外部插件包,而是使用 Telegraf 本身構建的。 您的插件必須滿足基於您要創建的插件類型的特定接口。 根據您的問題,我假設您希望創建一個輸入插件,Telegraf 提供了在其源代碼中創建每種類型插件的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM