Influxdb簡單實用操作


新的infludb版本已經取消了頁面的訪問方式,只能使用客戶端來查看數據

一、influxdb與傳統數據庫的比較

庫、表等比較:

influxDB 傳統數據庫中的概念
database 數據庫
measurement 數據庫中的表
points 表里面的一行數據

influxdb數據的構成:

Point由時間戳(time)、數據(field)、標簽(tags)組成。

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

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

所有在數據庫中的數據,都需要通過圖表來展示,而這個series表示這個表里面的數據,可以在圖表上畫成幾條線:通過tags排列組合算出來。具體可以通過SHOW SERIES FROM "表名" 進行查詢。

influxdb使用的端口如下:

 
        
  1. 8083: Web admin管理服務的端口, http://localhost:8083
  2. 8086: HTTP API的端口
  3. 8088: 集群端口(目前還不是很清楚, 配置在全局的bind-address,默認不配置就是開啟的)

二、安裝及增刪改查

1、安裝

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

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

2、命令行下創建及查詢

通過influx命令進行管理,可以使用如下命令創建數據庫:

 
        
  1. > CREATE DATABASE "testDB"
  2. > show databases //查詢當前的所有數據庫
  3. > show databases
  4. name: databases
  5. ---------------
  6. name
  7. _internal
  8. testDB
  9. > use testDB //使用某個數據庫

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

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

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

關於用戶的操作如下:

 
        
  1. # 顯示用戶
  2. SHOW USERS
  3. # 創建用戶
  4. CREATE USER "username" WITH PASSWORD 'password'
  5. # 創建管理員權限的用戶
  6. CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
  7. # 刪除用戶
  8. DROP USER "username"

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

 
        
  1. [http]
  2. enable = true
  3. bind-address = ":8086"
  4. auth-enabled = true # 開啟認證

三、數據保存策略及連續查詢

1、數據保存策略

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

 
        
  1. SHOW RETENTION POLICIES ON "testDB" //查看當前數據庫的Retention Policies
  2. CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 30d REPLICATION 1 DEFAULT //創建新的Retention Policies
  3. #注釋如下:
  4. rp_name:策略名
  5. db_name:具體的數據庫名
  6. 30d:保存30天,30天之前的數據將被刪除
  7. 它具有各種時間參數,比如:h(小時),w(星期)
  8. REPLICATION 1:副本個數,這里填1就可以了
  9. DEFAULT 設為默認的策略

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

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

2、連續查詢(Continuous Queries)

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

查看當前的查詢策略

 
        
  1. SHOW CONTINUOUS QUERIES

創建新的Continuous Queries

 
        
  1. CREATE CONTINUOUS QUERY cq_30m ON testDB BEGIN SELECT mean(temperature) INTO weather30m FROM weather GROUP BY time(30m) END
  2. 注釋如下:
  3. cq_30m:連續查詢的名字
  4. testDB:具體的數據庫名
  5. mean(temperature): 算平均溫度
  6. weather 當前表名
  7. weather30m 存新數據的表名
  8. 30m:時間間隔為30分鍾

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

刪除Continuous Queries

 
        
  1. DROP CONTINUOUS QUERY <cq_name> ON <database_name>

四、RESTful 接口操作

插入及查詢操作:

 
        
  1. # code from www.361way.com
  2. now=$(date '+%FT%T.000Z')
  3. tomorrow=$(date -v +1d '+%FT%T.000Z')
  4. echo "creating database"
  5. curl -G http://localhost:8086/query --data-urlencode "q=CREATE DATABASE foo"
  6. echo "creating retention policy"
  7. curl -G http://localhost:8086/query --data-urlencode "q=CREATE RETENTION POLICY bar ON foo DURATION INF REPLICATION 1 DEFAULT"
  8. echo "inserting data"
  9. 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
  10. echo "inserting data"
  11. 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
  12. sleep 1
  13. echo "querying data"
  14. curl -G http://localhost:8086/query --data-urlencode "db=foo" --data-urlencode "q=SELECT count(value) FROM \"foo\".\"bar\".cpu"
  15. echo "querying data"
  16. 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壓縮數據插入及查詢:

 
        
  1. # code from www.361way.com
  2. echo "inserting data"
  3. curl -v -i -H "Content-encoding: gzip" -H "Content-Type: application/json" -X POST -T foo.json.gz http://localhost:8086/write
  4. rm foo.json.gz
  5. echo "querying data with gzip encoding"
  6. 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)"

還可以指定數據保存策略及表的各關鍵值插入:

 
        
  1. echo "creating retention policy"
  2. curl -G http://localhost:8086/query --data-urlencode "q=CREATE RETENTION POLICY bar ON foo DURATION 300d REPLICATION 3 DEFAULT"
  3. 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
  4. 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管理界面,具體如下:

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

influxdb



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM