0. 簡介
InfluxDB是一個由InfluxData開發的開源時序型數據。它由Go寫成,着力於高性能地查詢與存儲時序型數據。InfluxDB被廣泛應用於存儲系統的監控數據,IoT行業的實時數據等場景。
本次用InfluxDB來存儲監控數據。
具體安裝教程見官網influxdb官網教程
influxdb中文教程
`
1. 基本概念
概念 | MYSQL | InfluxDB |
---|---|---|
數據庫 | database | database |
表 | table | measurement |
列 | column | field |
主鍵 | 可以自增主鍵,不能重複 | timestemp(唯一主鍵) |
索引 | 一個或者多個列設置爲索引 | tag(帶索引的,非必須) |
- influx 啓動
- measurement 操作的表,假如不存在則直接創建一個
- tag 僅僅支持字符類型
- field 類型沒有限制
- points 表中的一行數據,由時間戳 time,數據field,索引tags組成
- Telegraf(數據收集)+InfluxDB(數據存儲)+Grafana(數據展示的圖形界面,將influxDB數據可視化)經常一起使用
- retention policy:數據存儲策略 InfluxDB沒有刪除數據操作,規定數據的保留時間達到清除數據的目的,可以更改保留時間
- tag sets: tags 在 InfluxDB 中會按照字典序排序,不管是 tagk 還是 tagv,只要不一致就分別屬於兩個 key,例如 host=server01,region=us-west 和 host=server02,region=us-west 就是兩個不同的 tag set。
- Series Series 相當於是 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一起。
- Shard 在 InfluxDB 中是一個比較重要的概念,它和 retention policy 相關聯。每一個存儲策略下會存在許多 shard,每一個 shard 存儲一個指定時間段內的數據,並且不重複,例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。每一個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file。
具體命令如下:
[eqs@eqx_test ~]$ influx
Connected to http://localhost:8086 version 1.2.4
InfluxDB shell version: 1.2.4
#查看所以數據庫
> show databases;
name: databases
name
----
_internal
sentinel_log
#使用特定的數據庫
> use sentinel_log;
Using database sentinel_log
#查看所以的表
> show measurements;
name: measurements
name
----
sentinelInfo
sentinel_app
#查詢一個表的一條數據,time爲主鍵,其中app和resource爲tag,其他的字段爲field
> select * from sentinelInfo limit 1
name: sentinelInfo
time app async blockQps count exceptionQps gmtCreate gmtModified passQps resource resourceCode rt successQps timestamp
---- --- ----- -------- ----- ------------ --------- ----------- ------- -------- ------------ -- ---------- ---------
1585555946175000000 com.alibaba.csp.sentinel.demo.spring.webmvc.WebMvcDemoApplication true 0 1 0 1585555946171 1585555946171 1 GET:/hello 519655111 97 1 1585555943000
#查看錶中的tag(索引)字段
> show tag keys
name: sentinelInfo
tagKey
------
app
async
resource
name: sentinel_app
tagKey
------
async
#查看錶中field 的key值
> show field keys
name: sentinelInfo
fieldKey fieldType
-------- ---------
blockQps integer
count integer
exceptionQps integer
gmtCreate integer
gmtModified integer
passQps integer
resourceCode integer
rt float
successQps integer
timestamp integer
name: sentinel_app
fieldKey fieldType
-------- ---------
app string
resource string
#查看所有的保存策略(可以有多個,一個標識爲default)
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
#查看指定數據庫的保存策略
#name: 名稱
#duration: 保留時間, 0表示永久保存
#shardGroupDuration: shardGroup的存儲時間,shardGroup是InfluxDB的一個基本儲存結構,應該大於這個時間的數據在查詢效率上應該有所降低。
#replicaN: 全稱是REPLICATION,副本個數 default: 是否是默認策略
> show retention policies on "sentinel_log"
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
#更改默認保存策略的時間
> alter retention policy "autogen" on "sentinel_log" duration 30d default
#已經是最新的保存策略時間了
> show retention policies on "sentinel_log"
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 720h0m0s 168h0m0s 1 true