1. 程式人生 > 其它 >Docker安裝InfluxDB

Docker安裝InfluxDB

時序型資料庫

時序資料庫就是存放事件序列資料的資料庫,需要支援時序資料的快速寫入、持久化、多維度的聚合查詢等基本功能。

時間序列資料

時間序列資料是基於時間的一系列資料。在有時間的座標中將這些資料點連成線,往過去看可以做成多緯度報表,揭示其趨勢性、規律性、異常性;往未來看可以做大資料分析,機器學習,實現預測和預警。

資料寫入

  • 寫入平穩、持續、高併發和高吞吐:時序資料的寫入是比較平穩的,這點與應用資料不同,應用資料通常與應用的訪問量成正比,而應用的訪問量通常存在波峰波谷。時序資料的產生通常是以一個固定的時間頻率產生,不會受其他因素的制約,其資料生成的速度是相對比較平穩的。
  • 寫多讀少:時序資料上95%-99%的操作都是寫操作,是典型的寫多讀少的資料。這與其資料特性相關,例如監控資料,你的監控項可能很多,但是你真正去讀的可能比較少,通常只會關心幾個特定的關鍵指標或者在特定的場景下才會去讀資料。
  • 實時寫入、無更新:時序資料的寫入是實時的,且每次寫入都是最近生成的資料,這與其資料生成的特點相關,因為其資料生成是隨著時間推進的,而新生成的資料會實時的進行寫入。資料寫入無更新,在時間這個維度上,隨著時間的推進,每次資料都是新資料,不會存在舊資料的更新,不過不排除人為的對資料做訂正。

資料查詢

  • 按時間範圍讀取
  • 最近的資料被讀取的概率高
  • 歷史資料粗粒度查詢的概率高
  • 多種精度查詢
  • 多維度分析

資料儲存

  • 資料量大:拿監控資料來舉例,如果我們採集的監控資料的時間間隔是1s,那一個監控項每天會產生86400個數據點,若有10000個監控項,則一天就會產生864000000個數據點。在物聯網場景下,這個數字會更大。整個資料的規模,是TB甚至是PB級的。
  • 冷熱分明:時序資料有非常典型的冷熱特徵,越是歷史的資料,被查詢和分析的概率越低。 具有時效性:時序資料具有時效性,資料通常會有一個儲存週期,超過這個儲存週期的資料可以認為是失效的,可以被回收。一方面是因為越是歷史的資料,可利用的價值越低;另一方面是為了節省儲存成本,低價值的資料可以被清理。
  • 多精度資料儲存:在查詢的特點裡提到時序資料出於儲存成本和查詢效率的考慮,會需要一個多精度的查詢,同樣也需要一個多精度資料的儲存。

InfluxDB

InfluxDB是什麼

  • InfluxDB 是用Go語言編寫的一個開源分散式時序、事件和指標資料庫,無需外部依賴
  • InfluxDB在DB-Engines的時序資料庫類別裡排名第一

InfluxDB相關概念

  • Database:InfluxDB可以建立資料庫,一個數據庫可以包含多個user、儲存策略、schemaless ,支援隨時靈活建立mersurement
  • Measurement:相當於表的概念;
  • Tags:是一些kv的結構,標籤會被用來建立索引;
  • Fields:是儲存真實資料的結構,也是kv結構,但是不會被用來建立索引;
  • Point: 代表了一條記錄,可以理解為關係型資料庫中的一條記錄;
  • Timestamp:既然InfluxDB被稱之為時序資料庫,少了時間是不可能的,每條記錄必須要有一個時間戳;
  • Series:是由Measurement+Tags組成的

InfluxDB的優點

InfluxDB 自帶的各種特殊函式如求標準差,隨機取樣資料,統計資料變化比等,使資料統計和實時分析變得十分方便。 此外它還有如下特性:

  • 內建 HTTP 介面,使用方便
  • 資料可以打標記,這樣查詢可以很靈活
  • 類 SQL 的查詢語句
  • 安裝管理很簡單,並且讀寫資料很高效
  • 能夠實時查詢,資料在寫入時被索引後就能夠被立即查出

InfluxDB版本

InfluxDB目前推出了2.0版本,由於改動較大,所以和1.x版本並存。目前官方推薦的 穩定版本依舊是1.x版本。2.0主要的更改包括以下內容:

  • 集成了TICK元件,一鍵安裝
  • 安全整合,所有的請求都需要通過token
  • 整合管理頁面,支援更為強大的統計和分析功能
  • 支援新的查詢語言Flux,提供更為強大的查詢和處理功能
  • 增加了面向IoT和邊緣計算的功能,能夠在 ingestion point 彙總和分析時間序列資料
  • 啟動了新的儲存引擎InfluxDB Iox,採用Rust語言編寫

使用 Docker 從 InfluxDB 1.x 升級到 2.1 |InfluxDB OSS 2.1 文件 (influxdata.com)

安裝InfluxDB 2.0版本

安裝 InfluxDB |InfluxDB OSS 2.1 文件 (influxdata.com)

建立一個新目錄來儲存資料,然後導航到該目錄

mkdir -p /mydata/influxdb/influxdb-docker-data-volume && cd $_

在主機檔案系統上生成預設配置檔案

docker run \
  --rm influxdb:2.1.1 \
  influxd print-config > config.yml

再重新啟動InfluxDB 容器
docker run -p 8086:8086 --name influxdb2 \
  -v $PWD/config.yml:/etc/influxdb2/config.yml \
  -v $PWD:/var/lib/influxdb2 \
  -d influxdb:2.1.1

開放埠8086

開放8086埠

firewall-cmd --zone=public --add-port=8086/tcp --permanent  

配置立即生效

firewall-cmd --reload  

設定 InfluxDB

influxDB 的初始設定過程將逐步完成建立預設組織、使用者、儲存桶和操作員 API 令牌的過程

執行成功後登入:http://127.0.0.1:8086/

第一次登入,輸入賬號密碼等資訊

介面檢視token

命令進入容器

docker exec -it influxdb2 /bin/bash

為避免必須使用每個命令傳遞 InfluxDB API 令牌,請設定配置檔案來儲存憑據

在終端中,執行以下命令:

influx config create -n default \
  -u http://localhost:8086 \
  -o my-org \
  -t wjk4yyPaabbq7cG9hU3Ak-61i8hqOuuFtUWdtJYex9h55BgPjOLgPsANQjYlmHj6GVHx_RafAZlU4O4UnPvvCQ== \
  -a
influx config ls

使用令牌

export INFLUX_TOKEN=wjk4yyPaabbq7cG9hU3Ak-61i8hqOuuFtUWdtJYex9h55BgPjOLgPsANQjYlmHj6GVHx_RafAZlU4O4UnPvvCQ==
influx write -t  $INFLUX_TOKEN  -b my-bucket -o my-org "measurement field=1"

其他命令

建立使用者johndoe

influx user create -n johndoe -o my-org

修改johndo密碼

influx user password -n johndoe

插入資料

influx write   -b  my-bucket   -o  my-org   -p s   'myMeasurement,host=myHost testField="testData" 888'

查資料

influx query -o my-org 'from(bucket:"my-bucket") |> range(start:-1d)'

安裝InfluxDB 1.8版本

1.8版本可以使用dbeaver連線,視覺化比較方便

docker run -p 8086:8086 --name influx18 \
      -v influxdb:/var/lib/influxdb \
      influxdb:1.8

登入後臺

[root@iZbp1bunl8t8qf63wqsy0iZ ~]# docker exec -it influx18 /bin/bash
root@40ce58faab6f:/# influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                host    region  value
----                ----    ------  -----
1646909654112201899 serverA us_west 0.64
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> SELECT * FROM "temperature"
name: temperature
time                external internal machine type
----                -------- -------- ------- ----
1646909703830575693 25       37       unit42  assembly
>