go開源項目influxdb-relay源碼分析(一)


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多個節點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM