influxdb-relay項目地址: https://github.com/influxdata/influxdb-relay,主要作為負載均衡節點,寫入多個influxdb節點,起到高可用效果。
不多說,開搞~
1、main.go
1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "os" 8 "os/signal" 9 10 "github.com/influxdata/influxdb-relay/relay" 11 ) 12 13 var ( 14 //influxdb-realy啟動時接收的配置文件參數,因為是falg.String所以接收的是一個字符串類型的參數 15 //flag.String 函數第一個參數代表啟動時參數的名稱,第二個參數代表默認值,第三個參數代表用途描述,此方法返回一個指針 16 //那么啟動realy時應該是這個樣子的: ./influxdb-relay -config relay.toml ———— "-config" 就是匹配上面flag.String函數第一個參數, "relay.toml" 是-config的值,這里代表配置文件的路徑 17 configFile = flag.String("config", "", "Configuration file to use") 18 ) 19 20 func main() { 21 //flag.Parse是用來解析啟動時傳入的參數,必須調用 22 flag.Parse() 23 24 //如果啟動參數,配置文件路徑為空 25 if *configFile == "" { 26 //記錄日志 27 fmt.Fprintln(os.Stderr, "Missing configuration file") 28 //打印需要的參數提示,也就是會輸出上面flag.String函數第三個參數 29 flag.PrintDefaults() 30 //退出 31 os.Exit(1) 32 } 33 //加載配置文件 34 cfg, err := relay.LoadConfigFile(*configFile) 35 //LoadConfigFile方法如下: 主要做的事情是把配置文件反序列化成一個Config對象然后return,也就是cfg 36 // func LoadConfigFile(filename string) (cfg Config, err error) { 37 // f, err := os.Open(filename) 38 // if err != nil { 39 // return cfg, err 40 // } 41 // defer f.Close() 42 // return cfg, toml.NewDecoder(f).Decode(&cfg) 43 // } 44 if err != nil { 45 fmt.Fprintln(os.Stderr, "Problem loading config file:", err) 46 } 47 //根據Config對象 創建relay組件 48 r, err := relay.New(cfg) 49 if err != nil { 50 log.Fatal(err) 51 } 52 //定義接收操作系統信號的channel 53 sigChan := make(chan os.Signal, 1) 54 //notify用於監聽信號,如果操作系統向當前進程發送中斷信號(os.Interrupt 表示中斷信號) 55 signal.Notify(sigChan, os.Interrupt) 56 //如果接收到中斷信號,開一個協程調用relay的Stop方法 停止http監聽 57 go func() { 58 <-sigChan 59 r.Stop() 60 }() 61 62 log.Println("starting relays...") 63 //relay 運行 64 r.Run() 65 }
2、配置文件 relay.toml
1 [[http]] 2 name = "example-http" 3 bind-addr = "127.0.0.1:9096" 4 output = [ 5 { name="influxdb-1", location = "http://127.0.0.1:8086/write" }, 6 { name="influxdb-2", location = "http://127.0.0.1:7086/write" }, 7 ] 8 9 [[udp]] 10 name = "example-udp" 11 bind-addr = "127.0.0.1:19096" 12 read-buffer = 0 # default 13 output = [ 14 { name="influxdb-1", location="127.0.0.1:8089", mtu=512 }, 15 { name="influxdb-2", location="127.0.0.1:7089", mtu=1024 }, 16 ]
總結:
1、加載配置文件 relay.toml
2、根據配置文件創建relay,啟動監聽端口,接收請求
3、把接收到的請求寫入到influxdb1-2節點
后面再研究下核心模塊relay怎么把接收到的數據同時寫入,influxdb多個節點。