官网
下载
概述
influxdb2.0时间序列平台是专门为收集、存储、处理和可视化度量和事件而构建的。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
概念
Point
由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据
Series
相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。
Shard
Shard 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。
TICK技术栈
包括Telegraf, InfluxDB, Chronograf, Kapacitor
安装
docker-compose 安装
version: '3'
services:
emqx:
image: emqx/emqx
container_name: emqx
ports:
- "1883:1883"
- "8083:8083"
- "8883:8883"
- "8084:8084"
- "18083:18083"
influxdb:
image: influxdb
container_name: influxdb
ports:
- "8083:8083"
- "8086:8086"
restart: always
chronograf:
image: chronograf
container_name: chronograf
ports:
- "8888:8888"
restart: always
操作
创建库
> create database mmm
> use mmm;
Using database mmm
显示表
> show measurements;
创建表
> insert disk_free,hostname=server01 value=442221834240i
> drop measurement disk_free
> show retention policies on "db_name"
支持的类sql语句:
DELETE*
DROP MEASUREMENT*
EXPLAIN ANALYZE
SELECT (read-only)
SHOW DATABASES
SHOW MEASUREMENTS
SHOW TAG KEYS
SHOW TAG VALUES
SHOW FIELD KEYS
> insert disk_free,hostname=server01 value=442221834240i
>
> ;
> show measurements
name: measurements
name
----
disk_free
> select * from disk_free
name: disk_free
time hostname value
---- -------- -----
1613728512535811588 server01 442221834240
> show users;
user admin
---- -----
> create user 'dmp' with password '123456'
ERR: error parsing query: found dmp, expected identifier at line 1, char 12
> create user "dmp" with password "123456"
ERR: error parsing query: found 123456, expected string at line 1, char 33
> create user "dmp" with password '123456'
> ;
> show users;
user admin
---- -----
dmp false
> create user "dmp1" with password '123456' with all privileges;
> show users;
user admin
---- -----
dmp false
dmp1 true
模式设计:
- 写数据的位置: tags是有索引的,fields没有。
经常查询的元数据存储在tags
如果每个点含有不同的值,存储在fields
数字类型存在fields - 避免太多的series
- 使用推荐的命名方法
避免关键字作为tag或field的名字
避免一个tag或者field有相同的名字
避免测量名是编码数据
避免tag中含有多于一个的piece(原子)
disk_free 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
写数据
非代码:
- telegraf(agent) Telegraf是Xdata的数据收集代理,用于收集和报告度量。它庞大的输入插件库和“即插即用”架构让您可以快速方便地从许多不同的来源收集度量。
- Scrape data
开发工具:
influx write \
-b bucketName \
-o orgName \
-p s \
'myMeasurement,host=myHost testField="testData" 1556896326'
influx write \
-b bucketName \
-o orgName \
-p s \
--format=lp
-f /path/to/line-protocol.txt
influx write \
-b bucketName \
-o orgName \
-p s \
--format=csv
-f /path/to/data.csv
查询
删除
retention policy:数据存储策略(默认策略为autogen)
InfluxDB没有删除数据操作,规定数据的保留时间达到清除数据的目的;
处理
在influxdb2.0中Task取代了1.x中的continuous queries。大部分的操作都是使用flux脚本语法
- 定义Task
定义数据源
处理或转换数据
定义目的地
// Task options
option task = {
name: "cqinterval15m",
every: 1h,
offset: 0m,
concurrency: 1,
}
// Data source
data = from(bucket: "example-bucket")
|> range(start: -task.every)
|> filter(fn: (r) =>
r._measurement == "mem" and
r.host == "myHost"
)
data
// Data transformation
|> aggregateWindow(
every: 5m,
fn: mean
)
// Data destination
|> to(bucket: "example-downsampled")
可视化
已安装chronograf,添加连接
点击explore
导入数据:
监控与高考
备份与恢复
优化写入的方式:
- 批量写入 :最合理5000行
- 按key对tags排序
- 是由粗粒度的时间精度: influxdb默认写入按照纳秒的精度
- 使用gzip压缩
- NTP同步主机
- 一个请求写多个数据点:每一行使用\n 分隔;