InfluxDB 是一個由 InfluxData 開發的開源時序型資料庫。它由 Go 寫成,著力於高效能地查詢與儲存時序型資料。 InfluxDB 被廣泛應用於儲存系統的監控數據,IoT 產業的即時數據等情境。技術特點包括:
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 當中,並沒有表(table)這個概念,取而代之的是MEASUREMENTS,MEASUREMENTS 的功能與傳統資料庫中的表一致,因此我們也可以將MEASUREMENTS 稱為InfluxDB 中的表。
• 顯示所有表格
SHOW MEASUREMENTS
• 新表格
#InfluxDB中沒有明確的新表格的語句,只能透過insert資料的方式來建立新表格。
insert disk_free,hostname=server01 value=442221834240i insert cpu_virtual_used_num,host=1 value=41556593150
其中 disk_free 就是表名,hostname是索引(tag),value=xx是記錄值(field),記錄值可以有多個,系統自帶追加時間戳
或新增資料時,自己寫入時間戳
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
• 刪除表
drop measurement disk_free
influxDB是沒有提供直接刪除資料記錄的方法,但提供資料保存策略,主要用於指定資料保留時間,超過指定時間,就刪除這部分資料。
show retention policies on "db_name" show retention policies on cdhnm
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:設定為預設策略
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
drop retention policy “rp_name” on “db_name" drop retention policy test on cdhnm
select * fromcpu_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 時間,在查詢時常會遇到時區的問題
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。所以查询时可以设置到天、小时、分钟、秒等不同精度。这种时间格式同样要求被单括号括起来。
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
如果需要使用北京时间(东八区),可以在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')
Timestamp时间列
既然是时间序列数据库,influxdb 的数据都有一列名为 time 的列,里面存储 UTC 时间戳。
Influxdb 时间转成北京时间:UTC time + 8 hours = Beijing time
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
以上是維運監控必看:必懂的 InfluxDB 使用指南,關鍵時刻能用上的詳細內容。更多資訊請關注PHP中文網其他相關文章!