運維監控應知應會: InfluxDB 使用指南

Linksla發表於2023-04-06

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2944002/,如需轉載,請註明出處,否則將追究法律責任。

相關文章