Bucket操作 #
一、Bucket概述 #
1.1 什么是Bucket #
text
Bucket概念:
定义
├── 数据存储容器
├── 类似传统数据库的概念
├── 包含多个Measurement
└── 有独立的数据保留策略
特点
├── 属于某个组织(Organization)
├── 有名称和保留时间
├── 可以设置Schema类型
└── 支持读写权限控制
1.2 Bucket结构 #
text
组织结构:
Organization(组织)
│
├── Bucket: metrics
│ ├── Measurement: cpu
│ ├── Measurement: memory
│ └── Measurement: disk
│
├── Bucket: logs
│ ├── Measurement: application
│ └── Measurement: system
│
└── Bucket: events
└── Measurement: user_actions
二、创建Bucket #
2.1 Web界面创建 #
text
创建步骤:
1. 登录InfluxDB UI
└── http://localhost:8086
2. 进入Load Data
└── 点击左侧菜单 "Load Data"
3. 选择Buckets标签
└── 点击 "Buckets"
4. 创建Bucket
├── 点击 "Create Bucket"
├── 输入名称
├── 设置保留时间
└── 点击 "Create"
2.2 CLI创建 #
bash
# 基本创建
influx bucket create \
--name my-bucket \
--org my-org
# 指定保留时间
influx bucket create \
--name metrics \
--org my-org \
--retention 720h
# 使用组织ID
influx bucket create \
--name logs \
--org-id 1234567890abcdef \
--retention 168h
# 指定Schema类型
influx bucket create \
--name explicit-bucket \
--org my-org \
--schema-type explicit
2.3 API创建 #
bash
# 使用curl创建
curl -X POST "http://localhost:8086/api/v2/buckets" \
--header "Authorization: Token YOUR_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"name": "my-bucket",
"orgID": "ORG_ID",
"retentionRules": [{
"type": "expire",
"everySeconds": 2592000
}]
}'
2.4 Flux创建 #
flux
// 使用Flux创建Bucket(需要适当权限)
buckets()
|> filter(fn: (r) => r.name == "my-bucket")
|> count()
三、查看Bucket #
3.1 列出所有Bucket #
bash
# 列出当前组织的Bucket
influx bucket list
# 指定组织
influx bucket list --org my-org
# 指定组织ID
influx bucket list --org-id 1234567890abcdef
# 查看特定Bucket
influx bucket list --name my-bucket
3.2 API查看 #
bash
# 获取所有Bucket
curl -X GET "http://localhost:8086/api/v2/buckets" \
--header "Authorization: Token YOUR_TOKEN"
# 获取特定组织的Bucket
curl -X GET "http://localhost:8086/api/v2/buckets?org=my-org" \
--header "Authorization: Token YOUR_TOKEN"
3.3 Flux查看 #
flux
// 列出所有Bucket
buckets()
// 过滤特定Bucket
buckets()
|> filter(fn: (r) => r.name == "my-bucket")
// 列出组织下所有Bucket
buckets()
|> filter(fn: (r) => r.org == "my-org")
3.4 输出说明 #
text
Bucket列表输出:
ID Name Retention Organization ID
1234567890abcdef my-bucket 720h abcd1234567890ef
0987654321fedcba metrics 168h abcd1234567890ef
字段说明:
├── ID: Bucket唯一标识
├── Name: Bucket名称
├── Retention: 数据保留时间
└── Organization ID: 所属组织ID
四、更新Bucket #
4.1 CLI更新 #
bash
# 更新名称
influx bucket update \
--id 1234567890abcdef \
--name new-bucket-name
# 更新保留时间
influx bucket update \
--id 1234567890abcdef \
--retention 1440h
# 同时更新多个属性
influx bucket update \
--id 1234567890abcdef \
--name updated-bucket \
--retention 720h
4.2 API更新 #
bash
# 使用API更新
curl -X PATCH "http://localhost:8086/api/v2/buckets/BUCKET_ID" \
--header "Authorization: Token YOUR_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"name": "updated-bucket",
"retentionRules": [{
"type": "expire",
"everySeconds": 2592000
}]
}'
4.3 更新注意事项 #
text
更新注意事项:
名称更新
├── 名称必须唯一
├── 更新后立即生效
└── 不影响已有数据
保留时间更新
├── 仅影响新写入的数据
├── 已有过期数据不会被恢复
└── 缩短保留时间会删除旧数据
Schema类型
├── 创建后无法更改
└── 需要重新创建Bucket
五、删除Bucket #
5.1 CLI删除 #
bash
# 按ID删除
influx bucket delete --id 1234567890abcdef
# 按名称删除
influx bucket delete --name my-bucket --org my-org
# 确认删除
influx bucket delete --id 1234567890abcdef --force
5.2 API删除 #
bash
# 使用API删除
curl -X DELETE "http://localhost:8086/api/v2/buckets/BUCKET_ID" \
--header "Authorization: Token YOUR_TOKEN"
5.3 删除警告 #
text
删除警告:
⚠️ 删除Bucket将:
├── 删除所有数据
├── 删除所有关联的Token
├── 删除所有关联的Dashboard
└── 操作不可恢复
建议:
├── 删除前备份数据
├── 确认Bucket ID正确
└── 在非生产环境先测试
六、数据保留策略 #
6.1 保留时间设置 #
text
保留时间选项:
时间格式
├── 小时:h (例:24h)
├── 天:d (例:7d)
├── 周:w (例:1w)
├── 月:mo (例:1mo)
└── 无限:0 或 infinite
常用设置
├── 实时监控:7d
├── 短期存储:30d
├── 中期存储:90d
├── 长期存储:365d
└── 永久存储:0
6.2 设置保留时间 #
bash
# 创建时设置
influx bucket create \
--name metrics \
--retention 720h
# 更新保留时间
influx bucket update \
--id 1234567890abcdef \
--retention 168h
# 设置永久保留
influx bucket update \
--id 1234567890abcdef \
--retention 0
6.3 保留策略工作原理 #
text
保留策略工作流程:
数据写入
│
▼
检查时间戳
│
├── 时间戳 + 保留时间 < 当前时间
│ │
│ └── 拒绝写入
│
└── 时间戳有效
│
▼
存储数据
│
▼
后台清理任务
(定期删除过期数据)
七、Schema类型 #
7.1 Schema类型说明 #
text
Schema类型:
implicit(隐式,默认)
├── 自动创建Schema
├── 写入时自动推断
├── 灵活但无约束
└── 适合快速开发
explicit(显式)
├── 需要预先定义Schema
├── 严格的类型约束
├── 更好的数据质量
└── 适合生产环境
7.2 创建显式Schema Bucket #
bash
# 创建显式Schema Bucket
influx bucket create \
--name explicit-bucket \
--org my-org \
--schema-type explicit
# 定义Measurement Schema
influx bucket schema create \
--bucket-id 1234567890abcdef \
--name cpu \
--column name=host,type=tag \
--column name=usage,type=field,dataType=float
# 定义多个列
influx bucket schema create \
--bucket-id 1234567890abcdef \
--name memory \
--column name=host,type=tag \
--column name=total,type=field,dataType=float \
--column name=used,type=field,dataType=float \
--column name=free,type=field,dataType=float
7.3 管理Schema #
bash
# 查看Schema
influx bucket schema list \
--bucket-id 1234567890abcdef
# 更新Schema
influx bucket schema update \
--bucket-id 1234567890abcdef \
--measurement cpu \
--column name=region,type=tag
# 删除Schema
influx bucket schema delete \
--bucket-id 1234567890abcdef \
--measurement cpu
八、Bucket权限管理 #
8.1 创建读写Token #
bash
# 创建只读Token
influx auth create \
--org my-org \
--read-bucket my-bucket \
--description "只读Token"
# 创建读写Token
influx auth create \
--org my-org \
--read-bucket my-bucket \
--write-bucket my-bucket \
--description "读写Token"
# 创建全权限Token
influx auth create \
--org my-org \
--read-bucket my-bucket \
--write-bucket my-bucket \
--operator \
--description "管理员Token"
8.2 查看权限 #
bash
# 查看Token列表
influx auth list
# 查看特定Token权限
influx auth list --id AUTH_ID
# 查看Bucket相关Token
influx auth list | grep my-bucket
九、Bucket最佳实践 #
9.1 命名规范 #
text
命名建议:
推荐格式
├── 小写字母
├── 使用连字符分隔
├── 描述性名称
└── 包含环境信息
示例
├── metrics-production
├── logs-staging
├── events-dev
└── iot-sensors-prod
避免
├── 特殊字符
├── 空格
├── 过长名称
└── 无意义名称
9.2 保留时间规划 #
text
保留时间规划建议:
监控数据
├── 原始数据:7-30天
├── 降采样数据:90-365天
└── 聚合数据:1-3年
日志数据
├── 应用日志:7-14天
├── 系统日志:30天
└── 审计日志:365天
IoT数据
├── 传感器原始数据:7-30天
├── 设备状态:30-90天
└── 统计数据:90-365天
金融数据
├── 实时行情:1-7天
├── 历史行情:永久
└── 交易记录:永久
9.3 Bucket规划 #
text
Bucket规划示例:
按数据类型分
├── metrics(监控指标)
├── logs(日志数据)
├── events(事件数据)
└── traces(追踪数据)
按环境分
├── metrics-production
├── metrics-staging
└── metrics-development
按业务分
├── iot-sensors
├── app-performance
└── business-metrics
按保留时间分
├── metrics-short(7天)
├── metrics-medium(30天)
└── metrics-long(365天)
十、监控Bucket #
10.1 查看Bucket大小 #
flux
// 查看Bucket存储使用情况
import "influxdata/influxdb"
influxdb.cardinality(
bucket: "my-bucket",
start: -30d
)
// 查看Series数量
import "influxdata/influxdb"
influxdb.cardinality(
bucket: "my-bucket",
start: -30d
)
10.2 查看数据分布 #
flux
// 按Measurement统计
from(bucket: "my-bucket")
|> range(start: -30d)
|> group(columns: ["_measurement"])
|> count()
|> group()
|> sort(columns: ["_value"], desc: true)
十一、完整示例 #
11.1 创建监控Bucket #
bash
# 创建生产环境监控Bucket
influx bucket create \
--name metrics-production \
--org production \
--retention 720h \
--schema-type implicit
# 创建读写Token
influx auth create \
--org production \
--read-bucket metrics-production \
--write-bucket metrics-production \
--description "监控读写Token"
11.2 创建日志Bucket #
bash
# 创建日志Bucket
influx bucket create \
--name logs-production \
--org production \
--retention 168h
# 创建只写Token(日志只写入)
influx auth create \
--org production \
--write-bucket logs-production \
--description "日志写入Token"
11.3 批量管理脚本 #
bash
#!/bin/bash
# create_buckets.sh
ORG="my-org"
# 创建多个Bucket
buckets=(
"metrics:720h"
"logs:168h"
"events:720h"
"iot-data:720h"
)
for bucket_config in "${buckets[@]}"; do
IFS=':' read -r name retention <<< "$bucket_config"
echo "Creating bucket: $name with retention: $retention"
influx bucket create \
--name "$name" \
--org "$ORG" \
--retention "$retention"
done
echo "All buckets created!"
十二、总结 #
Bucket操作要点:
- 合理命名:使用描述性名称,便于管理
- 设置保留时间:根据数据特点设置合适的保留策略
- 权限控制:为不同用途创建不同权限的Token
- 监控使用:定期检查Bucket大小和数据分布
- 备份重要数据:删除操作不可恢复
下一步,让我们学习组织管理!
最后更新:2026-03-27