官方文档

https://docs.influxdata.com/influxdb3/core/write-data/http-api/compatibility-apis/

注意:InfluxDB 的接口数据采用的 Line Protocol(行协议) 严格要求每行以 \n结尾,不支持 \r\n

\n(换行符,十六进制 0A)​ 而不是 \r\n(回车+换行,十六进制 0D 0A)

名词解释

一、组织(Organization):工作空间

是什么?

组织(Org)是 InfluxDB 的顶层租户单位。它不是一个具体的数据库,而是一个包含用户、存储桶、任务和仪表板的逻辑工作空间。

作用是什么?

  1. 数据与权限隔离:不同团队(如“运维部”和“业务部”)可以使用不同的组织,彼此数据完全不可见。

  2. 资源管理边界:API Token、任务(Task)、告警规则(Check)都隶属于特定的组织。

  3. 多租户支持:一个 InfluxDB 实例可以承载多个独立的组织。

类比理解

就像你电脑上的用户账户。你登录了“张三”这个账户,就看不到“李四”账户里的桌面文件和下载记录。


二、存储桶(Bucket):数据仓库

是什么?

存储桶是 InfluxDB 2.x 中实际存储时间序列数据的地方。它是 1.x 版本中“数据库(Database)”和“保留策略(Retention Policy)”的合并体。

作用是什么?

  1. 数据分类存储:你可以创建不同的桶来存放不同类型的数据(例如:system_metrics存服务器监控,app_logs存应用日志)。

  2. 定义数据生命周期:每个桶可以独立设置数据保留策略(Retention Policy),自动删除过期数据。

    • 例如:监控数据保留 30 天,日志数据保留 7 天。

  3. 权限控制粒度:Token(访问令牌)的读写权限是按桶来分配的。

类比理解

就像组织(用户账户)下的文件夹。你可以在“张三”的账户下创建“工作文档”(保留1年)和“临时缓存”(保留7天)两个不同的文件夹,它们拥有独立的清理规则。

通用数据模型(理解这三点就能写数据):

  • Measurement:测量指标名,类似 SQL 的表名(如 cpu)。

  • Tag:标签(索引字段),用于分类筛选(如 host=server01)。

  • Field:字段(数值/字符串/布尔),存储实际指标值(如 usage=58.2)。

  • Time:时间戳(自动生成或指定)。

precision=ns指定写入数据时时间戳的精度。这是 InfluxDB 中一个非常重要的参数,直接关系到数据写入的正确性。

precision参数告诉 InfluxDB:“我发送的时间戳数值,单位是什么?”

精度值

含义

示例时间戳 1683723600表示

ns

纳秒

2023-05-10T09:00:00.000000000Z

u​ 或 us

微秒

2023-05-10T09:00:00.000000Z

ms

毫秒

2023-05-10T09:00:00.000Z

s

2023-05-10T09:00:00Z

m

分钟

2023-05-10T09:00:00Z (精度到分)

h

小时

2023-05-10T09:00:00Z (精度到小时)

获取token

方法一:通过终端直接获取(推荐)

这是最快捷的方式,无需登录 Web 界面。

  1. 进入 InfluxDB 容器内部命令行。

  2. 执行以下命令列出所有 Token(需要已初始化):

    influx auth list
  3. 在输出结果中,找到 descriptionadmin's Token或你自定义名称的条目,复制 token列的长字符串即可。

方法二:通过 Web UI 界面查看

如果你在部署时设置了 Web 服务并记得密码,可以使用此方法。

  1. InfluxDB  外部访问​ 地址(通常是 http://服务器IP:8086)。

  2. 浏览器打开该地址,使用初始化时设置的账号密码登录。

  3. 点击左侧菜单栏的 Load Data​ -> API Tokens

  4. 找到对应的 Token,点击 Copy to Clipboard​ 复制。

python验证数据写入

http请求方式

import requests

url = "http://localhost:8086/api/v2/write"
params = {"bucket": "chang_feng", "org": "hua_heng"}
headers = {
    "Authorization": "Token q57rRF3q7cYHPBj_19eoNgBhHyfKTttHJPZ9lzgCIuGekfIeG9f7AjXav_RyWnYYReNNZXJFJa5AznBLO3CzSw==",
    "Content-Type": "text/plain"
}

# python 会使用 \n 连接多行数据
data = """
cpu,host=serverA usage=0.64
cpu,host=serverB usage=0.63
"""

# 直接显示使用 \n 连接多行数据也可以
# data = """
# cpu,host=serverA usage=0.64 \n cpu,host=serverB usage=0.63
# """

resp = requests.post(url, params=params, headers=headers, data=data)
print(resp.status_code)

influxdb_client库方式

import influxdb_client, os, time
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS

url = "http://localhost:8086"
org = "hua_heng"
token = "q57rRF3q7cYHPBj_19eoNgBhHyfKTttHJPZ9lzgCIuGekfIeG9f7AjXav_RyWnYYReNNZXJFJa5AznBLO3CzSw=="
bucket="chang_feng"

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

# 写入
write_api = client.write_api(write_options=SYNCHRONOUS)
for value in range(5):
  point = (
    Point("measurement1")
    .tag("tagname1", "tagvalue1")
    .field("field1", value)
  )
  write_api.write(bucket=bucket, org=org, record=point)
  time.sleep(1) # separate points by 1 second

# 查询
query_api = client.query_api()
query = f"""from(bucket: "{bucket}")
 |> range(start: -10m)
 |> filter(fn: (r) => r._measurement == "measurement1")"""
tables = query_api.query(query)
for table in tables:
  for record in table.records:
    print(record)

# 聚合查询
query_api = client.query_api()
query = f"""from(bucket: "{bucket}")
  |> range(start: -100m)
  |> filter(fn: (r) => r._measurement == "measurement1")
  |> mean()"""
tables = query_api.query(query)
for table in tables:
    for record in table.records:
        print(record)

windows命令行验证数据写入

@REM 多行模式使用 @语法发送文件内容
@REM curl --data-binary @temp.txt http://example.com

curl -X POST "http://localhost:8086/api/v2/write?org=hua_heng&bucket=chang_feng&precision=ms" ^
  --header "Content-Type: text/plain" ^
  --header "Authorization: Token q57rRF3q7cYHPBj_19eoNgBhHyfKTttHJPZ9lzgCIuGekfIeG9f7AjXav_RyWnYYReNNZXJFJa5AznBLO3CzSw==" ^
  --data-raw "dcs_data2,tag=通道1.设备1.TT_001 value=300"

http验证数据写入

### 上报数据
POST http://localhost:8086/api/v2/write?org=hua_heng&bucket=chang_feng&precision=ms
Content-Type: text/plain
Authorization: Token q57rRF3q7cYHPBj_19eoNgBhHyfKTttHJPZ9lzgCIuGekfIeG9f7AjXav_RyWnYYReNNZXJFJa5AznBLO3CzSw==

dcs_data,tag=CD01_F1 value_bool=false 1775806114554

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐