InfluxDB提供多種數據寫入方式,包括命令行、客戶端、插件等。Cli寫入數據已在上文中描述,本文主要介紹使用HTTP接口讀寫數據。
使用HTTP接口創建數據庫
接口地址:/query
POST,參數q
為CREATE DATABASE <new_database_name>
,示例:
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb1"
HTTP/1.1 200 OK
Content-Type: application/json
Request-Id: 658c7410-ea97-11eb-8030-525400d9065e
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.8.6
X-Request-Id: 658c7410-ea97-11eb-8030-525400d9065e
Date: Thu, 22 Jul 2021 02:49:12 GMT
Transfer-Encoding: chunked
{"results":[{"statement_id":0}]}
寫單條數據
接口地址:/write,具體格式如下:
curl -i -XPOST 'http://localhost:8086/write?db=mydb1' --data-binary 'cpu,host=server01,region=us-west value=0.69 1626858254189591692'
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: f606e8f7-ea97-11eb-8031-525400d9065e
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.8.6
X-Request-Id: f606e8f7-ea97-11eb-8031-525400d9065e
Date: Thu, 22 Jul 2021 02:53:15 GMT
HTTP 204 No Content`,說明寫入成功。
批量寫入
curl -i -XPOST 'http://localhost:8086/write?db=mydb1' --data-binary 'cpu,host=server02 value=0.67
cpu,host=server02,region=us-west value=0.55 1626858254189591692
cpu,host=server03,region=us-west value=2.0 1626858254189591692'
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: e9c4ad08-ea98-11eb-8032-525400d9065e
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.8.6
X-Request-Id: e9c4ad08-ea98-11eb-8032-525400d9065e
Date: Thu, 22 Jul 2021 03:00:04 GMT
批量寫入文件
curl -i -XPOST 'http://localhost:8086/write?db=mydb1' --data-binary @cpu_data.txt
給一個正確的文件(cpu_data.txt)的例子,數據的格式需要滿足InfluxDB行格式:
cpu,host=server02 value=0.67
cpu,host=server02,region=us-west value=0.55 1626858254189591692
cpu,direction=in,host=server01,region=us-west value=2.0 1626858254189591692
查詢數據
接口地址:/query
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb1" --data-urlencode "q=SELECT * FROM \"cpu\" WHERE \"region\"='us-west'"
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "cpu",
"columns": [
"time",
"host",
"region",
"value"
],
"values": [
[
"2021-07-21T09:04:14.189591692Z",
"server02",
"us-west",
0.55
],
[
"2021-07-21T09:04:14.189591692Z",
"server03",
"us-west",
2
],
[
"2021-07-22T02:53:15.355312874Z",
"server01",
"us-west",
0.69
]
]
}
]
}
]
}
多個數據
接口地址:/query
在一次API調用中發送多個InfluxDB的查詢語句,可以簡單地使用分號分隔每個查詢
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb1" --data-urlencode "q=SELECT \"value\" FROM \"cpu\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu\" WHERE \"region\"='us-west'"
其它參數
時間戳格式
在InfluxDB中的所有數據都是存的UTC時間,時間戳默認返回RFC3339格式的納米級的UTC時間,例如2021-07-22T02:53:15.355312874Z
,如果你想要返回Unix格式的時間,可以在請求參數里設置epoch
參數,其中epoch可以是[h,m,s,ms,u,ns]
之一。例如返回一個秒級的epoch:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "epoch=s" --data-urlencode "db=mydb1" --data-urlencode "q=SELECT * FROM \"cpu\" WHERE \"region\"='us-west'"
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "cpu",
"columns": [
"time",
"host",
"region",
"value"
],
"values": [
[
1626858254,
"server02",
"us-west",
0.55
],
[
1626858254,
"server03",
"us-west",
2
],
[
1626922395,
"server01",
"us-west",
0.69
]
]
}
]
}
]
}
最大行限制
分塊(chunking)
HTTP返回值概要
- 2xx:如果寫數據后收到
HTTP 204 No Content
,說明寫入成功 - 4xx:表示InfluxDB不知道你發的是什么。
- 5xx:系統過載或是應用受損。