首頁  >  文章  >  運維  >  維運監控必看:必懂的 InfluxDB 使用指南,關鍵時刻能用上

維運監控必看:必懂的 InfluxDB 使用指南,關鍵時刻能用上

WBOY
WBOY轉載
2023-06-09 13:40:491578瀏覽

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=41556593150

其中 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 * 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 時間,在查詢時常會遇到時區的問題

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

以上是維運監控必看:必懂的 InfluxDB 使用指南,關鍵時刻能用上的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除