InfluxDB 的使用入门
· 5 min read
由于数据分析和监控需要, 准备将 GA4 近期数据在本地同步拉取保存一份, 以便随时快速分析. 本地保存时, 传统数据库的速度和空间利用率无法满足需求, 因此尝试使用专用 DB 进行. InfluxDB 是满足目前需求的一个优先选择. 本文将对 InfluxDB 的用法进行简单记录.
使用 Docker 安装
官方介绍了若干种安装方法, 但为维护方便, 选择 Docker 方式. Docker 可直接运行或使用 docker-compose 两种办法.
新建了一个 influxDB-docker 目录, 进入再创建对应 dbdata
和 config
两个目录后, 执行如下命令:
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
- tags
数据查询
两种查询语言:
- Flux: 函数式的脚本语言, 用于查询和处理数据.
- InfluxQL: 类 SQL 查询语言.