写入数据

    使用POST方式发送到URL的/query路径,参数qCREATE DATABASE <new_database_name>,下面的例子发送一个请求到本地运行的InfluxDB创建数据库mydb:

    使用HTTP接口写数据

    通过HTTP接口POST数据到/write路径是我们往InfluxDB写数据的主要方式。下面的例子写了一条数据到mydb数据库。这条数据的组成部分是measurement为cpu_load_short,tag的key为host和region,对应tag的value是server01us-west,field的key是value,对应的数值为0.64,而时间戳是1434055562000000000

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

    当写入这条数据点的时候,你必须明确存在一个数据库对应名字是参数的值。如果你没有通过rp参数设置retention policy的话,那么这个数据会写到db默认的retention policy中。想要获取更多参数的完整信息,请移步到API参考章节。

    POST的请求体我们称之为Line Protocol,包含了你希望存储的时间序列数据。它的组成部分有measurement,tags,fields和timestamp。measurement是InfluxDB必须的,严格地说,tags是可选的,但是对于大部分数据都会包含tags用来区分数据的来源,让查询变得容易和高效。tag的key和value都必须是字符串。fields的key也是必须的,而且是字符串,默认情况下field的value是float类型的。timestamp在这个请求行的最后,是一个从1/1/1970 UTC开始到现在的一个纳秒级的Unix time,它是可选的,如果不传,InfluxDB会使用服务器的本地的纳米级的timestamp来作为数据的时间戳,注意无论哪种方式,在InfluxDB中的timestamp只能是UTC时间。

    要想同时发送多个数据点到多个series(在InfluxDB中measurement加tags组成了一个series),可以用新的行来分开这些数据点。这种批量发送的方式可以获得更高的性能。

    1. cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
    2. cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'

    写入文件中的数据

    可以通过的@filename来写入文件中的数据,且这个文件里的数据的格式需要满足InfluxDB那种行的语法。

    给一个正确的文件(cpu_data.txt)的例子:

    看我们如何把cpu_data.txt里的数据写入mydb数据库:

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

    InfluxDB是一个无模式(schemaless)的数据库,你可以在任意时间添加measurement,tags和fields。注意:如果你试图写入一个和之前的类型不一样的数据(例如,filed字段之前接收的是数字类型,现在写了个字符串进去),那么InfluxDB会拒绝这个数据。

    对于REST的一个说明

    现代web的APIs都基于REST的设计,因为这样解决了一个共同的需求。因为随着终端数量的增长,组织系统的需求变得越来越迫切。REST是为了组织大量终端的一个业内认可的标准。这种一致性对于开发者和API的消费者都是一件好事:所有的参与者都知道期望的是什么。

    REST的确是很方便的,而InfluxDB也只提供了三个API,这使得InfluxQL在翻译为HTTP请求的时候很简单便捷。 所以InfluxDB API并不是RESTful的。

    • 2xx:如果你写了数据后收到HTTP 204 No Content,说明写入成功了!
    • 4xx:表示InfluxDB不知道你发的是什么鬼。
    • 5xx:系统过载或是应用受损。

    举几个返回错误的例子:

    • 之前接收的是布尔值,现在你写入一个浮点值:
    1. curl -i -XPOST 'http://localhost:8086/write?db=hamlet' --data-binary 'tobeornottobe booleanonly=true'

    这时系统返回:

    • 写入数据到一个不存在的数据库中:
    1. curl -i -XPOST 'http://localhost:8086/write?db=atlantis' --data-binary 'liters value=10'

    返回值:

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

    下一步