新聞中心
01 上篇回顧
這是上一篇結尾我們拋出來的InfluxDB社區(qū)問題,那么要想解決這個問題,我們首先先建立InfluxDB的開發(fā)環(huán)境,以源碼的方式了解其應用和實現(xiàn)。所以本篇我們?yōu)榇罱ń榻BInflxuDB的開發(fā)調試環(huán)境。

成都網(wǎng)站建設公司更懂你!創(chuàng)新互聯(lián)只做搜索引擎喜歡的網(wǎng)站!成都網(wǎng)站制作前臺采用搜索引擎認可的DIV+CSS架構,全站HTML靜態(tài),HTML5+CSS3網(wǎng)站,提供:網(wǎng)站建設,微信開發(fā),成都小程序開發(fā),商城網(wǎng)站建設,app軟件開發(fā),域名注冊,服務器租售,網(wǎng)站代托管運營,微信公眾號代托管運營。
02 依賴安裝
要想進行InfluxDB的開發(fā)調試,我們需要一些基礎軟件安裝(MacOS),如下:
- brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- go
brew install go@1.15
...
...
flux git:(master) go version
go version go1.15.9 darwin/am
- git
brew install git
git:(master) git --version
git version 2.30.2
- bazaar
brew install bazaar
git:(master) bzr version
Bazaar (bzr) 2.7.0
- rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- make pkg-config protobuf yarn
brew install make pkg-config protobuf yarn
git:(master) make --version
GNU Make 4.3
...
...
如果上面一切順利,我們設置一下環(huán)境變量 ~/.bash_profile :
export GOPATH=/Users/jincheng/go
export GOROOT=/usr/local/opt/go@1.15/libexec
export PKG_CONFIG=/Users/jincheng/go/bin/pkg-config
export PKG_CONFIG_PATH=$(find /usr/local/Cellar -name 'pkgconfig' -type d | grep lib/pkgconfig | tr '\n' ':' | sed s/.$//)
export PATH=$GOROOT/bin:$GOPATH/bin:$PKG_CONFIG_PATH:$PATH
別忘記 source ~/.bash_profile, 我們進入正題,下載源碼。
03 源碼構建
很多時候我們對一項功能的了解,需要對源碼有一定的了解,學習InfluxDB我們同樣需要源碼方式進行。
- 下載
git clone https://github.com/influxdata/influxdb.git
- 編譯
make
...
...
make[2]: Leaving directory '/Users/jincheng/work/influxdb/storage/flux'
make[1]: Leaving directory '/Users/jincheng/work/influxdb/storage'
env GO111MODULE=on go build -tags 'assets' -ldflags "-s -w -X main.commit=eeba0f3268" -o bin/darwin/influx ./cmd/influx
env GO111MODULE=on go build -tags 'assets' -ldflags " -X main.commit=eeba0f3268" -o bin/darwin/influxd ./cmd/influxd
如上我們發(fā)現(xiàn)會生成兩個二進制文件,一個是influxd服務,一個是influx的客戶端。
- 下載依賴
go clean -modcache && go mod tidy && go mod vendor
執(zhí)行完如上命令會在項目目錄下生成一個vendor目錄,里面下載了go.mod里面配置的項目所有依賴。
04 GoLand運行調試
GoLand是進行Go開發(fā)調試的IDE工具,我們后面關于InfluxDB源碼部分分享就在GoLand環(huán)境中進行。
IDE配置
在GoLand中進行InfluxDB的開發(fā)調試,需要簡單的配置一下,GOROOT/GOPATH/Go Modules ,如圖:
其中GOROOT/GOPATH和~/.bash_profile保持一致。
- 運行主服務
運行 influxd/main.go ,出現(xiàn)如下界面證明已經(jīng)influxd的服務已經(jīng)啟動成功,并在8086端口監(jiān)聽。
如果一切順利,那么服務監(jiān)聽在8086端口。
- 調試主服務
我們如果看看源代碼的執(zhí)行路徑,往往我們期望debug的方式運行 influxd/main.go ,如果出現(xiàn)debug啟動出現(xiàn)如下錯誤,說明我們的環(huán)境變量沒有在IDE中生效:
如上情況我們可以創(chuàng)建或者在~/.zshrc中增加一行配置讓 ~/.bash_profile配置生效。
source ~/.bash_profile
然后重啟電腦,再試一下。如果順利,我們設置一下斷點,可以類似界面如下:
如果一切順利,那么調試模式下的服務也是監(jiān)聽8086端口。
05 操作測試
好的,服務啟動了,下面我們利用客戶端繼續(xù)數(shù)據(jù)操作的測試。上面編譯的時候大家發(fā)現(xiàn)其實我們會生成2個二進制可執(zhí)行文件,一個是influxd,一個是influx。我們剛才debug啟動了influxd的服務,我們同樣可以啟動influx的客戶端,進行數(shù)據(jù)操作,客戶端我們之間運行可執(zhí)行文件(如果你愿意也可以IDE啟動)。
- 初始化
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx setup \
--username iot \
--password 2021iotdb \
--org org \
--bucket iot \
--retention 1h \
--token where-were-going-we-dont-need-roads \
--force
Config default has been stored in /Users/jincheng/.influxdbv2/configs.
User Organization Bucket
iot org iot
如上執(zhí)行成功表明我們完成了setup,創(chuàng)建了名為 iot 的bucket,在v2中bucket相當于v1中的database。
- 插入數(shù)據(jù)
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx write --bucket iot --precision s "m v=2 $(date +%s)"
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx write --bucket iot --precision s "m v=168 $(date +%s)"
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx write --bucket iot --precision s "n v=222 $(date +%s)"
如上我們插入了3條數(shù)據(jù),接下來我們查詢一下。
- 查詢數(shù)據(jù)
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx query 'from(bucket:"iot") |> range(start:-1h)'
執(zhí)行之后,我們會查詢到剛才插入的數(shù)據(jù),同時IDE中調試模式啟動的influxd服務也會打印相應的日志信息。
上面是簡單查詢記錄,下面我們在進行一下聚合計算:
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx query 'from(bucket:"iot") |> range(start:-1h) |> sum()'
到此,我們InfluxDB的調試模式啟動服務,客戶端創(chuàng)建bucket,插入數(shù)據(jù)和查詢數(shù)據(jù)就有了一個直觀的印象。
06 Flux查詢語言
上面我利用influx客戶端進行query命令,其實執(zhí)行的是Flux的查詢語言,F(xiàn)lux是influxDB社區(qū)提供的新的查詢語言,那么Flux是否可以在IDE中進行運行和調試呢?當然!我們對Flux的開發(fā)調試環(huán)境搭建一下,并且對查詢操作進行演示。
- 下載&編譯
git clone https://github.com/influxdata/flux.git
...
make
...
go clean -modcache && go mod tidy && go mod vendor
- GoLand 運行
我們需要配置flux的命令,為 repl,然后運行,如下:
啟動repl之后,我們可以進行數(shù)據(jù)處理操作,如下圖:
- 查詢數(shù)據(jù)
Flux可以直接和InfluxDB服務連接,進行數(shù)據(jù)查詢,上面我們在influx客戶端輸入的查詢語句其實就是Flux查詢語言,那么我們當然可以在Flux中進行數(shù)據(jù)查詢,我們啟動Flux repl,進行查詢如下:如下:
import "influxdata/influxdb"
data = influxdb.from(bucket:"iot") |> range(start:-1h) |> sum()
data |> yield()
如圖,發(fā)生了錯誤,原因是Flux去嘗試連接influxdb的9999端口服務,不過我們上面看到我們的服務是監(jiān)聽8086了,所以我們要修改一下默認端口(這就是源碼debug的好處了)。
修改端口之后,我們發(fā)現(xiàn)連接已經(jīng)建立,但是權限還有問題,如下:
這個就需要我們連接的Token信息,如下:
cat ~/.influxdbv2/configs
我們讀取數(shù)據(jù)時候攜帶token和org信息,如下:
import "influxdata/influxdb"
data = influxdb.from(bucket:"iot", token:"where-were-going-we-dont-need-roads", org:"org") |> range(start:-1h) |> sum()
data |> yield()
好,到這里我們Flux讀取InfluxDB數(shù)據(jù)部分也有了一個直觀的了解。
07 InfluxDB&Flux社區(qū)貢獻
目前看InflxdbV2版本的貢獻者并不多,我在源碼構建的時候發(fā)現(xiàn)的這些默認端口問題都是influx社區(qū)待改進的patch,我也提交了相關的PRs。
For InfluxDB: https://github.com/influxdata/influxdb/pull/20809
For Flux: https://github.com/influxdata/flux/pull/3514
作者介紹
孫金城,社區(qū)編輯,Apache Flink PMC 成員,Apache Beam Committer,Apache IoTDB PMC 成員,ALC Beijing 成員,Apache ShenYu 導師,Apache 軟件基金會成員。關注技術領域流計算和時序數(shù)據(jù)存儲。
網(wǎng)站題目:No.6 - 時序數(shù)據(jù)庫隨筆 - InfluxDB&Flux調試環(huán)境搭建
本文鏈接:http://www.dlmjj.cn/article/dppiijs.html


咨詢
建站咨詢
