influxdb简介

influxDB 简介

InfluxDB 是一个 **开源的时序数据库 (Time-Series Database, TSDB)**,专门用于存储、查询和分析 带时间戳的数据

基本特点

  • 高效写入:能处理大量实时数据流(如传感器、日志、监控数据)。
  • 时间序列查询:支持按时间范围快速查询和聚合。
  • 内置函数:提供统计、聚合(平均值、最大值、最小值等)。
  • 轻量易用:安装简单,常与 Telegraf、Grafana 搭配使用。

常见应用

  1. 系统和应用监控(CPU、内存、接口性能)
  2. 物联网数据(温度、湿度、传感器信息)
  3. 金融行情数据(股票、加密货币价格)
  4. 日志和事件记录

influxdb 1.8 部署

docker 持久化部署

准备

准备目录结构和配置文件

image-20250820163421374

案例配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
reporting-disabled = true

[meta]
dir = "/var/lib/influxdb/meta"

[data]
dir = "/var/lib/influxdb/data"
wal-dir = "/var/lib/influxdb/wal"

[http]
enabled = true
bind-address = ":8086"
auth-enabled = false # 先创建admin再 true
access-log-path = "/var/log/influxdb/access.log"

[logging]
file = "/var/log/influxdb/influxdb.json"
level = "info"
format = "json"

run

1
2
3
4
5
6
7
docker run -d \
--name influxdb \
-p 8086:8086 \
-v /data/soft/influxdb1.8/data:/var/lib/influxdb \
-v /data/soft/influxdb1.8/config/influxdb.conf:/etc/influxdb/influxdb.conf \
-v /data/soft/influxdb1.8/log:/var/log/influxdb \
influxdb:1.8 -config /etc/influxdb/influxdb.conf

实体机部署

添加仓库

1
2
3
4
5
6
7
8
sudo tee /etc/yum.repos.d/influxdb.repo <<EOF
[influxdb]
name = InfluxDB Repository - RHEL/CentOS \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

查看版本

1
dnf list influxdb

安装

1
2
3
dnf install -y influxdb-1.8.10-1
# GPG 签名校验失败可以使用
sudo dnf install -y --nogpgcheck influxdb-1.8.10-1

influxdb数据备份

1
2
docker exec -it influxdb influxd backup -portable /var/lib/influxdb/backup
docker cp influxdb:/var/lib/influxdb/backup ./backup20250819

image-20250820164400019

influxdb数据恢复

版本原因只能恢复业务数据。

用户则需要单独导入。

全量恢复

1
2
3
4
5
6
7
8
docker run -d \
--name influxdb_new \
-p 8087:8086 \
-v /data/soft/influxdb1.8new/data:/var/lib/influxdb \
-v /data/soft/influxdb1.8new/config/influxdb.conf:/etc/influxdb/influxdb.conf \
-v /data/soft/influxdb1.8new/log:/var/log/influxdb \
-v /data/soft/influxdb1.8new/backup:/var/lib/influxdb/backup \
influxdb:1.8 -config /etc/influxdb/influxdb.conf \
1
docker exec -it influxdb_new influxd restore -portable /var/lib/influxdb/backup

增量恢复

通过挂载或者cp备份文件到容器里

1
2
docker exec -it influxdb_new influxd restore -portable -db mydb1 -newdb mydb1 /var/lib/influxdb/backup
docker exec -it influxdb_new influxd restore -portable -db mydb2 -newdb mydb2 /var/lib/influxdb/backup

influxdb版本分析

InfluxDB 的版本线主要分为 1.x 系列2.x 系列,其中 1.x 又有不同小版本(如 1.8、1.11)

1. 1.x 系列

主要特点

  • 单独数据库、测量、点的概念
  • 使用 InfluxQL 作为主要查询语言(类似 SQL)。
  • 数据库管理简单,部署轻量。
  • 适合 传统 TSDB 用法:监控、IoT、日志。

版本区别

版本 主要变化
1.8 - 最后一版 1.x 的长期支持 (LTS)- 支持 Flux 查询语言(实验性)- 企业版可用 Clustering(集群)- 兼容 1.x 所有 API
1.9 - 提供更好的兼容 2.x 的 Flux- 减少一些已弃用功能- 企业版增加一些新特性
1.10/1.11 - 主要是性能优化和 bug 修复- Flux 功能更完整- 为平滑迁移到 2.x 做准备

总结:1.x 系列以 InfluxQL 为主,Flux 为辅,适合长期使用和稳定项目。1.8 是 LTS,1.11 则是稳定性和性能的增强版。


2. 2.x 系列

主要特点

  • 融合数据库、任务管理、告警、可视化于一体(InfluxDB UI、任务调度、Alerts)。
  • 默认使用 Flux 语言,InfluxQL 可兼容但不推荐。
  • 多租户、多组织支持:组织(Org)、桶(Bucket)替代 1.x 的 database + retention policy。
  • 安全与认证:2.x 默认启用 token-based 认证。
  • API 和数据模型变化
    • Database → Bucket
    • Retention Policy → Bucket 的保留策略
    • Measurement、Tag、Field 基本概念保留,但 API 有变化
  • 适合 现代云原生监控、大规模 IoT 和多组织场景

主要区别对比 1.x

特性 1.x 2.x
查询语言 InfluxQL 为主,Flux 可选 Flux 为主,InfluxQL 可兼容
数据库概念 Database + Measurement + RP Organization + Bucket + Measurement
UI 简单 Web UI 完整 UI + Task + Alert + Explore
认证 可选 Token-based 强制认证
集群 企业版支持 企业版支持,集群管理更现代化
开箱体验 轻量 功能丰富,但稍重

总结

  • 1.x 系列:轻量、稳定、InfluxQL 主导,适合老项目或简单部署。1.8 是长期支持版,1.11 是功能和性能优化版。
  • 2.x 系列:功能完整、现代化、多租户,Flux 主导,适合新项目和云原生场景。

nfluxQL和 Flux

1. InfluxQL

概述

  • InfluxQLInfluxDB 1.x 系列的主查询语言
  • 类似 SQL,但专门针对 时序数据(Time Series Data) 优化。
  • 支持数据查询、聚合、分组、时间范围选择。

特点

  • 类 SQL 语法,容易上手:

    1
    2
    3
    4
    SELECT mean("value") 
    FROM "temperature"
    WHERE "device"='esp32' AND time > now() - 1h
    GROUP BY time(5m)
  • 功能有限

    • 聚合函数、分组、时间条件
    • 不能方便地做复杂的数据管道和跨数据库分析
  • 只支持 InfluxDB,不能做跨数据源处理

适用场景

  • 1.x 系列项目
  • 简单时序查询、告警阈值计算、监控指标聚合

2. Flux

概述

  • Flux 是 InfluxData 推出的 通用数据脚本语言,兼容 1.x,但 2.x 系列默认使用。
  • 不仅可以查询 InfluxDB,也支持其他数据源(CSV、Prometheus、HTTP API 等)。

特点

  • 函数式语言,支持数据管道:

    1
    2
    3
    4
    5
    from(bucket:"temperature_bucket")
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == "temperature" and r.device == "esp32")
    |> aggregateWindow(every: 5m, fn: mean)
    |> yield(name: "mean")
  • 更强大

    • 数据清洗、转换、聚合、窗口计算
    • 可跨桶、跨组织查询
    • 支持复杂告警逻辑
  • 学习曲线稍陡:不再是 SQL 风格,而是函数式链式操作

适用场景

  • 2.x 系列项目
  • 高级数据分析、跨数据源整合、复杂告警

3. 对比总结

特性 InfluxQL Flux
语法风格 类 SQL 函数式管道
支持数据源 仅 InfluxDB InfluxDB + CSV + Prometheus + HTTP 等
功能 查询 + 聚合 + 分组 查询 + 聚合 + 转换 + 跨桶分析 + 复杂逻辑
易用性 容易上手 功能强大但学习成本高
默认版本 1.x 2.x

遇到的问题

日志文件无法挂载

access.log可以正常挂载出俩,配置文件设置好了日志输出也还是没有。不管是docker还是宿主机直接部署都没有。不太清除怎么解决,不太清楚怎么解决,发了issue。

issue : Unable to output influxd.log. · Issue #822 · influxdata/influxdata-docker

补救方式,可以输出日志到挂载的文件里。格式与配置文件有关(json或者其他)

1
2
3
4
# 进入容器
docker exec -it influxdb bash
# 执行
influxd > /var/log/influxdb/influxdb.log 2>&1 &

用户数据无法迁移

备份出来的数据确实包含meta元数据,但是恢复的时候尝试了很多方法无法都不行。只能用sql一个个插入了。

备份时用的是 -portable ,导入备份时只能-portable,而不能用-metadir。两者是不同方式备份出来的文件。

  1. 如果使用 -portable导出,导入时必没有用户数据,业务数据正常导入
  2. 不支持其他方式:普通 OSS 容器只能做 portable backup