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