InfluxDB之HTTP API写数据

有很多方法可以将数据写入InfluxDB,包括命令行界面,客户端库和用于常见数据格式(例如Graphite)的插件。在这里,我们将向您展示如何使用内置的HTTP API创建数据库并向其写入数据。


使用HTTP API创建数据库

 

要创建数据库,请将POST请求发送到/query终结点,并将URL参数q设置为CREATE DATABASE。 下面的示例向本地主机上运行的InfluxDB发送请求,并创建数据库mydb:

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"


使用HTTP API写入数据


通过向/write端点发送POST请求,HTTPAPI是将数据写入InfluxDB的主要方式。下面的例子向mydb数据库写了一个点。 数据由度量cpu_load_short,标签键host和region和对应的标签值server01和us-west,字段值为0.64的字段键value和时间戳1434055562000000000组成。

 

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'


写入点时,必须在db查询参数中指定一个现有的数据库。 如果您没有使用rp查询参数提供保留策略,则会将点写入数据库的默认保留策略。 请参阅API参考文档以获取可用查询参数的完整列表。

 

POST的内容——我们称之为行协议——包含您希望存储的时间序列数据。它们由度量、标签、字段和时间戳组成。InfluxDB数据库需要一个度量名称。严格地说,标签是可选的,但大多数系列包括标签来区分数据源,并使查询变得简单和高效。标签键和标签值都是字符串。字段键是必需的,并且始终是字符串,默认情况下,字段值是单精度浮点数。时间戳 – 在行尾提供的,以Unix时间从UTC1970年1月1日开始的时间纳秒数,是可选的。如果你没有指定时间戳,InfluxDB会使用服务器本地纳秒的Unix时期时间戳。在InfluxDB中任何与时间有关的事情都是UTC。

 

写入多个点


一次将多个点Post到不同序列,只需要用行将多个点分隔即可。这种批量方式具有高性能。以下示例将三个点写入数据库mydb。 第一点属于拥有度量cpu_load_short及标签集host = server02且用服务器本地时间戳的序列。第二点属于拥有度量cpu_load_short及标签集host = server02,region =us-west且具有指定时间戳1422568543702900257的序列。第三个点与第二个点具有相同的指定时间戳,但是将其写入拥有度量cpu_load_short和标签集direction=in,host=server01,region=us-west的序列。

 

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'


写入来自文件的点


通过将@filename传给curl来从文件中写入点。文件中的数据应该遵循InfluxDB的行协议语法。

格式正确的文件示例(cpu_data.txt):

cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257


将cpu_data.txt中数据写入mydb数据库:

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @cpu_data.txt

注意:如果您的数据文件中超过5,000个点,可能需要将该文件分成几个文件,以便将数据批量写入InfluxDB。 默认情况下,HTTP请求在五秒钟后超时。 InfluxDB在超时之后仍然会尝试写出这些点,但是不能确认它们是否成功写入。

 

无架构设计


InfluxDB是一个无架构的数据库。 您可以随时添加新的度量,标签和字段。请注意,如果您尝试写入与已写入数据类型不相同的数据(例如,将字符串写入之前接受整数的字段),InfluxDB将拒绝这些数据。


关于REST的说明...


InfluxDB仅使用HTTP作为一种方便且广泛支持的数据传输协议。现代Web API已经选择REST,因为它解决了一个共同的需求。随着终结点数量的增加,对组织系统的需求变得迫切。 REST是组织大量终结点的业界公认方式。 这种一致性对于那些开发和使用API的人来说是很好的:每个人都知道应该期望什么。 然而,REST是一个惯例。 InfluxDB使用三个API端点。 这个简单易懂的系统使用HTTP作为InfluxQL的传输方法。InfluxDB API不会尝试转为RESTful。


HTTP响应总结

 

  • 2xx:如果你的写请求收到HTTP 204 No Content,那就成功了!
  • 4xx:InfluxDB无法理解请求。
  • 5xx:系统过载或严重受损。


错误响应的例子:

  • 将浮点数写入先前接受布尔值的字段中:

curl -i -XPOST 'http://localhost:8086/write?db=hamlet' --data-binary 'tobeornottobe booleanonly=true'

curl -i -XPOST 'http://localhost:8086/write?db=hamlet' --data-binary 'tobeornottobe booleanonly=5'

 

返回:

 

HTTP/1.1 400 Bad Request
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.4.x
Date: Wed, 01 Mar 2017 19:38:01 GMT
Content-Length: 150

{"error":"field type conflict: input field \"booleanonly\" on measurement \"tobeornottobe\" is type float, already exists as type boolean dropped=1"}
Writing a point to a database that doesn’t exist:
 curl -i -XPOST 'http://localhost:8086/write?db=atlantis' --data-binary 'liters value=10'
returns: 
 HTTP/1.1 404 Not Found
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.4.x
Date: Wed, 01 Mar 2017 19:38:35 GMT
Content-Length: 45

{"error":"database not found: \"atlantis\""}
Next steps
Now that you know how to write data with the built-in HTTP API discover how to query them with the Querying Data guide! For more information about writing data with the HTTP API, please see the API reference documentation.


  • 将点写入不存在的数据库

curl -i -XPOST 'http://localhost:8086/write?db=atlantis' --data-binary 'liters value=10'


返回:

 

HTTP/1.1 404 Not Found
Content-Type: application/json
Request-Id: [...]
X-Influxdb-Version: 1.4.x
Date: Wed, 01 Mar 2017 19:38:35 GMT
Content-Length: 45

{"error":"database not found: \"atlantis\""}

 

下一步

 

现在您已经知道如何使用内置的HTTP API写数据了,至于如何查询,请参阅“查询数据”指南! 有关使用HTTP API写数据的更多信息,请参阅API参考文档。

你可能感兴趣的:(InfluxDB)