Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >4. InfluxDB使用HTTP的API查询数据

4. InfluxDB使用HTTP的API查询数据

作者头像
Devops海洋的渔夫
发布于 2022-01-14 09:34:20
发布于 2022-01-14 09:34:20
1.2K00
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

参考官方开源文档

使用HTTP API查询数据https://docs.influxdata.com/influxdb/v1.7/guides/querying_data/

使用HTTP的API查询数据

HTTP API是在InfluxDB中查询数据的主要方法(有关查询数据库的其他方法,请参阅命令行界面和客户端库)。

注意:以下示例使用curl命令行工具,该工具使用URL传输数据。学习的基础知识curl与HTTP脚本指南。

API查询语句

查询语句如下:curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

在前面的篇章中,我已经创建了testdb数据库,以及插入了数据。 首先查看一下当前InfluxDB中的数据,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> show databases
name: databases
name
----
_internal
mydb
testdb
> 
> use testdb
Using database testdb
> 
> show measurements
name: measurements
name
----
cpu_load_short
tobeornottobe
> 
> select * from cpu_load_short
name: cpu_load_short
time                direction host     region  value
----                --------- ----     ------  -----
1422568543702900257 in        server01 us-west 2
1422568543702900257           server02 us-west 0.55
1434055562000000000           server01 us-west 0.64
1546849598178339889           server02         0.67
1546850175491084332           server02         0.67
1546850460880063366           server02         0.67
> 
> select * from cpu_load_short where region = 'us-west'
name: cpu_load_short
time                direction host     region  value
----                --------- ----     ------  -----
1422568543702900257 in        server01 us-west 2
1422568543702900257           server02 us-west 0.55
1434055562000000000           server01 us-west 0.64
> 

下面使用API请求查询如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            2
                        ],
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            0.55
                        ],
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 

可以从上面看出,可以正确查询出条件为region = 'us-west' 的三条数据。

InfluxDB返回数据的格式是JSON格式。查询结果显示在"results"数组中。如果发生错误,InfluxDB会设置一个"error"带有错误解释。

例如查询region = 'us-south' 这个在数据中是没有的。下面执行看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-south'"
{
    "results": [
        {
            "statement_id": 0
        }
    ]
}
[root@server81 ~]# 

注意:附加pretty=true到URL可以启用漂亮的JSON输出。虽然这对于调试或直接使用类似工具查询很有用curl,但不建议将其用于生产,因为它会消耗不必要的网络带宽。

如果没有pretty=true,那么执行会是怎么样的结果呢?执行如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{"results":[{"statement_id":0,"series":[{"name":"cpu_load_short","columns":["time","value"],"values":[["2015-01-29T21:55:43.702900257Z",2],["2015-01-29T21:55:43.702900257Z",0.55],["2015-06-11T20:46:02Z",0.64]]}]}]}
[root@server81 ~]# 

API进行多个查询语句

在单个API调用中向InfluxDB发送多个查询。只需使用分号分隔每个查询,例如:curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu_load_short\" WHERE \"region\"='us-west'"执行请求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            2
                        ],
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            0.55
                        ],
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]
                }
            ]
        },
        {
            "statement_id": 1,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "count"
                    ],
                    "values": [
                        [
                            "1970-01-01T00:00:00Z",
                            3
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 

可以从上面的返回结果看出,两个查询语句的结果都会合并到result数组中返回。

查询数据的其他选项

设置时间戳格式

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

下面对比查看两个请求,一个有写--data-urlencode "epoch=s"条件,第二个没有该条件,分析一下返回结果中的时间格式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=s" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1422568543,
                            2
                        ],
                        [
                            1422568543,
                            0.55
                        ],
                        [
                            1434055562,
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            2
                        ],
                        [
                            "2015-01-29T21:55:43.702900257Z",
                            0.55
                        ],
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 

可以从上面的格式中看出,第一个查询出来的时间戳为1422568543,第二个查询出来的时间戳是2015-01-29T21:55:43.702900257Z

关于查询是2015-01-29T21:55:43.702900257Z的解释:InfluxDB中的所有内容都以UTC格式存储和报告。默认情况下,时间戳以RFC3339 UTC返回,并具有纳秒级精度。

关于查询是1422568543的解释:设置epoch参数,则可以设置返回的时间戳格式,格式为epoch=[h,m,s,ms,u,ns]。 例如,设置秒级的时间戳则是epoch=s

那么如果查询毫秒(ms)级别的呢?下面来查询看看:curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1422568543702,
                            2
                        ],
                        [
                            1422568543702,
                            0.55
                        ],
                        [
                            1434055562000,
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 

秒级的时间戳:1422568543 毫秒级的时间戳:1422568543702 可以看出精度越来越高,多了最后的702三位。

最大行限制

max-row-limit配置选项允许用户限制返回结果的最大数量,以防止InfluxDB运行内存溢出。默认情况下,max-row-limit配置选项设置为0。该默认设置允许每个请求返回无限数量的行。

最大行限制仅适用于非分块查询。分块查询可以返回无限数量的点。

分块

通过设置chunked=true查询字符串参数,可以使用分块返回结果。

下面使用实操来演示一下分块的返回效果,首先查询一下数据如下:curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1422568543702,
                            2
                        ],
                        [
                            1422568543702,
                            0.55
                        ],
                        [
                            1434055562000,
                            0.64
                        ],
                        [
                            1546849598178,
                            0.67
                        ],
                        [
                            1546850175491,
                            0.67
                        ],
                        [
                            1546850460880,
                            0.67
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 

可以从返回的结果看出,所有查询的结果都是写入一个result数组里面的。能否分成多个result数组返回结果呢?

下面来设置分块参数执行语句如下: 设置参数--data-urlencode "chunked=true" --data-urlencode "chunk_size=1"一条数据为一个返回result数组。 整体语句如下: curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "chunked=true" --data-urlencode "chunk_size=1" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server81 ~]# curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testdb" --data-urlencode "epoch=ms" --data-urlencode "chunked=true" --data-urlencode "chunk_size=1"  --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\""
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1422568543702,
                            2
                        ]
                    ],
                    "partial": true
                }
            ],
            "partial": true
        }
    ]
}
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1422568543702,
                            0.55
                        ]
                    ],
                    "partial": true
                }
            ],
            "partial": true
        }
    ]
}
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1434055562000,
                            0.64
                        ]
                    ],
                    "partial": true
                }
            ],
            "partial": true
        }
    ]
}
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1546849598178,
                            0.67
                        ]
                    ],
                    "partial": true
                }
            ],
            "partial": true
        }
    ]
}
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1546850175491,
                            0.67
                        ]
                    ],
                    "partial": true
                }
            ],
            "partial": true
        }
    ]
}
{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            1546850460880,
                            0.67
                        ]
                    ]
                }
            ]
        }
    ]
}
[root@server81 ~]# 

好了,从上面可以看出,已经将每一条查询结果都分块到各自的result数组之中了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用python脚本向influxdb写
python3使用requests模块向influxdb的http API发送接口请求实现数据写入,如下:
py3study
2020/01/13
6160
influxdb 学习
数据点包括time(一个时间戳),measurement(例如cpu_load),至少一个k-v格式的field(也即指标的数值例如 “value=0.64”或者“temperature=21.2”),零个或多个tag,其一般是对于这个指标值的元数据(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。
solate
2019/07/22
2.7K0
InfluxDB使用HTTP的API编写数据
Centos7 下 InfluxDB 从安装开始到入门 InfluxDB关键概念 经过前面两个篇章的探讨,基本已经了解了InfluxDB的操作,下面再来继续看看使用HTTP API编写数据。
Devops海洋的渔夫
2019/05/31
3.3K0
InfluxDB配置admin用户认证登陆
不管是yum安装,亦或者是docker安装的方式,influxdb默认安装完毕之后,并不会自带用户认证的功能,直接就可以进行访问的了。 情况如下:
Devops海洋的渔夫
2019/11/26
11.9K0
influxdb 时间序列数据库
1、InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等) 可度量性:你可以实时对大量数据进行计算 基于事件:它支持任意的事件数据 1)无结构(无模式):可以是任意数量的列 2)可拓展的 3)支持min, max, sum, count, mean, median 等一系列函数,方便统计 4)原生的HTTP支持,内置HTTP API 5)强大的类SQL语法 6)自带管理界面,方便使用 2、安装: rpm -ivh https://dl.influxdata.com/influxdb/releases/influxdb-0.13.0.x86_64.rpm 3、启动: sudo service influxdb start 4、客户端: 在usr/bin里使用influx即可登入Influx服务器。也可以将路径加入环境变量中,这样既可在任意地方使用influx。 InfluxDB自带web管理界面,在浏览器中输入 http://服务器IP:8083 即可进入web管理页面。 5、基本概念: database 数据库 measurement 表 point 表中的一行数据 point由time(自动生成的时间戳),field数据,tags由索引的数据 series所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。 6、基本操作: 客户端命令行、HTTP API、各语言API库 show databases; create database test drop database test use test
用户5760343
2022/05/14
1.2K0
influxdb 时间序列数据库
Docker监控方案(TIG)的研究与实践之Influxdb
前言: Influxdb也是有influxdata公司(www.influxdata.com )开发的用于数据存储的时间序列数据库.可用于数据的时间排列。在整个TIG(Telegraf+influxdb+grafana)方案中,influxdb可算作一个中间件,主要负责原始数据的存储,并按照时间序列进行索引构建以提供时间序列查询接口。在整个TIG方案中,应该先构建的就是Influxdb。 Influxdb研究与实践: influxdb介绍: 使用TSM(Time Structured Merge)存储引擎,
BGBiao
2018/02/26
9480
Docker监控方案(TIG)的研究与实践之Influxdb
时序数据库详解和使用说明_时序数据库 应用场景
什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。
全栈程序员站长
2022/11/09
4.9K0
时序数据库详解和使用说明_时序数据库 应用场景
性能监控平台搭建 - InfluxDB安装与使用指南
InfluxDB是目前比较主流的时序数据库,而时序数据库则是以时间序列为轴的数据库,与关系型数据库相比它有几个特点:
上帝De助手
2019/09/17
1.8K0
时间序列数据库概览
背景 目前对于时序大数据的存储和处理往往采用关系型数据库的方式进行处理,但由于关系型数据库天生的劣势导致其无法进行高效的存储和数据的查询。时序大数据解决方案通过使用特殊的存储方式,使得时序大数据可以高效存储和快速处理海量时序大数据,是解决海量数据处理的一项重要技术。该技术采用特殊数据存储方式,极大提高了时间相关数据的处理能力,相对于关系型数据库它的存储空间减半,查询速度极大的提高。时间序列函数优越的查询性能远超过关系型数据库,Informix TimeSeries非常适合在物联网分析应用。 定义 时间
用户1217611
2018/01/30
2.5K0
时间序列数据库概览
springboot2输出metrics到influxdb
本文主要研究一下如何将springboot2的metrics输出到influxdb
code4it
2018/09/17
1.9K0
[Linux] 安装grafana并且添加influxdb监控
wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb dpkg -i grafana_6.5.1_amd64.deb update-rc.d grafana-server defaults 95 10 service grafana-server start
唯一Chat
2019/12/02
7750
InfluxDB和Grafana集成
在这个例子中,我们将在同一台机器(Ubuntu 16.04)上安装InfluxDB和Grafana,然后配置两者,以便Grafana可以可视化存储在InfluxDB中的数据。我们将使用InfluxDB版本1.3.5和Grafana版本4.4.3。
后场技术
2020/09/03
1.8K0
InfluxDB和Grafana集成
数据库笔记 InfluxDB 基础概念及操作
InfluxDB is the open source time series database
twowinter
2020/04/17
1K0
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案
InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案
奇小在
2022/10/22
2.6K0
Telegraf+InfluxDB+Grafana 搭建服务器监控平台
近期需要搭建一套服务器性能数据监控平台,所以本次考虑基于Telegraf作为采集数据源的工具,集成使用influxdb存储数据,最后Grafana展示图表的方式,来建立这个监控平台。
Devops海洋的渔夫
2019/11/21
1.8K0
Telegraf+InfluxDB+Grafana 搭建服务器监控平台
influxdb基本操作_一个数据库只有一个内模式
转载于:https://juejin.im/post/5c4f07b7e51d454b0d75d883
全栈程序员站长
2022/11/16
3140
1.InfluxDB数据库快速入门与基础使用
[TOC] 0x00 前言简述 InfluxDB 介绍 Q: 什么是InfluxDB? InfluxDB 采用Go语言开发是一个开源时间序列平台, 是一个可编程且高性能的时间序列数据库,具有跨 OS
全栈工程师修炼指南
2022/09/29
8.5K0
1.InfluxDB数据库快速入门与基础使用
sqlite 的分布式实现方案:rqlite
rqlite 相关操作说明 项目总为实现 sqlite 添加账号和密码,以满足信息安全的需求。 鉴于对 sqlite 实现添加账号和密码比较复杂和困难,项目中使用了分布式 rqlite ,故转而研究 rqlite 如何添加账号和密码。 项目概况: 开发语言:Python 存储: sqlite (rqlite) 整体流程: rqlite 介绍 rqlite CLI 客户端介绍 rqlite Basic Auth pyrqlite 介绍 sqlalchemy-rqlite 介绍 1. rqlite 使用介绍
谢伟
2018/06/06
5.7K1
python脚本向influxdb写入数
python3使用requests模块向influxdb的http API发送接口请求实现数据写入,如下:
py3study
2020/01/07
1.8K0
一小时入门时序数据库 influxDB
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 主要特性有:
陈大剩博客
2023/03/06
1.1K0
相关推荐
使用python脚本向influxdb写
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验