Skip to main content

InfluxDB 的使用入门

· 5 min read
  1. 官方文档: https://docs.influxdata.com/influxdb/v2/install/
  2. Github 仓库: https://github.com/influxdata/influxdb

由于数据分析和监控需要, 准备将 GA4 近期数据在本地同步拉取保存一份, 以便随时快速分析. 本地保存时, 传统数据库的速度和空间利用率无法满足需求, 因此尝试使用专用 DB 进行. InfluxDB 是满足目前需求的一个优先选择. 本文将对 InfluxDB 的用法进行简单记录.

使用 Docker 安装

官方介绍了若干种安装方法, 但为维护方便, 选择 Docker 方式. Docker 可直接运行或使用 docker-compose 两种办法.

新建了一个 influxDB-docker 目录, 进入再创建对应 dbdataconfig 两个目录后, 执行如下命令:

docker run \
--name influxdb2 \
--publish 8086:8086 \
-v ./dbdata:/var/lib/influxdb2 \
-v ./config:/etc/influxdb2 \
--env DOCKER_INFLUXDB_INIT_MODE=setup \
--env DOCKER_INFLUXDB_INIT_USERNAME=root \
--env DOCKER_INFLUXDB_INIT_PASSWORD=asdf1234 \
--env DOCKER_INFLUXDB_INIT_ORG=nothing \
--env DOCKER_INFLUXDB_INIT_BUCKET=initial_bucket \
--detach \
influxdb:2

其中:

  • publish: 将 InfluxDB 的前端管理 UI 和 HTTP API 端口暴露到宿主的 8086 端口.
  • mount /var/lib/influxdb2: 为数据库数据目录创建一个单独的持久化卷
  • mount /etc/influxdb2: 为数据库配置目录创建一个单独的持久化卷
  • 环境变量 setup: 表示需要触发自动的安装和初始化过程
  • 用户名密码: 设置管理员用户名和密码
  • 组织名称存储桶 名称: 自定义即可
  • detach: 后台运行

基本概念

在正式开始处理前, 属性一下相关概念:

  • Point: 单条数据记录. 由 Measurement 作为标记.
  • Series: 一组数据记录(序列), 有相同的 Tags 和 Fields, 在同一个 Measurement 中.
  • Bucket: 用于存放时间序列数据, 每个 Bucket 都有自己的名字. 类似关系型数据库中 "database".
    • Measurement: 时间序列数据记录的逻辑分组. 在其中的所有 Point 有相同的 Tags, 一个 Measurement 有多个 Tag 和 Field.
      • Tags: 不易变化的键值对, 用于存放 Point 的元数据. 比如 host, location, station 等.
      • Fields: 值随时间变化的键值对. 比如温度, 压强, 股票价格等.
      • Timestamp: 和数据关联的时间戳.

和 Docker 容器交互

语法: docker exec -it <CONTAINER_NAME> <CLI_NAME> <COMMAND>

例如: docker exec -it influxdb2 influx config ls

此外, 如果要在容器和宿主机之间拷贝数据, 可以使用 docker container cp

InfluxDB 的使用

Docker 安装完成后, 可通过 如下方式 和 InfluxDB 交互. 其中 UI 在 8086 端口, 不再赘述.

  • UI
  • HTTP API
  • influx CLI 工具
  • Telegraf
  • InfluxDB 提供不同编程语言的 Client Library

数据写入

InfluxDB 使用 line protocol 作为目标数据协议, 类似 csv 格式. 其中每一行是一个 Point, 包含如下内容:

  • measurement: 字符串
  • tag set: 键值对, 可以有多个
  • field set: 键值对
  • timestamp: 最高支持到纳秒精度

总体格式为:

measurement,tag1=val1,tag2=val2 field1="v1",field2=1i 0000000000000000000

分解说明:

比如家居温度传感器的几条数据记录:

home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1725708822
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1725708823
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1725708824
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1725708825

上面数据的说明:

  • measurement: home
    • tags
      • room: Living Room or Kitchen
    • fields
      • temp: temperature in °C (float)
      • hum: percent humidity (float)
      • co: carbon monoxide in parts per million (integer)
    • timestamp: Unix timestamp in second precision

数据查询

两种查询语言:

  • Flux: 函数式的脚本语言, 用于查询和处理数据.
  • InfluxQL: 类 SQL 查询语言.