Home 时序数据库InfluxDB
Post
Cancel

时序数据库InfluxDB

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 retentionshard 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配置详解:官方文档

This post is licensed under CC BY 4.0 by the author.