時序資料庫 InfluxDB 在 WSL 安裝全紀錄
這集是介紹時序資料庫 InfluxDB 在 WSL 安裝的過程,照慣例先介紹兩位主角。
時序資料庫 InfluxDB
什麼是「時序資料」?
時序資料的重點具體表現在名稱上,「時間」就是時間戳、「序列」表示資料是連續的,具備這兩種特性的資料就可稱為時序資料。
什麼樣的資料是時序資料呢?本集封面的心電圖就是很好的例子,但心電圖的資料量並不大,大概不需要特別的資料庫來優化它的儲存和查詢效能。
那一台收銀機的收銀紀錄是時序資料嗎?以一般的尺度來看它不是,雖然發票的確是照著時間一張張開出,但每張發票的金額卻並不連續,而是獨立的單點,小臻買了五百塊,後面大猩猩又結了六百塊,當然如果把尺度 zoom out 到百萬為單位,那的確可以視之為時序資料,但也要有這種尺度下合理的應用才是,視角或維度的不同決定了資料的性質,就像光既是粒子也是波,實際上幾乎所有的信號都能以波的形式看待,如果其中一個軸是時間,那皆可以時序資料視之。
時序資料之所以要有專門的資料庫來對付它,因為它還有另外兩個性質:肥大又需要長時間保存,因此放在傳統的資料庫水土不服,效率不彰,以一個取樣頻率為 0.1 秒的感測器來說,一天就會有 864,000 筆紀錄,連續跑幾個禮拜很快就會破千萬,所以時序資料庫也就應運而生了。
InfluxDB 是時序資料庫領域最著名的選擇之一,它有幾個特色:
- 高效能,專門為時序資料而生。
- 有豐富的客戶端套件,Go、C#、Java、Kotlin、PHP、Ruby、Scala、Swift、JS、Node.js、Python、R 等等,後端、Web、iOS、Android 全方位覆蓋。
- 查詢語法近似 SQL,稱為 InfluxQL(限 InfluxDB 1.x)。
- 可自動把舊資料降採樣,釋放儲存空間。
- 生態成熟,有商業模式,也有周邊的工具練,當然我等免費仔今日用的是 InfluxDB OSS 版。
要注意的是其中最香的 InfluxQL 只在 InfluxDB 1.x 原生提供,InfluxDB 2.0 後 InfluxQL 被另一種查詢語言 Flux 取代,InfluxQL 剩下半殘的功能被打入冷宮,這也是 InfluxDB 最惱人的點,很愛砍掉重練,目前 InfluxDB 有三大版併行:
- InfluxDB 1.x:有 InfluxQL。
- InfluxDB 2.x:改用 Flux。
- Influx IOx:徹底砍掉重練用 Rust 重寫,目前還在開發中,Flux 看似會沿用,目標是無痛轉換。
因為 InfluxQL 實在太香了,而且 InfluxDB 1.x 依然在維護週期內,所以本文選用 InfluxDB 1.8。
Windows 與 WSL
我們選用 WSL 2,Ubuntu 20.04。
要控制篇幅,這部份就不展開了。
安裝 InfluxDB。
起手式下載:
$ wget https://dl.influxdata.com/influxdb/releases/influxdb_1.8.10_amd64.deb
安裝:
$ sudo dpkg -i ./influxdb_1.8.10_amd64.deb
InfluxDB 服務跑起來
因為是 WSL,所以要手動啟動服務:
$ sudo influxd
跑起來會看到一些訊息,下面是比較重要的幾條:
... 2022-05-05T01:18:23.709472Z info Using data dir {"log_id": "0aGSaLR0000", "service": "store", "path": "/var/lib/influxdb/data"} ... 2022-05-05T01:18:23.709807Z info Starting HTTP service {"log_id": "0aGSaLR0000", "service": "httpd", "authentication": false} 2022-05-05T01:18:23.709835Z info opened HTTP access log {"log_id": "0aGSaLR0000", "service": "httpd", "path": "stderr"} ... 2022-05-05T01:18:23.709903Z info Listening on HTTP {"log_id": "0aGSaLR0000", "service": "httpd", "addr": "[::]:8086", "https": false}
- 資料的真身在 /var/lib/influxdb/data
- 有在 8086 埠監聽 HTTP
- HTTP log 會輸出到 stderr
試著在 Ubuntu 內連連看:
$ influx
應該會進入 InfluxDB 的 shell:
Connected to http://localhost:8086 version 1.8.10 InfluxDB shell version: 1.8.10 >
試著在 Windows 連連看,最簡單的測試方式就是拿瀏覽器開看會不會通,測試下面兩個網址:
如果有通的話應該會出現 404 訊息,這 404 不重要,它本來就不是跑網頁的,證明有通就好。
在 WSL 2 測 http://127.0.0.1:8086/ 可能會出現拒絕連線錯誤,因為 WSL 2 本質上是一台 Hyper-V 虛擬機,它有自己的 IP,而那 127.0.0.1 則是指向 Windows 自己,如果 Windows 沒有監聽 8086 埠的服務,那就會出現拒絕連線。
總之,所以,要用 Ubuntu 自己的 IP 來測,我們用下面指令顯示出 IP:
ip addr
當然還有更多花式打法,在此不展開。
話說回來,為什麼在 Windows 開 http://localhost:8086/ 卻可以呢?因為 Windows 很貼心的開啟了 WSL 2 的轉送機制,所有往 localhost 的請求都會轉給 Ubuntu,反之亦然。
因為 localhost 和 127.0.0.1 的通與不通,讓本人花了一個下午,直到發現 WSL 2 原來真身是台虛擬機,僅以本篇紀念此事。
InfluxDB 配置
配置檔在 /etc/influxdb/influxdb.conf。
項目相當多,但初期只要關注 HTTP 區塊的幾個項目:
[http] # Determines whether HTTP endpoint is enabled. # enabled = true # The bind address used by the HTTP service. # bind-address = ":8086" # Determines whether user authentication is enabled over HTTP/HTTPS. # auth-enabled = false
應該可以望文生義吧,沒有要改的話默默離開即可。
InfluxQL
InfluxQL 和 SQL 有八成像。
建帳號:
CREATE USER "roy" WITH PASSWORD "sonofbitch" WITH ALL PRIVILEGES
建 DB:
CREATE DATABASE "isgdb"
大概是這樣,其他 InfluxSQL 特有的時序資料查詢未來有碰到再說吧!
參考資料
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!