TL;DR InfluxDB 技术小贴士 - HTTP API:返回查询结果及请求认证

导航到

在本篇文章中,我们将回顾本周最具趣味的 InfluxDB 和 TICK-stack 相关问题、解决方案、教程和问答,这些内容可能您错过了,它们来自 GitHub、IRC 和 InfluxDB 的 Google Group

使用 HTTP API 分批处理查询响应

问:是否有方法可以分批返回查询响应而不是单一响应?

答:是的!HTTP API 的查询字符串参数 chunked=true 告诉 InfluxDB 通过流式分批返回数据点,而不是在单一响应中。如果设置为 true,InfluxDB 会根据系列或每 10,000 个点进行分批,哪个先到就按哪个。如果设置为特定值(例如,chunked=20000),InfluxDB 会根据系列或该数量的点进行分批。

有关查询字符串参数的更多信息,请参阅API 参考文档

在 WHERE 子句中使用 OR 和绝对时间

问:我尝试查询具有特定时间戳的数据点。我发现我已经成功写入这些数据点,但查询没有返回任何结果。我是否做错了什么?

> SELECT * FROM "heaven"
name: heaven
------------
time                   cherrypie
2016-08-24T20:00:00Z   1
2016-08-24T20:10:00Z   4

> SELECT * FROM "heaven" WHERE time = '2016-08-24T20:00:00Z' OR time = '2016-08-24T20:10:00Z'

答:目前,InfluxQL 不支持在 WHERE 子句中使用 OR绝对时间。如果查询的 WHERE 子句使用 OR 与绝对时间,InfluxDB 将返回空响应。

在这种情况下,您可以将查询拆分为两个查询

> SELECT * FROM "heaven" WHERE time = '2016-08-24T20:00:00Z'
name: heaven
------------
time                   cherrypie
2016-08-24T20:00:00Z   1

> SELECT * FROM "heaven" WHERE time = '2016-08-24T20:10:00Z'
name: heaven
------------
time                   cherrypie
2016-08-24T20:10:00Z   4

或者您可以使用 AND 而不是 OR

> SELECT * FROM "heaven" WHERE time >= '2016-08-24T20:00:00Z' AND time <= '2016-08-24T20:10:00Z'
name: heaven
------------
time                   cherrypie
2016-08-24T20:00:00Z   1
2016-08-24T20:10:00Z   4

请参阅 GitHub 问题 #3290 跟踪此问题。

使用 HTTP API 进行请求认证

问:我在配置文件中启用了认证。我如何使用 HTTP API 进行请求认证?

答:InfluxDB 的 HTTP API 支持HTTP认证和基本认证。

您的第一个选项是使用查询字符串参数 up

curl -i -XPOST "https://127.0.0.1:8086/write?db=topsecret&u=myusername&p=mypassword" --data-binary 'manila_envelope,location=confidential number=91'

您的第二个选项是使用基本认证

curl -i -XPOST -u myusername:mypassword "https://127.0.0.1:8086/write?db=topsecret" --data-binary 'manila_envelope,location=confidential number=91'

有关使用 API 的更多信息,请参阅 API 参考文档

想要了解更多InfluxDB技巧,请参阅我们的常见问题解答页面,并欢迎您在InfluxDB用户组中提问。

接下来是什么?