參考文獻(xiàn)
InfluxDB 1.7文檔
https://docs.influxdata.com/influxdb/v1.7/
InfluxDB簡(jiǎn)介
InfluxDB是一個(gè)時(shí)間序列數(shù)據(jù)庫(kù)宛裕,旨在處理高寫(xiě)入和查詢負(fù)載琅坡。它是TICK堆棧的組成部分 。InfluxDB旨在用作涉及大量帶時(shí)間戳數(shù)據(jù)的任何用例的后備存儲(chǔ)锡凝,包括DevOps監(jiān)控阎肝,應(yīng)用程序指標(biāo)渐北,物聯(lián)網(wǎng)傳感器數(shù)據(jù)和實(shí)時(shí)分析筛璧。
主要特點(diǎn)
以下是InfluxDB目前支持的一些功能,使其成為處理時(shí)間序列數(shù)據(jù)的絕佳選擇骡男。
- 專為時(shí)間序列數(shù)據(jù)編寫(xiě)的自定義高性能數(shù)據(jù)存儲(chǔ)淆游。TSM引擎允許高攝取速度和數(shù)據(jù)壓縮
- 完全寫(xiě)在Go。它編譯成單個(gè)二進(jìn)制文件隔盛,沒(méi)有外部依賴項(xiàng)犹菱。
- 簡(jiǎn)單,高性能的寫(xiě)入和查詢HTTP API吮炕。
- 插件支持其他數(shù)據(jù)提取協(xié)議腊脱,如Graphite,collectd和OpenTSDB来屠。
- 專為類似SQL的查詢語(yǔ)言量身定制虑椎,可輕松查詢聚合數(shù)據(jù)震鹉。
- 標(biāo)簽允許對(duì)系列進(jìn)行索引以實(shí)現(xiàn)快速有效的查詢俱笛。
- 保留策略有效地自動(dòng)使過(guò)時(shí)數(shù)據(jù)過(guò)期。
- 連續(xù)查詢自動(dòng)計(jì)算聚合數(shù)據(jù)传趾,以提高頻繁查詢的效率迎膜。
InfluxDB的開(kāi)源版本在單個(gè)節(jié)點(diǎn)上運(yùn)行。如果您需要高可用性來(lái)消除單點(diǎn)故障浆兰,請(qǐng)考慮InfluxDB企業(yè)版磕仅。
InfluxDB默認(rèn)使用以下網(wǎng)絡(luò)端口:
- TCP端口
8086
用于通過(guò)InfluxDB的HTTP API進(jìn)行客戶端 - 服務(wù)器通信 - TCP端口
8088
用于RPC服務(wù)以進(jìn)行備份和還原
除了上面的端口,InfluxDB還提供了多個(gè)可能需要自定義端口的插件簸呈¢哦可以通過(guò)配置文件修改所有端口映射,配置文件位于/etc/influxdb/influxdb.conf
默認(rèn)安裝位置蜕便。
使用網(wǎng)絡(luò)時(shí)間協(xié)議(NTP)用于保證寫(xiě)入InfluxDB的時(shí)間準(zhǔn)確
在安裝部署InfluxDB的服務(wù)器首先要保證好服務(wù)器的UTC本地時(shí)間準(zhǔn)確劫恒,不然寫(xiě)入的時(shí)間序列數(shù)據(jù)肯定有誤。
為了保證時(shí)間準(zhǔn)確,最好開(kāi)啟NTP服務(wù)進(jìn)行時(shí)鐘同步两嘴。
使用docker啟動(dòng)InfluxDB
下載鏡像:docker pull influxdb
[root@server81 influxdb]# docker pull influxdb
Using default tag: latest
Trying to pull repository docker.io/library/influxdb ...
latest: Pulling from docker.io/library/influxdb
cd8eada9c7bb: Pull complete
c2677faec825: Pull complete
fcce419a96b1: Pull complete
7eb470cb34c6: Pull complete
5d32b89f3e91: Pull complete
c06b59b518ce: Pull complete
59c5fc9b8822: Pull complete
a6b36405d3fd: Pull complete
Digest: sha256:2c1dba8c2b9713355edce4a9824a10226be0d4ace071ecb663224a4d29ae8403
Status: Downloaded newer image for docker.io/influxdb:latest
[root@server81 influxdb]#
編寫(xiě)啟動(dòng)influxdb
服務(wù)腳本:
[root@server81 influxdb]# cat restart_influxdb.sh
#!/bin/bash
basedir=$(cd `dirname $0`;pwd)
docker stop influxdb
docker rm influxdb
docker run -d --name influxdb -p 8086:8086 -v $basedir/influxdb:/var/lib/influxdb influxdb
[root@server81 influxdb]#
執(zhí)行啟動(dòng)influxdb服務(wù):
## 執(zhí)行shell腳本重啟服務(wù)
[root@server81 influxdb]# ./restart_influxdb.sh
influxdb
influxdb
d2918dc47850c94f0532e41465e8943c5e45c30c1884b529939bd49cd8c30263
[root@server81 influxdb]#
[root@server81 influxdb]# ls
influxdb restart_influxdb.sh
[root@server81 influxdb]#
[root@server81 influxdb]# ls influxdb/
data meta wal
[root@server81 influxdb]#
登陸influxdb的CLI界面
## 查看docker啟動(dòng)進(jìn)程
[root@server81 influxdb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2918dc47850 influxdb "/entrypoint.sh in..." 17 minutes ago Up 17 minutes 0.0.0.0:8086->8086/tcp influxdb
82a294241ff7 registry:2 "/entrypoint.sh /e..." 4 weeks ago Up 2 days 0.0.0.0:5000->5000/tcp registry
[root@server81 influxdb]#
## 進(jìn)入influxdb容器內(nèi)
[root@server81 influxdb]# docker exec -it influxdb bash
root@d2918dc47850:/#
root@d2918dc47850:/#
執(zhí)行influx將啟動(dòng)CLI并自動(dòng)連接到本地InfluxDB實(shí)例(假設(shè)您已經(jīng)啟動(dòng)了服務(wù)器service influxdb start或influxd直接運(yùn)行)丛楚。輸出應(yīng)如下所示:
[root@server81 influxdb]# docker exec -it influxdb bash
root@d2918dc47850:/#
root@d2918dc47850:/# influx
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
> exit
root@d2918dc47850:/#
root@d2918dc47850:/# influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
>
注意:
- InfluxDB HTTP API
8086
默認(rèn)在端口上運(yùn)行。因此憔辫,influx
將連接到端口8086
和localhost
默認(rèn)趣些。如果您需要更改這些默認(rèn)值,請(qǐng)運(yùn)行influx --help
查看相關(guān)幫助贰您。- 使用
-precision
參數(shù)指定任何返回的時(shí)間戳的格式/精度坏平。在上面的示例中,rfc3339
告訴InfluxDB以RFC3339格式(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ
)返回時(shí)間戳锦亦。
退出的方式功茴,輸入exit
現(xiàn)在,命令行已準(zhǔn)備好以Influx查詢語(yǔ)言(又稱InfluxQL)語(yǔ)句的形式獲取輸入孽亲。要退出InfluxQL shell坎穿,請(qǐng)鍵入exit
并單擊return
。
創(chuàng)建InfluxDB數(shù)據(jù)庫(kù)
全新安裝的InfluxDB沒(méi)有數(shù)據(jù)庫(kù)(除了系統(tǒng)
_internal
)返劲,因此創(chuàng)建一個(gè)是我們的首要任務(wù)玲昧。您可以使用CREATE DATABASE <db-name>InfluxQL
語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù),其中<db-name>
是您要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)的名稱篮绿。只要數(shù)據(jù)庫(kù)的名稱是雙引號(hào)的字符串孵延,就可以包含任何unicode
字符。如果名稱僅包含ASCII
字母亲配,數(shù)字或下劃線且不以數(shù)字開(kāi)頭尘应,則也可以不加引號(hào)。
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)吼虎,名稱為mydb
:
> CREATE DATABASE mydb
>
注意:按 Enter鍵后犬钢,將出現(xiàn)一個(gè)新提示,并且不顯示任何其他提示思灰。在CLI中玷犹,這意味著語(yǔ)句已執(zhí)行且沒(méi)有要顯示的錯(cuò)誤。如果出現(xiàn)問(wèn)題洒疚,將始終顯示錯(cuò)誤歹颓。沒(méi)有消息就是好消息!
現(xiàn)在已經(jīng)創(chuàng)建了mydb數(shù)據(jù)庫(kù)油湖,可以SHOW DATABASES語(yǔ)句顯示所有現(xiàn)有數(shù)據(jù)庫(kù):
root@d2918dc47850:/# influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
>
> CREATE DATABASE mydb
>
> show databases
name: databases
name
----
_internal
mydb
>
>
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>
注意: 該
_internal
數(shù)據(jù)庫(kù)中創(chuàng)建和使用InfluxDB
存儲(chǔ)內(nèi)部運(yùn)行指標(biāo)巍扛。稍后再查看以了解InfluxDB
如何在幕后執(zhí)行。
設(shè)置使用哪個(gè)數(shù)據(jù)庫(kù) use <db-name>
在使用SHOW DATABASES
查看了有哪些數(shù)據(jù)庫(kù)之后乏德,就可以使用USE <db-name>
來(lái)設(shè)置將要使用的數(shù)據(jù)庫(kù)撤奸,自動(dòng)為將來(lái)的所有請(qǐng)求設(shè)置數(shù)據(jù)庫(kù)。例如:
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>
> use mydb
Using database mydb
>
現(xiàn)在,將來(lái)的命令只會(huì)針對(duì)mydb
數(shù)據(jù)庫(kù)運(yùn)行寂呛。
寫(xiě)入數(shù)據(jù)到數(shù)據(jù)庫(kù)中
現(xiàn)在我們有了一個(gè)數(shù)據(jù)庫(kù)怎诫,
InfluxDB
已準(zhǔn)備好接受查詢和寫(xiě)入。
InfluxDB
中的數(shù)據(jù)按“時(shí)間序列”進(jìn)行組織贷痪,其中包含測(cè)量值,如“cpu_load
”或“temperature
”幻妓。
時(shí)間序列的數(shù)據(jù)存在多個(gè)時(shí)間點(diǎn)測(cè)量值都是零的情況,部分存在測(cè)量值劫拢。
其中每個(gè)時(shí)間點(diǎn)的數(shù)據(jù)包含了時(shí)間戳和測(cè)量值(例如"cpu_load
")肉津,并且至少有一個(gè)鍵值field
對(duì)應(yīng),例如cpu_load = 21.2
舱沧。
大體格式可以簡(jiǎn)單理解這樣 :時(shí)間 cpu_load = 21.2
妹沙。
另外還有一種鍵值標(biāo)簽 tags
的數(shù)據(jù),例如 "host=server01
","region=EMEA
"等熟吏。
從概念上講距糖,您可以將存儲(chǔ)測(cè)量值數(shù)據(jù)表格視為一個(gè)SQL表,其中主索引始終是時(shí)間牵寺。
tags
并且fields
是表中的有效列悍引。tags
可以是索引,而fields
則無(wú)法設(shè)置為索引帽氓。相對(duì)于SQL表不同之處在于趣斤,使用InfluxDB
,您可以進(jìn)行數(shù)百萬(wàn)次測(cè)量黎休,您不必預(yù)先定義表格浓领,也不會(huì)存儲(chǔ)空值。
使用線路協(xié)議(Line Protocol
)將點(diǎn)寫(xiě)入InfluxDB势腮,其遵循以下格式:
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
以下幾行都是可以寫(xiě)入InfluxDB的點(diǎn)的示例:
cpu,host=serverA,region=us_west value=0.64
payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
stock,symbol=AAPL bid=127.46,ask=127.48
temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
注意:有關(guān)線路協(xié)議的更多信息联贩,請(qǐng)參見(jiàn)“ 語(yǔ)法”頁(yè)面。
要使用CLI將單個(gè)時(shí)間序列數(shù)據(jù)點(diǎn)插入InfluxDB嫉鲸,請(qǐng)輸入INSERT后跟一個(gè)點(diǎn):
root@d2918dc47850:/# influx
Connected to http://localhost:8086 version 1.7.2
InfluxDB shell version: 1.7.2
Enter an InfluxQL query
> show databases
name: databases
name
----
_internal
mydb
>
> use mydb
Using database mydb
>
> INSERT cpu,host=serverA,region=us_west value=0.64
>
INSERT cpu,host=serverA,region=us_west value=0.64
說(shuō)明:測(cè)量名稱為cpu
和標(biāo)記(tag
)的點(diǎn)host撑蒜,region
現(xiàn)在已經(jīng)寫(xiě)入數(shù)據(jù)庫(kù)歹啼,測(cè)量value
值為0.64
玄渗。
查詢剛才寫(xiě)的數(shù)據(jù):
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time host region value
---- ---- ------ -----
1546688002825475579 serverA us_west 0.64
>
可以看出測(cè)量名稱cpu
就是SQL
的表名,其他就是字段名稱狸眼。這樣就更加好理解了藤树。
注意:在插入數(shù)據(jù)的時(shí)候,并沒(méi)有提供時(shí)間戳拓萌。如果沒(méi)有為某個(gè)點(diǎn)提供時(shí)間戳岁钓,InfluxDB會(huì)在獲取該點(diǎn)時(shí)分配本地當(dāng)前時(shí)間戳。
這個(gè)時(shí)間戳就類型mysql中的自增長(zhǎng)id。
讓我們嘗試存儲(chǔ)另一種類型的數(shù)據(jù)屡限,在同一測(cè)量中有兩個(gè)字段:
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
>
查詢剛剛插入temperature
的所有字段和標(biāo)記品嚣,您可以使用*
運(yùn)算符:
> select * from temperature
name: temperature
time external internal machine type
---- -------- -------- ------- ----
1546688551508705124 25 37 unit42 assembly
>
警告: 在大型數(shù)據(jù)庫(kù)上使用*不帶LIMIT子句可能會(huì)導(dǎo)致性能問(wèn)題。您可以使用Ctrl+C取消響應(yīng)時(shí)間過(guò)長(zhǎng)的查詢钧大。
## 再次插入多條數(shù)據(jù)
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
>
> select * from temperature
name: temperature
time external internal machine type
---- -------- -------- ------- ----
1546688551508705124 25 37 unit42 assembly
1546688749536654124 25 37 unit42 assembly
1546688750174577918 25 37 unit42 assembly
1546688750737028280 25 37 unit42 assembly
1546688751229687907 25 37 unit42 assembly
1546688751772543015 25 37 unit42 assembly
1546688752401279324 25 37 unit42 assembly
## 使用limit查詢翰撑,基本跟SQL寫(xiě)法一致
> select * from temperature limit 3
name: temperature
time external internal machine type
---- -------- -------- ------- ----
1546688551508705124 25 37 unit42 assembly
1546688749536654124 25 37 unit42 assembly
1546688750174577918 25 37 unit42 assembly
>
InfluxQL有許多功能和關(guān)鍵字,這里沒(méi)有涉及啊央,包括對(duì)Go風(fēng)格的正則表達(dá)式的支持眶诈。例如:
執(zhí)行使用正則匹配所有數(shù)據(jù) SELECT * FROM /.*/ LIMIT 1
> SELECT * FROM /.*/
name: cpu
time external host internal machine region type value
---- -------- ---- -------- ------- ------ ---- -----
1546688002825475579 serverA us_west 0.64
name: temperature
time external host internal machine region type value
---- -------- ---- -------- ------- ------ ---- -----
1546688551508705124 25 37 unit42 assembly
1546688749536654124 25 37 unit42 assembly
1546688750174577918 25 37 unit42 assembly
1546688750737028280 25 37 unit42 assembly
1546688751229687907 25 37 unit42 assembly
1546688751772543015 25 37 unit42 assembly
1546688752401279324 25 37 unit42 assembly
>
## 如果要看有哪些表格數(shù)據(jù),可以使用這句進(jìn)行查看瓜饥。
> SELECT * FROM /.*/ limit 1
name: cpu
time external host internal machine region type value
---- -------- ---- -------- ------- ------ ---- -----
1546688002825475579 serverA us_west 0.64
name: temperature
time external host internal machine region type value
---- -------- ---- -------- ------- ------ ---- -----
1546688551508705124 25 37 unit42 assembly
>
執(zhí)行where語(yǔ)句條件判斷:select * from "temperature" where "internal" > 36
> select * from "temperature" where "internal" > 36
name: temperature
time external internal machine type
---- -------- -------- ------- ----
1546688551508705124 25 37 unit42 assembly
1546688749536654124 25 37 unit42 assembly
1546688750174577918 25 37 unit42 assembly
1546688750737028280 25 37 unit42 assembly
1546688751229687907 25 37 unit42 assembly
1546688751772543015 25 37 unit42 assembly
1546688752401279324 25 37 unit42 assembly
>
> select * from "temperature" where "internal" > 38
>
這就是將數(shù)據(jù)寫(xiě)入InfluxDB并進(jìn)行查詢所需要知道的全部?jī)?nèi)容逝撬。要了解有關(guān)InfluxDB寫(xiě)入?yún)f(xié)議的更多信息,請(qǐng)查看寫(xiě)入數(shù)據(jù)指南乓土。要進(jìn)一步探索查詢語(yǔ)言宪潮,請(qǐng)查看查詢數(shù)據(jù)指南。有關(guān)InfluxDB概念的更多信息趣苏,請(qǐng)查看“ 關(guān)鍵概念”頁(yè)面认臊。