InfluxDB是什麼
InfluxDB 是一個由 InfluxData 開發的開源時序型資料庫。它由 Go 寫成,着力于高性能地查詢與存儲時序型資料。InfluxDB 被廣泛應用于存儲系統的監控資料,IoT 行業的實時資料等場景。技術特點包括:
- InfluxDB在技術實作上充分利用了Go語言的特性,無需任何外部依賴即可獨立部署[5]。
- InfluxDB提供了一個類似于SQL的查詢語言并且一系列内置函數友善使用者進行資料查詢。
- InfluxDB存儲的資料從邏輯上由 Measurement, tag組以及field 組以及一個時間戳組成的:
- Measurement:由一個字元串表示該條記錄對應的含義。比如它可以是監控資料cpu_load,也可以是測量資料average_temperature
- tag組:由一組鍵值對組成,表示的是該條記錄的一系列屬性資訊。同樣的 measurement 資料所擁有的 tag 組不一定相同,它是無模式的(Schema-free)。tag 資訊是預設被索引的。
- field組:也是由一組鍵值對組成,表示的是該條記錄具體的value資訊(有名稱)。field組中可定義的value類型包括:64位整型,64位浮點型,字元串以及布爾型。Field資訊是無法被索引的。
- 時間戳:就是該條記錄的時間屬性。如果插入資料時沒有明确指定時間戳,則預設存儲在資料庫中的時間戳則為該條記錄的入庫時間。
- InfluxDB 支援基于 HTTP 的資料插入與查詢。同時也接受直接基于TCP或UDP協定的連接配接。
- InfluxDB 允許使用者定義資料儲存政策(Retention Policies)來實作對存儲超過指定時間的資料進行删除或者降采樣。
增删改查操作
進入influxDB指令行
influx -precision rfc3339
InfluxDB資料庫操作
- 顯示資料庫
show databases
- 建立資料庫
create database shhnwangjian
- 删除資料庫
drop database shhnwangjian
- 使用指定資料庫
use shhnwangjian
InfluxDB資料表操作
在 InfluxDB 當中,并沒有表(table)這個概念,取而代之的是 MEASUREMENTS,MEASUREMENTS 的功能與傳統資料庫中的表一緻,是以我們也可以将 MEASUREMENTS 稱為 InfluxDB 中的表。
• 顯示所有表
SHOW MEASUREMENTS
• 建立表
InfluxDB中沒有顯式的建立表的語句,隻能通過insert資料的方式來建立新表。
insert disk_free,hostname=server01 value=442221834240i
insert cpu_virtual_used_num,host=1 value=4 1556593150
其中 disk_free 就是表名,hostname是索引(tag),value=xx是記錄值(field),記錄值可以有多個,系統自帶追加時間戳
或者添加資料時,自己寫入時間戳
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
• 删除表
drop measurement disk_free
資料儲存政策(Retention Policies)
influxDB是沒有提供直接删除資料記錄的方法,但是提供資料儲存政策,主要用于指定資料保留時間,超過指定時間,就删除這部分資料。
- 檢視目前資料庫 Retention Policies
show retention policies on "db_name"
show retention policies on cdhnm
- 建立新的 Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
create retention policy test on cdhnm duration 1h replication 1 default
rp_name:政策名;
db_name:具體的資料庫名;
3w:儲存3周,3周之前的資料将被删除,influxdb具有各種事件參數,比如:h(小時),d(天),w(星期);replication 1:副本個數,一般為1就可以了;
default:設定為預設政策
- 修改 Retention Policies
alter retention policy “rp_name” on “db_name” duration 30d default
alter retention policy autogen on cdhnm duration 1h default
- 修改資料政策
alter retention policy autogen on cdhnm duration 0h replication 1 default
- 删除 Retention Policies
drop retention policy “rp_name” on “db_name"
drop retention policy test on cdhnm
查詢資料
select * from cpu_virtual_used_num
插入資料
插入資料同時建立表
insert disk_free,hostname=server01 value=442221834240i
insert cpu_virtual_used_num,host=470b14f0-e869-43ed-a8e6-fd634258271f,hostname=server01 value=0.3 1557023160
删除資料
influxDB是沒有提供直接删除資料記錄的方法,但是提供資料儲存政策,主要用于指定資料保留時間,超過指定時間,就删除這部分資料。建立新的 資料庫過期政策至少一個小時
Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
retention policy duration must be at least 1h0m0s influxdb
查詢表字段
查詢tag:show tag keys from cluster_metric
查詢field:show field keys from cluster_metric
時區問題
在使用 InfluxDB 時,發現由于 InfluxDB 使用的是 UTC 時間,在查詢時經常會遇到時區的問題
1、時間格式
InfluxDB 除了支 epoch_time外,還支援rfc3339_date_time_string和rfc3339_like_date_time_string。
epoch_time
理論一些的解釋是從協調世界時(Thursday, 1 January 1970)開始至今過去的時間。比如我們在 java 程式中使用System.currentTimeMillis()得到的就是這個時間。一般情況下為毫秒級(ms)精度,即13位Long類型。而在InfluxDB中,時間戳的精度可以達到納秒級(ns)即19位Long類型。
rfc3339_date_time_string
rfc3339時間格式是ietf協會定義的一種時間格式,這個名字是因為它被定義在rfc3339中。感興趣的同學可以自己檢視上面的連接配接。InfluxDB中rfc3339的時間格式是這樣的:
‘YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ’
其中nnnnnnnnn是可選的,如果不寫則會被設定為000000000。注意,如果使用這種時間格式,需要使用單括号(’)将時間括起來。
rfc3339_like_date_time_string
因為rfc3339_date_time_string的格式确實比較反人類,是以InfluxDB也支援這種人類閱讀更友好的格式:
‘YYYY-MM-DD HH:MM:SS.nnnnnnnnn’
其中HH:MM:SS.nnnnnnnnn是可選的,如果不填寫會被設定為00:00:00.000000000。是以查詢時可以設定到天、小時、分鐘、秒等不同精度。這種時間格式同樣要求被單括号括起來。
2、調整時間戳精度
InfluxDB預設東時間是納秒(ns),即19位時間戳。但是一般情況下時間精度不會這麼高。是以如果使用秒級精度查詢:
select * from cpu_virtual_used_num where time >= 1435333209s and time <= 1542964713s
如果使用毫秒級精度查詢:
select * from cpu_virtual_used_num where time >= 1435333209000ms and time <= 1542964714000ms
3、調整時區
如果需要使用中原標準時間(東八區),可以在SQL中使用tc關鍵字:
select * from cpu_virtual_used_num where time >= '2018-11-23 14:30:39' and time <= '2019-11-23 14:32:32' tz('Asia/Shanghai')
4、UTC時間與Beijing時間轉換
Timestamp時間列
既然是時間序列資料庫,influxdb 的資料都有一列名為 time 的列,裡面存儲 UTC 時間戳。
Influxdb 時間轉成中原標準時間:UTC time + 8 hours = Beijing time
sql語句
influx -precision rfc3339
show retention policies on cdhnm
alter retention policy autogen on cdhnm duration 1h default
create retention policy test on cdhnm duration 1h replication 1 default
drop retention policy test on cdhnm
insert cpu_virtual_used_num,host=470b14f0-e869-43ed-a8e6-fd634258271f,hostname=server01 value=0.9 1557045292000000000
select * from cpu_virtual_used_num where time >= '2018-11-23 14:30:39' and time <= '2019-11-23 14:32:32' tz('Asia/Shanghai')
delete from cpu_virtual_used_num
啟動服務
切換到root使用者
指令:su
輸入密碼:123456
啟動:
sudo service influxdb start
重新開機:
service influxdb restart
切換到普通使用者:
指令:exit