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_ticks、sensor_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 的存储引擎、索引机制、压缩算法。后面章节我会逐一拆解。
知识体系总览
为了让你对本章内容有个整体认识,我画了张图:
这张图把本章的知识点串起来了。你从安装开始,可以选择 CLI 或 HTTP API 两种方式,最终都汇聚到数据写入这个核心操作上。底部的核心概念是后面章节的重点,先有个印象就行。
最后提醒一句:生产环境千万别用默认配置。我见过有人把 InfluxDB 部署在公网上,没设防火墙,结果被挖矿程序盯上了。记得配置认证、限制 IP 访问、定期备份。
公众号:蓝海资料掘金营,微信deep3321