1. 程式人生 > >Influxdb相關概念及簡單實用操作

Influxdb相關概念及簡單實用操作

轉自:https://blog.csdn.net/Jailman/article/details/78427896?locationNum=6&fps=1

新的infludb版本已經取消了頁面的訪問方式,只能使用客戶端來檢視資料

一、influxdb與傳統資料庫的比較

庫、表等比較:

influxDB 傳統資料庫中的概念
database 資料庫
measurement 資料庫中的表
points 表裡面的一行資料

influxdb資料的構成:

 

Point由時間戳(time)、資料(field)、標籤(tags)組成。

Point屬性 傳統資料庫中的概念
time 每個資料記錄時間,是資料庫中的主索引(會自動生成)
fields 各種記錄值(沒有索引的屬性)也就是記錄的值:溫度, 溼度
tags 各種有索引的屬性:地區,海拔

 

這裡不得不提另一個名詞:series:

所有在資料庫中的資料,都需要通過圖表來展示,而這個series表示這個表裡面的資料,可以在圖表上畫成幾條線:通過tags排列組合算出來。具體可以通過

SHOW SERIES FROM "表名" 進行查詢。

influxdb使用的埠如下:

8083: Web admin管理服務的埠, http://localhost:8083
8086: HTTP API的埠
8088: 叢集埠(目前還不是很清楚, 配置在全域性的bind-address,預設不配置就是開啟的)

 

二、安裝及增刪改查

1、安裝

# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm
# rpm -ivh influxdb-1.1.0.x86_64.rpm
# systemctl enable influxdb
# systemctl start influxdb

注:本示例是在centos7/rhel7中配置的服務,如果在rhel6下,可以使用service進行服務配置和啟動。

2、命令列下建立及查詢

通過influx命令進行管理,可以使用如下命令建立資料庫:

> CREATE DATABASE "testDB"
> show databases //查詢當前的所有資料庫
> show databases
name: databases
---------------
name
_internal
testDB
> use testDB //使用某個資料庫

建庫的操作可以發現非常類似於mysql下的操作。而在influxdb下沒有細分的表的概念,influxdb下的表在插入資料庫的時候自動會建立。可以通過SHOW measurements命令檢視所有的表,這個類似於mysql下的show tables; 。

> INSERT cpu,host=serverA,region=us_west value=0.64 //在cpu表中插入相關的資料
> SELECT * FROM cpu ORDER BY time DESC LIMIT 3 //查詢最近的三條資料
> SELECT * FROM /.*/ LIMIT 1 //正則表示式查詢
> delete from cpu where time=1480235366557373922 //刪除某條資料
> DROP MEASUREMENT "measurementName" //刪除表

update更新語句沒有,不過有alter命令,在influxdb中,刪除操作用和更新基本不用到 。在針對資料儲存策略方面,有一個特殊的刪除方式,這個後面再提。

關於使用者的操作如下:

# 顯示使用者
SHOW USERS
# 建立使用者
CREATE USER "username" WITH PASSWORD 'password'
# 建立管理員許可權的使用者
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
# 刪除使用者
DROP USER "username"

influxdb的許可權設定比較簡單,只有讀、寫、ALL幾種。更多使用者許可權設定可以參看官方文件:https://docs.influxdata.com/influxdb/v1.0/query_language/authentication_and_authorization/ 。預設情況下,influxdb類似與mongodb,是不開啟使用者認證的,可以修改其 conf檔案,配置http塊內容如下:

[http]
enable = true
bind-address = ":8086"
auth-enabled = true # 開啟認證

三、資料儲存策略及連續查詢

1、資料儲存策略

一般情況下基於時間序列的point資料不會進行直接刪除操作,一般我們平時只關心當前資料,歷史資料不需要一直儲存,不然會佔用太多空間。這裡可以配置資料儲存策略(Retention Policies),當資料超過了指定的時間之後,就會被刪除。

SHOW RETENTION POLICIES ON "testDB" //檢視當前資料庫的Retention Policies
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 30d REPLICATION 1 DEFAULT //建立新的Retention Policies
#註釋如下:
rp_name:策略名
db_name:具體的資料庫名
30d:儲存30天,30天之前的資料將被刪除
它具有各種時間引數,比如:h(小時),w(星期)
REPLICATION 1:副本個數,這裡填1就可以了
DEFAULT 設為預設的策略

也可以通過如下命令修改和刪策略:

ALTER RETENTION POLICY "rp_name" ON db_name" DURATION 3w DEFAULT
DROP RETENTION POLICY "rp_name" ON "db_name"

2、連續查詢(Continuous Queries)

當資料超過儲存策略裡指定的時間之後,就會被刪除。如果我們不想完全刪除掉,比如做一個數據統計取樣:把原先每秒的資料,存為每小時的資料,讓資料佔用的空間大大減少(以降低精度為代價)。這就需要InfluxDB提供的:連續查詢(Continuous Queries)。

檢視當前的查詢策略

SHOW CONTINUOUS QUERIES

建立新的Continuous Queries

CREATE CONTINUOUS QUERY cq_30m ON testDB BEGIN SELECT mean(temperature) INTO weather30m FROM weather GROUP BY time(30m) END
註釋如下:
cq_30m:連續查詢的名字
testDB:具體的資料庫名
mean(temperature): 算平均溫度
weather: 當前表名
weather30m: 存新資料的表名
30m:時間間隔為30分鐘

當我們插入新資料之後,通過SHOW MEASUREMENTS查詢發現。可以發現數據庫中多了一張名為weather30m(裡面已經存著計算好的資料了)。這一切都是通過Continuous Queries自動完成的。

刪除Continuous Queries

DROP CONTINUOUS QUERY <cq_name> ON <database_name>

 

四、RESTful 介面操作

插入及查詢操作:

# code from www.361way.com
now=$(date '+%FT%T.000Z')
tomorrow=$(date -v +1d '+%FT%T.000Z')
echo "creating database"
curl -G http://localhost:8086/query --data-urlencode "q=CREATE DATABASE foo"
echo "creating retention policy"
curl -G http://localhost:8086/query --data-urlencode "q=CREATE RETENTION POLICY bar ON foo DURATION INF REPLICATION 1 DEFAULT"
echo "inserting data"
curl -d "{\"database\" : \"foo\", \"retentionPolicy\" : \"bar\", \"points\": [{\"measurement\": \"cpu\", \"tags\": {\"region\":\"uswest\",\"host\": \"server01\"},\"time\": \"$now\",\"fields\": {\"value\": 100}}]}" -H "Content-Type: application/json" http://localhost:8086/write
echo "inserting data"
curl -d "{\"database\" : \"foo\", \"retentionPolicy\" : \"bar\", \"points\": [{\"measurement\": \"cpu\", \"tags\": {\"region\":\"uswest\",\"host\": \"server01\"},\"time\": \"$tomorrow\",\"fields\": {\"value\": 200}}]}" -H "Content-Type: application/json" http://localhost:8086/write
sleep 1
echo "querying data"
curl -G http://localhost:8086/query --data-urlencode "db=foo" --data-urlencode "q=SELECT count(value) FROM \"foo\".\"bar\".cpu"
echo "querying data"
curl -G http://localhost:8086/query --data-urlencode "db=foo" --data-urlencode "q=SELECT count(value) FROM \"foo\".\"bar\".cpu where time < now() + 10d"

GZIP壓縮資料插入及查詢:

# code from www.361way.com
echo "inserting data"
curl -v -i -H "Content-encoding: gzip" -H "Content-Type: application/json" -X POST -T foo.json.gz http://localhost:8086/write
rm foo.json.gz
echo "querying data with gzip encoding"
curl -v -G --compressed http://localhost:8086/query --data-urlencode "db=foo" --data-urlencode "q=SELECT sum(value) FROM \"foo\".\"bar\".cpu GROUP BY time(1h)"

還可以指定資料儲存策略及表的各關鍵值插入:

echo "creating retention policy"
curl -G http://localhost:8086/query --data-urlencode "q=CREATE RETENTION POLICY bar ON foo DURATION 300d REPLICATION 3 DEFAULT"
curl -d '{"database" : "foo", "retentionPolicy" : "bar", "points": [{"measurement": "network", "tags": {"host": "server01","region":"uswest"},"time": "2015-02-26T22:01:11.703Z","fields": {"rx": 2342,"tx": 9804}}]}' -H "Content-Type: application/json" http://localhost:8086/write
curl -d '{"database" : "foo", "retentionPolicy" : "bar", "points": [{"measurement": "network", "tags": {"host": "server01","region":"useast"},"time": "2015-02-27T22:01:11.703Z","fields": {"rx": 4324,"tx": 7930}}]}' -H "Content-Type: application/json" http://localhost:8086/write

更多可以參考github上的測試內容

無論是influx還是通過RESETful 引數進行查詢,其還有pertty引數可以使輸出的json格式更加美觀 。除此之外,influx命令還有column、CSV等格式輸出,influx命令支援通過import引數輸入類csv類格式的資料。

五、influxdb.conf配置web管理

當前版本的influxdb,預設情況下未開啟web管理功能。可以通過修改influxdb.conf檔案中admin項的配置開啟web管理介面,具體如下:

[admin]
# Determines whether the admin service is enabled.
enabled = true
# The default bind address used by the admin service.
bind-address = ":8083"

influxdb