運(yùn)維監(jiān)控必看:必懂的 InfluxDB 使用指南,關(guān)鍵時(shí)刻能用上
?InfluxDB是什么
InfluxDB 是一個(gè)由 InfluxData 開發(fā)的開源時(shí)序型數(shù)據(jù)庫(kù)。它由 Go 寫成,著力于高性能地查詢與存儲(chǔ)時(shí)序型數(shù)據(jù)。InfluxDB 被廣泛應(yīng)用于存儲(chǔ)系統(tǒng)的監(jiān)控?cái)?shù)據(jù),IoT 行業(yè)的實(shí)時(shí)數(shù)據(jù)等場(chǎng)景。技術(shù)特點(diǎn)包括:
- InfluxDB在技術(shù)實(shí)現(xiàn)上充分利用了Go語(yǔ)言的特性,無(wú)需任何外部依賴即可獨(dú)立部署[5]。
- InfluxDB提供了一個(gè)類似于SQL的查詢語(yǔ)言并且一系列內(nèi)置函數(shù)方便用戶進(jìn)行數(shù)據(jù)查詢。
- InfluxDB存儲(chǔ)的數(shù)據(jù)從邏輯上由 Measurement, tag組以及field 組以及一個(gè)時(shí)間戳組成的:
Measurement:由一個(gè)字符串表示該條記錄對(duì)應(yīng)的含義。比如它可以是監(jiān)控?cái)?shù)據(jù)cpu_load?,也可以是測(cè)量數(shù)據(jù)average_temperature
tag組:由一組鍵值對(duì)組成,表示的是該條記錄的一系列屬性信息。同樣的 measurement 數(shù)據(jù)所擁有的 tag 組不一定相同,它是無(wú)模式的(Schema-free)。tag 信息是默認(rèn)被索引的。
field組:也是由一組鍵值對(duì)組成,表示的是該條記錄具體的value信息(有名稱)。field組中可定義的value類型包括:64位整型,64位浮點(diǎn)型,字符串以及布爾型。Field信息是無(wú)法被索引的。
時(shí)間戳:就是該條記錄的時(shí)間屬性。如果插入數(shù)據(jù)時(shí)沒有明確指定時(shí)間戳,則默認(rèn)存儲(chǔ)在數(shù)據(jù)庫(kù)中的時(shí)間戳則為該條記錄的入庫(kù)時(shí)間。
InfluxDB 支持基于 HTTP 的數(shù)據(jù)插入與查詢。同時(shí)也接受直接基于TCP或UDP協(xié)議的連接。
InfluxDB 允許用戶定義數(shù)據(jù)保存策略(Retention Policies)來(lái)實(shí)現(xiàn)對(duì)存儲(chǔ)超過(guò)指定時(shí)間的數(shù)據(jù)進(jìn)行刪除或者降采樣。
增刪改查操作
進(jìn)入influxDB命令行
InfluxDB數(shù)據(jù)庫(kù)操作
- 顯示數(shù)據(jù)庫(kù)
- 新建數(shù)據(jù)庫(kù)
- 刪除數(shù)據(jù)庫(kù)
- 使用指定數(shù)據(jù)庫(kù)
InfluxDB數(shù)據(jù)表操作
在 InfluxDB 當(dāng)中,并沒有表(table)這個(gè)概念,取而代之的是 MEASUREMENTS,MEASUREMENTS 的功能與傳統(tǒng)數(shù)據(jù)庫(kù)中的表一致,因此我們也可以將 MEASUREMENTS 稱為 InfluxDB 中的表。
? 顯示所有表
? 新建表
InfluxDB中沒有顯式的新建表的語(yǔ)句,只能通過(guò)insert數(shù)據(jù)的方式來(lái)建立新表。
其中 disk_free? 就是表名,hostname?是索引(tag),value=xx是記錄值(field),記錄值可以有多個(gè),系統(tǒng)自帶追加時(shí)間戳
或者添加數(shù)據(jù)時(shí),自己寫入時(shí)間戳
? 刪除表
數(shù)據(jù)保存策略(Retention Policies)
influxDB是沒有提供直接刪除數(shù)據(jù)記錄的方法,但是提供數(shù)據(jù)保存策略,主要用于指定數(shù)據(jù)保留時(shí)間,超過(guò)指定時(shí)間,就刪除這部分?jǐn)?shù)據(jù)。
- 查看當(dāng)前數(shù)據(jù)庫(kù) Retention Policies
- 創(chuàng)建新的 Retention Policies
rp_name:策略名;
db_name:具體的數(shù)據(jù)庫(kù)名;
3w:保存3周,3周之前的數(shù)據(jù)將被刪除,influxdb具有各種事件參數(shù),比如:h(小時(shí)),d(天),w(星期);replication 1:副本個(gè)數(shù),一般為1就可以了;
default:設(shè)置為默認(rèn)策略
- 修改 Retention Policies
- 修改數(shù)據(jù)策略
- 刪除 Retention Policies
查詢數(shù)據(jù)
插入數(shù)據(jù)
插入數(shù)據(jù)同時(shí)創(chuàng)建表
刪除數(shù)據(jù)
influxDB是沒有提供直接刪除數(shù)據(jù)記錄的方法,但是提供數(shù)據(jù)保存策略,主要用于指定數(shù)據(jù)保留時(shí)間,超過(guò)指定時(shí)間,就刪除這部分?jǐn)?shù)據(jù)。創(chuàng)建新的 數(shù)據(jù)庫(kù)過(guò)期策略至少一個(gè)小時(shí)
查詢表字段
查詢tag:show tag keys from cluster_metric
查詢field:show field keys from cluster_metric
時(shí)區(qū)問(wèn)題
在使用 InfluxDB 時(shí),發(fā)現(xiàn)由于 InfluxDB 使用的是 UTC 時(shí)間,在查詢時(shí)經(jīng)常會(huì)遇到時(shí)區(qū)的問(wèn)題
1、時(shí)間格式
InfluxDB 除了支 epoch_time?外,還支持rfc3339_date_time_string和rfc3339_like_date_time_string。
epoch_time
理論一些的解釋是從協(xié)調(diào)世界時(shí)(Thursday, 1 January 1970)開始至今過(guò)去的時(shí)間。比如我們?cè)?java 程序中使用System.currentTimeMillis()得到的就是這個(gè)時(shí)間。一般情況下為毫秒級(jí)(ms)精度,即13位Long類型。而在InfluxDB中,時(shí)間戳的精度可以達(dá)到納秒級(jí)(ns)即19位Long類型。
rfc3339_date_time_string
rfc3339時(shí)間格式是ietf協(xié)會(huì)定義的一種時(shí)間格式,這個(gè)名字是因?yàn)樗欢x在rfc3339中。感興趣的同學(xué)可以自己查看上面的連接。InfluxDB中rfc3339的時(shí)間格式是這樣的:
其中nnnnnnnnn是可選的,如果不寫則會(huì)被設(shè)置為000000000。注意,如果使用這種時(shí)間格式,需要使用單括號(hào)(’)將時(shí)間括起來(lái)。
rfc3339_like_date_time_string
因?yàn)閞fc3339_date_time_string的格式確實(shí)比較反人類,所以InfluxDB也支持這種人類閱讀更友好的格式:
其中HH:MM:SS.nnnnnnnnn是可選的,如果不填寫會(huì)被設(shè)置為00:00:00.000000000。所以查詢時(shí)可以設(shè)置到天、小時(shí)、分鐘、秒等不同精度。這種時(shí)間格式同樣要求被單括號(hào)括起來(lái)。
2、調(diào)整時(shí)間戳精度
InfluxDB默認(rèn)東時(shí)間是納秒(ns),即19位時(shí)間戳。但是一般情況下時(shí)間精度不會(huì)這么高。所以如果使用秒級(jí)精度查詢:
如果使用毫秒級(jí)精度查詢:
3、調(diào)整時(shí)區(qū)
如果需要使用北京時(shí)間(東八區(qū)),可以在SQL中使用tc關(guān)鍵字:
4、UTC時(shí)間與Beijing時(shí)間轉(zhuǎn)換
Timestamp時(shí)間列
既然是時(shí)間序列數(shù)據(jù)庫(kù),influxdb 的數(shù)據(jù)都有一列名為 time 的列,里面存儲(chǔ) UTC 時(shí)間戳。
Influxdb 時(shí)間轉(zhuǎn)成北京時(shí)間:UTC time + 8 hours = Beijing time
sql語(yǔ)句
啟動(dòng)服務(wù)
啟動(dòng):
重啟:
切換到普通用戶:
命令:exit