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

成都網(wǎng)站建設(shè)公司更懂你!創(chuàng)新互聯(lián)只做搜索引擎喜歡的網(wǎng)站!成都網(wǎng)站制作前臺(tái)采用搜索引擎認(rèn)可的DIV+CSS架構(gòu),全站HTML靜態(tài),HTML5+CSS3網(wǎng)站,提供:網(wǎng)站建設(shè),微信開(kāi)發(fā),成都小程序開(kāi)發(fā),商城網(wǎng)站建設(shè),app軟件開(kāi)發(fā),域名注冊(cè),服務(wù)器租售,網(wǎng)站代托管運(yùn)營(yíng),微信公眾號(hào)代托管運(yùn)營(yíng)。
02 依賴安裝
要想進(jìn)行InfluxDB的開(kāi)發(fā)調(diào)試,我們需要一些基礎(chǔ)軟件安裝(MacOS),如下:
- brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- go
brew install [email protected]
...
...
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
...
...
如果上面一切順利,我們?cè)O(shè)置一下環(huán)境變量 ~/.bash_profile :
export GOPATH=/Users/jincheng/go
export GOROOT=/usr/local/opt/[email protected]/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, 我們進(jìn)入正題,下載源碼。
03 源碼構(gòu)建
很多時(shí)候我們對(duì)一項(xiàng)功能的了解,需要對(duì)源碼有一定的了解,學(xué)習(xí)InfluxDB我們同樣需要源碼方式進(jìn)行。
- 下載
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)會(huì)生成兩個(gè)二進(jìn)制文件,一個(gè)是influxd服務(wù),一個(gè)是influx的客戶端。
- 下載依賴
go clean -modcache && go mod tidy && go mod vendor
執(zhí)行完如上命令會(huì)在項(xiàng)目目錄下生成一個(gè)vendor目錄,里面下載了go.mod里面配置的項(xiàng)目所有依賴。
04 GoLand運(yùn)行調(diào)試
GoLand是進(jìn)行Go開(kāi)發(fā)調(diào)試的IDE工具,我們后面關(guān)于InfluxDB源碼部分分享就在GoLand環(huán)境中進(jìn)行。
IDE配置
在GoLand中進(jìn)行InfluxDB的開(kāi)發(fā)調(diào)試,需要簡(jiǎn)單的配置一下,GOROOT/GOPATH/Go Modules ,如圖:
其中GOROOT/GOPATH和~/.bash_profile保持一致。
- 運(yùn)行主服務(wù)
運(yùn)行 influxd/main.go ,出現(xiàn)如下界面證明已經(jīng)influxd的服務(wù)已經(jīng)啟動(dòng)成功,并在8086端口監(jiān)聽(tīng)。
如果一切順利,那么服務(wù)監(jiān)聽(tīng)在8086端口。
- 調(diào)試主服務(wù)
我們?nèi)绻纯丛创a的執(zhí)行路徑,往往我們期望debug的方式運(yùn)行 influxd/main.go ,如果出現(xiàn)debug啟動(dòng)出現(xiàn)如下錯(cuò)誤,說(shuō)明我們的環(huán)境變量沒(méi)有在IDE中生效:
如上情況我們可以創(chuàng)建或者在~/.zshrc中增加一行配置讓 ~/.bash_profile配置生效。
source ~/.bash_profile
然后重啟電腦,再試一下。如果順利,我們?cè)O(shè)置一下斷點(diǎn),可以類似界面如下:
如果一切順利,那么調(diào)試模式下的服務(wù)也是監(jiān)聽(tīng)8086端口。
05 操作測(cè)試
好的,服務(wù)啟動(dòng)了,下面我們利用客戶端繼續(xù)數(shù)據(jù)操作的測(cè)試。上面編譯的時(shí)候大家發(fā)現(xiàn)其實(shí)我們會(huì)生成2個(gè)二進(jìn)制可執(zhí)行文件,一個(gè)是influxd,一個(gè)是influx。我們剛才debug啟動(dòng)了influxd的服務(wù),我們同樣可以啟動(dòng)influx的客戶端,進(jìn)行數(shù)據(jù)操作,客戶端我們之間運(yùn)行可執(zhí)行文件(如果你愿意也可以IDE啟動(dòng))。
- 初始化
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相當(dāng)于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ù),接下來(lái)我們查詢一下。
- 查詢數(shù)據(jù)
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx query 'from(bucket:"iot") |> range(start:-1h)'
執(zhí)行之后,我們會(huì)查詢到剛才插入的數(shù)據(jù),同時(shí)IDE中調(diào)試模式啟動(dòng)的influxd服務(wù)也會(huì)打印相應(yīng)的日志信息。
上面是簡(jiǎn)單查詢記錄,下面我們?cè)谶M(jìn)行一下聚合計(jì)算:
bin/$(uname -s | tr '[:upper:]' '[:lower:]')/influx query 'from(bucket:"iot") |> range(start:-1h) |> sum()'
到此,我們InfluxDB的調(diào)試模式啟動(dòng)服務(wù),客戶端創(chuàng)建bucket,插入數(shù)據(jù)和查詢數(shù)據(jù)就有了一個(gè)直觀的印象。
06 Flux查詢語(yǔ)言
上面我利用influx客戶端進(jìn)行query命令,其實(shí)執(zhí)行的是Flux的查詢語(yǔ)言,F(xiàn)lux是influxDB社區(qū)提供的新的查詢語(yǔ)言,那么Flux是否可以在IDE中進(jìn)行運(yùn)行和調(diào)試呢?當(dāng)然!我們對(duì)Flux的開(kāi)發(fā)調(diào)試環(huán)境搭建一下,并且對(duì)查詢操作進(jìn)行演示。
- 下載&編譯
git clone https://github.com/influxdata/flux.git
...
make
...
go clean -modcache && go mod tidy && go mod vendor
- GoLand 運(yùn)行
我們需要配置flux的命令,為 repl,然后運(yùn)行,如下:
啟動(dòng)repl之后,我們可以進(jìn)行數(shù)據(jù)處理操作,如下圖:
- 查詢數(shù)據(jù)
Flux可以直接和InfluxDB服務(wù)連接,進(jìn)行數(shù)據(jù)查詢,上面我們?cè)趇nflux客戶端輸入的查詢語(yǔ)句其實(shí)就是Flux查詢語(yǔ)言,那么我們當(dāng)然可以在Flux中進(jìn)行數(shù)據(jù)查詢,我們啟動(dòng)Flux repl,進(jìn)行查詢?nèi)缦拢喝缦拢?/p>
import "influxdata/influxdb"
data = influxdb.from(bucket:"iot") |> range(start:-1h) |> sum()
data |> yield()
如圖,發(fā)生了錯(cuò)誤,原因是Flux去嘗試連接influxdb的9999端口服務(wù),不過(guò)我們上面看到我們的服務(wù)是監(jiān)聽(tīng)8086了,所以我們要修改一下默認(rèn)端口(這就是源碼debug的好處了)。
修改端口之后,我們發(fā)現(xiàn)連接已經(jīng)建立,但是權(quán)限還有問(wèn)題,如下:
這個(gè)就需要我們連接的Token信息,如下:
cat ~/.influxdbv2/configs
我們讀取數(shù)據(jù)時(shí)候攜帶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ù)部分也有了一個(gè)直觀的了解。
07 InfluxDB&Flux社區(qū)貢獻(xiàn)
目前看InflxdbV2版本的貢獻(xiàn)者并不多,我在源碼構(gòu)建的時(shí)候發(fā)現(xiàn)的這些默認(rèn)端口問(wèn)題都是influx社區(qū)待改進(jìn)的patch,我也提交了相關(guān)的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 導(dǎo)師,Apache 軟件基金會(huì)成員。關(guān)注技術(shù)領(lǐng)域流計(jì)算和時(shí)序數(shù)據(jù)存儲(chǔ)。
網(wǎng)頁(yè)名稱:No.6 - 時(shí)序數(shù)據(jù)庫(kù)隨筆 - InfluxDB&Flux調(diào)試環(huán)境搭建
標(biāo)題網(wǎng)址:http://fisionsoft.com.cn/article/dppiijs.html


咨詢
建站咨詢
