从 influxdb 中检索一个(最后一个)值



我正在尝试检索插入到influxdb表中的最后一个值。我需要做的是通过HTTP将其发布到另一个系统。

我想在 bash 脚本中完成所有这些操作,但我对 Python 也持开放态度。

 $ curl -sG 'https://influx.server:8086/query' --data-urlencode "db=iotaWatt" --data-urlencode "q=SELECT LAST("value") FROM "grid" ORDER BY time DESC" | jq -r
{
  "results": [
    {
      "statement_id": 0,
      "series": [
        {
          "name": "grid",
          "columns": [
            "time",
            "last"
          ],
          "values": [
            [
              "2018-01-17T04:15:30Z",
              690.1
            ]
          ]
        }
      ]
    }
  ]
}

正在努力解决这个问题,将这个值变成我可以使用的干净格式。我真的不想使用 sed,我已经尝试过 jq,但它抱怨数据是字符串而不是索引:

jq: error (at <stdin>:1): Cannot index array with string "series"

有人有好的建议吗?

卷曲到下面jq的管道

$ your_curl_stuff_here | jq '.results[].series[]|.name,.values[0][]'
"grid"
"2018-01-17T04:15:30Z"
690.1

结果可以存储到 bash 数组中并在以后使用。

$ results=( $(your_curl_stuff_here | jq '.results[].series[]|.name,.values[0][]') )
$ echo "${results[@]}"
"grid" "2018-01-17T04:15:30Z" 690.1
# Individual values could be accessed using "${results[0]}" and so, mind quotes

都很好:-(

给定显示的 JSON,jq 查询:

.results[].series[].values[]

生产:

[
  "2018-01-17T04:15:30Z",
  690.1
]

这似乎是您想要的输出,但从不熟悉 influxdb 的人的角度来看,这些要求似乎非常不透明,因此您可能需要考虑一个变体,例如:

.results[-1].series[-1].values[-1]

在这种情况下,会产生相同的结果,因为它发生了。

如果您只需要原子值,则可以简单地将[]附加到上面的任一查询中。

最新更新