4. InfluxDB快速上手:从安装到写入第一条数据

好,咱们直接进入正题。这一章我带你亲手把 InfluxDB 跑起来,再往里塞第一条时序数据。说实话,很多教程一上来就讲理论,搞得人云里雾里。我的习惯是——先动手,再动脑。你先把环境搭好,数据写进去,后面那些概念自然就理解了。

本章核心目标:30分钟内完成 InfluxDB 安装、启动、CLI 验证、HTTP API 写入,最终看到你的第一条时序数据。

4.1 InfluxDB的安装与启动

安装这事,不同系统差别挺大。我主要讲 Linux 和 macOS,Windows 用户建议用 WSL2 或者 Docker。嗯,我个人最推荐 Docker 方式,干净利落,不会污染你的系统环境。

方式一:Docker 安装(推荐)

# 拉取最新稳定版
docker pull influxdb:2.7

# 启动容器
docker run -d \
  --name influxdb \
  -p 8086:8086 \
  -v influxdb-data:/var/lib/influxdb2 \
  influxdb:2.7

启动后,访问 http://localhost:8086,你会看到 InfluxDB 的初始化页面。这里要设置用户名、密码、组织名和初始桶(bucket)。

我的小建议:组织名用公司缩写或个人项目名,桶名用数据用途命名,比如 stock_tickssensor_metrics。后期数据多了,命名规范能省不少事。

方式二:二进制包安装(Linux/macOS)

# 下载(以Linux amd64为例)
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.0-linux-amd64.tar.gz

# 解压
tar xvzf influxdb2-2.7.0-linux-amd64.tar.gz

# 启动
cd influxdb2-2.7.0-linux-amd64
./influxd

启动后终端会打印日志,看到 Listening on HTTP: 0.0.0.0:8086 就说明成功了。按 Ctrl+C 可以停止。

注意:我第一次用二进制包启动时,忘了开防火墙端口,结果客户端连不上。折腾了半小时才发现。你如果遇到连接失败,先检查 8086 端口是否开放。

4.2 InfluxDB命令行工具(CLI)的使用

CLI 是咱们和 InfluxDB 交互最直接的方式。我个人习惯先用 CLI 做快速验证,确认数据能写能查,再上 API。

安装 CLI

如果你用 Docker 启动的 InfluxDB,CLI 已经在容器里了。直接进去用:

docker exec -it influxdb influx

如果是二进制安装,CLI 和 server 在同一个包,直接运行 ./influx 就行。

基本操作

进入 CLI 后,第一件事是登录:

influx config create --config-name myconfig \
  --host-url http://localhost:8086 \
  --org your-org \
  --token your-token \
  --active

登录成功后,试试几个常用命令:

# 查看桶列表
influx bucket list

# 查看组织
influx org list

# 查看 token
influx auth list

嗯,这里要注意:token 是在初始化时生成的,如果你忘了,可以在 Web UI 的 "Data" -> "Tokens" 里重新生成一个。

避坑指南:我曾经在生产环境里直接用 root token 写数据,后来发现权限太大了。建议为每个应用创建独立的 token,只给写权限或只读权限。安全第一。

4.3 InfluxDB HTTP API入门

CLI 适合调试,但生产环境里,咱们更多是用 HTTP API 来读写数据。InfluxDB 2.x 的 API 设计得很干净,说白了就是几个 RESTful 端点。

核心端点

功能 HTTP方法 端点
写入数据 POST /api/v2/write
查询数据 POST /api/v2/query
管理桶 POST/GET /api/v2/buckets

写入数据示例

写入数据用的是 Line Protocol 格式。你想想看,一行文本就包含了 measurement、tag、field、timestamp,简洁高效。

curl -X POST 'http://localhost:8086/api/v2/write?org=myorg&bucket=stock_ticks&precision=s' \
  -H 'Authorization: Token YOUR_TOKEN' \
  -H 'Content-Type: text/plain; charset=utf-8' \
  -d 'stock,code=000001,exchange=SZSE price=10.25,volume=10000 1700000000'

这条命令干了什么?它往 stock_ticks 桶里写入了一条股票行情数据:

  • measurement: stock(类似关系数据库的表名)
  • tags: code=000001, exchange=SZSE(用于索引和过滤)
  • fields: price=10.25, volume=10000(实际数值)
  • timestamp: 1700000000(Unix 时间戳,单位秒)

经验之谈:时间戳精度很重要。金融数据通常用毫秒或微秒,传感器数据可能用纳秒。我见过有人用秒精度存高频交易数据,结果同一秒内多条数据互相覆盖。记得根据你的数据频率选择合适的精度。

4.4 写入第一条时序数据

好,重头戏来了。咱们用 Python 写个脚本,批量写入几条模拟的股票数据。这样你就能看到 InfluxDB 的真正威力。

准备工作

先装个 Python 客户端库:

pip install influxdb-client

写数据脚本

import influxdb_client
from influxdb_client.client.write_api import SYNCHRONOUS
import time

# 配置连接
bucket = "stock_ticks"
org = "myorg"
token = "YOUR_TOKEN"
url = "http://localhost:8086"

client = influxdb_client.InfluxDBClient(
    url=url,
    token=token,
    org=org
)

write_api = client.write_api(write_options=SYNCHRONOUS)

# 构造数据
data = []
for i in range(5):
    point = {
        "measurement": "stock",
        "tags": {"code": "000001", "exchange": "SZSE"},
        "fields": {
            "price": 10.25 + i * 0.01,
            "volume": 10000 + i * 100
        },
        "time": int(time.time()) + i
    }
    data.append(point)

# 写入
write_api.write(bucket=bucket, record=data)
print("写入成功!")

# 验证:查询刚写入的数据
query_api = client.query_api()
query = f'''
from(bucket: "{bucket}")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "stock")
  |> filter(fn: (r) => r.code == "000001")
'''

result = query_api.query(org=org, query=query)
for table in result:
    for record in table.records:
        print(f"时间: {record.get_time()}, 价格: {record.get_value()}")

运行这个脚本,你会看到类似这样的输出:

写入成功!
时间: 2024-01-01 10:00:00, 价格: 10.25
时间: 2024-01-01 10:00:01, 价格: 10.26
时间: 2024-01-01 10:00:02, 价格: 10.27
...

恭喜!你刚刚完成了第一条时序数据的写入。别看数据简单,这背后涉及了 InfluxDB 的存储引擎、索引机制、压缩算法。后面章节我会逐一拆解。

知识体系总览

为了让你对本章内容有个整体认识,我画了张图:

InfluxDB 快速上手知识体系 安装与启动 Docker / 二进制包 CLI 命令行工具 配置 / 查询 / 管理 HTTP API RESTful 端点 / Line Protocol 写入第一条时序数据 Python SDK / curl / CLI 核心概念(后续章节展开) Measurement · Tag · Field · Timestamp · Bucket · Organization

这张图把本章的知识点串起来了。你从安装开始,可以选择 CLI 或 HTTP API 两种方式,最终都汇聚到数据写入这个核心操作上。底部的核心概念是后面章节的重点,先有个印象就行。

最后提醒一句:生产环境千万别用默认配置。我见过有人把 InfluxDB 部署在公网上,没设防火墙,结果被挖矿程序盯上了。记得配置认证、限制 IP 访问、定期备份。


公众号:蓝海资料掘金营,微信deep3321