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操作要点:

  1. 合理命名:使用描述性名称,便于管理
  2. 设置保留时间:根据数据特点设置合适的保留策略
  3. 权限控制:为不同用途创建不同权限的Token
  4. 监控使用:定期检查Bucket大小和数据分布
  5. 备份重要数据:删除操作不可恢复

下一步,让我们学习组织管理!

最后更新:2026-03-27