InfluxDB
在InfluxDB中,数据组织构成上,有以下几个概念:
bucket
measurement
tags
fields
timestamp
数据是存储在bucket中,bucket类似于database的概念。measurement 类似于表的概念,tags、fields是以键值对的形式体现,类似于表中字段的概念。需要注意的是,tags是有索引的,而fields是没有索引的。tags更偏向于维度,fields更偏向于度量。
基于此,有三个重要的概念:
points
measurement中的一条数据记录,类似于表中行的概念。
series
一组拥有相同的measurement、tag key、tag value的points的集合。
series key
series key可以看作是一个特定的series, 它相当于是series的一个子集,它的定义是:一组拥有相同的measurement、tag key、tag value、filed key的points的集合。
数据有效期
在influxDB中存储的数据,若超过了指定的数据有效期,是会被系统清除的。清除动作由retention enhancement service执行,它会定期检查并删除过期的数据。
我们在创建bucket时,需要指定该bucket中数据的保留时长,默认是0,即一直有效。存储在bucket中数据,若超过了设置的retention, 则在下次retention enhancement service执行时会被删除。
数据存储
在bucket中,按照shard group duration 画分成了一个个shard groups,数据根据timestamp存储到相应的shared group中。
shard group duration可以在创建bucket时指定,也可以由retention的值转换得出,具体转换逻辑是:
bucket retention | shard group duration |
---|---|
2天内 | 1小时 |
2天到6个月 | 1天 |
超过6个月 | 7天 |
一个shard group, 又由多个shards组成,数据实际上是存储在shard中。落入shard group中的数据,经过其series的hash之后,最终确定落到哪个shards上。
在一个shard group中,相同series的数据一定会存储在同一个shard中,而一个shard可能会存储多个series。
删除过期数据,本质上是删除过期的shard group,而非精细到某一个数据的删除。
指令
官方文档:Commands
语法
官方文档:Syntax
Telegraf
Telegraf是InfluxDB官方提供的,用来监控、收集包括数据库、系统、IOT设备等在内的各项数据指标的程序。
Telegraf是插件驱动的程序,总共有5种类型的插件:
input。
根据要收集的系统,指定不同的input插件,通过配置插件参数来更新、收集指标数据。
output
将收集上来的数据,输出到指定的系统上,支持包括influxDB、kafka、MQTT等。
aggregator
指标数据按照period时间范围进行划分后,聚合成一条指标数据。
processer
input收集到的数据,会在此进行处理、转化成新的指标内容数据。
external
Telegraf内置了丰富的插件,但如果这些都无法满足实际场景,可通过外部自定义的方式进行插件开发。插件开发支持上述的4种类型的插件。
内置的插件非常丰富,详细的插件说明可通过官网查看:plugins
数据流向
采集数据在各插件间的流向是:
input -> processer -> aggregator -> output
Commands
Telegref 支持的完整的命令可查看官网:Commands.
这里仅列举几个常用的命令:
创建一个配置文件
telegraf config > telegraf.conf
指定配置文件启动
telegraf --config telegraf.conf
指定配置文件启动,并输出到控制台
telegraf --config telegraf.conf --test
以命令的方式启动, 指定输入、输出插件
telegraf --config telegraf.conf --input-filter cpu:mem --output-filter influxdb
kapacitor
kapacitor也是官方提供的服务,一个常用场景就是进行数据分析预警。
kapacitor通过编写TICKscript脚本的方式创建任务,数据源来自于influxdb。任务有两种类型:
- stream tasks. kapacitor会将写到influxdb的数据也备份到自己下面。
- batch tasks. 定期去influxdb中查询数据。
前者不用频繁的查询influxdb,能够有效减轻influxdb的压力,代价是需要自己存储数据。
详细介绍查看:官方文档
安装
influxdb
docker运行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker run -d -p 8086:8086 \
# 文件存储路径
-v $PWD/data:/var/lib/influxdb2 \
# 配置文件路径
-v $PWD/config:/etc/influxdb2 \
# 开启设置模式
-e DOCKER_INFLUXDB_INIT_MODE=setup \
# 指定管理员
-e DOCKER_INFLUXDB_INIT_USERNAME=my-user \
# 指定密码
-e DOCKER_INFLUXDB_INIT_PASSWORD=my-password \
# 指定默认组织
-e DOCKER_INFLUXDB_INIT_ORG=my-org \
# 指定默认bucket
-e DOCKER_INFLUXDB_INIT_BUCKET=my-bucket \
# 指定默认保留时长,不指定默认永久保存
-e DOCKER_INFLUXDB_INIT_RETENTION=1w \
# 指定管理员token
-e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-auth-token \
influxdb:2.0
InfluxDB官方配置文件:配置文件
docker-compose运行:
// docker-compose.yml
version: "3"
services:
influxdb:
container_name: influxdb
image: influxdb:2.6
restart: always
volumes:
- ./data:/var/lib/influxdb2
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
#- ./config.yml:/etc/influxdb2/config.yml
ports:
- 8086:8086
env_file:
- influx.env
deploy:
resources:
limits:
cpus: '1'
memory: 300M
networks:
- influxdb
networks:
influxdb:
name: influxdb
# attachable: true
// influxdb.env
DOCKER_INFLUXDB_INIT_MODE=setup
DOCKER_INFLUXDB_INIT_USERNAME=root
DOCKER_INFLUXDB_INIT_PASSWORD=123456789
DOCKER_INFLUXDB_INIT_ORG=org
DOCKER_INFLUXDB_INIT_BUCKET=root
DOCKER_INFLUXDB_INIT_RETENTION=1w
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=1234567890
telegraf
docker compose运行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
telegraf:
container_name: telegraf
image: telegraf:1.25
restart: always
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
networks:
- influxdb
networks:
influxdb:
name: influxdb
external: true
其中,telegraf.conf可以通过以下命令生成配置模板:
1
docker run --rm telegraf:1.25 telegraf config > telegraf.conf
然后修改部分参数后,即可启动。
chronograf
chronograf是influxd官方提供的web ui展示平台,通过图表的方式展示收集的各项指标,搭配influxdb、telegraf、kapacitor使用。
docker compose运行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3"
services:
chronograf:
container_name: chronograf
image: chronograf:1.9
restart: always
ports:
- 8888:8888
volumes:
- ./chronograf:/var/lib/chronograf
command: chronograf --influxdb-url=http://influxdb:8086
networks:
- influxdb
networks:
influxdb:
name: influxdb
external: true
运行后,登录并配置influxdb即可展示。
kapacitor
kapacitor配置详解:官方文档