查询操作
更新时间:2019-06-18
获取度量(Metric)
基本流程
- 创建TsdbDataClient。
- 执行getMetrics()方法。
如下代码可以获取metric列表:
// 获取并打印Metric
client.getMetrics()
.then(response => console.log(response.body)) // 获取成功
.catch(error => console.error(error)); // 获取失败,并返回错误类型
执行结果:
// 终端返回结果
{
metrics: [
'cpu_idle',
'cpu_idle1'
]
}
获取Field
基本流程
- 创建TsdbDataClient。
- 执行getFields()方法,您需要提供查询的metricName。
如下代码可以获取Field列表:
var metricName = <metricName>;
// 获取并打印Field
client.getFields(<metricName>)
.then(response => console.log(response.body)) // 获取成功
.catch(error => console.error(error)); // 获取失败,并返回错误类型
执行结果:
// 终端返回结果
{
"fields": [
"field1",
"field2"
]
}
获取标签(Tag)
基本流程
- 创建TsdbDataClient。
- 执行getTags()方法,您需要提供查询的metricName。
如下代码可以获取标签(Tag)列表:
var metricName = <metricName>;
// 获取并打印Tag
client.getTags(<metricName>)
.then(response => console.log(response.body)) // 获取成功
.catch(error => console.error(error)); // 获取失败,并返回错误类型
执行结果:
// 终端返回结果
{
tags: [
'tags1',
'tags2'
]
}
查询数据点
单域查询数据点
基本流程
- 创建TsdbDataClient。
- 执行getDatapoints()方法,您需要提供根据需求构建的查询列表。
如下代码可以查询数据点:
// 构建想要查询的queryList
var queryList = [
{
"metric": "cpu_idle1",
"filters": {
"start": "1 hour ago",
"tags": {
"host": [
"server1",
"server2"
]
},
"value": ">= 10"
},
"groupBy": [
{
"name": "Tag",
"tags": [
"rack"
]
}
]
}
];
// 获取并打印查询结果
client.getDatapoints(<queryList>)
.then(response => console.log(JSON.stringify(response.body))) // 获取成功
.catch(error => console.error(error)); // 获取失败,并返回错误类型
执行结果:
// 终端返回类似结果
{
results: [
{
metric: 'humidity',
field: 'value',
groups: [],
rawCount: 0
}
]
}
多域查询数据点
基本流程
- 创建TsdbDataClient。
- 执行getDatapoints()方法,您需要提供根据需求构建的查询列表。
如下代码可以查询数据点:
// 构建想要查询的queryList
var queryList = [
{
"metric": "cpu_idle3",
"fields": [
"field1",
"field2"
],
"tags": [
"rack",
"host"
],
"filters": {
"start": "5 hour ago",
"fields": [
{
"field": "field1",
"value": ">= 10"
},
{
"field": "field2",
"value": "<= 10"
}
],
"tags": {
"rack": [
"rack1"
],
"host": [
"server1"
]
},
},
"groupBy": [
{
"name": "Tag",
"tags": [
"rack",
"host"
]
}
],
"limit": 1000
}
];
// 获取并打印查询结果
client.getDatapoints(<queryList>)
.then(response => console.log(JSON.stringify(response.body))) // 获取成功
.catch(error => console.error(error)); // 获取失败,并返回错误类型
执行结果:
// 终端返回类似结果
{
results: [
{
metric: 'humidity',
field: 'value',
groups: [],
rawCount: 0
}
]
}
使用插值方式查询数据点
基本流程
- 创建TsdbDataClient。
- 执行getDatapoints()方法,您需要提供根据需求构建的查询列表。
如下代码可以对数据点进行插值:
// 构建想要查询的queryList
var queryList = [
{
"metric": "cpu_idle3",
"field": "field1",
"filters": {
"start": "1 hour ago",
"tags": {
"host": [
"server1"
]
}
},
"fill": {
"type": "Linear",
"interval": "5 minutes",
"maxWriteInterval": "30 minutes"
}
}
];
// 获取并打印查询结果
client.getDatapoints(<queryList>)
.then(response => console.log(JSON.stringify(response.body))) // 获取成功
.catch(error => console.error(error)); // 获取失败,并返回错误类型
执行结果:
// 终端返回类似结果
{
results: [
{
metric: 'humidity',
field: 'value',
groups: [],
rawCount: 0
}
]
}
分页查询数据点
基本流程
- 创建TsdbDataClient。
- 执行getDatapoints()方法,您需要提供根据需求构建的查询列表。
- 根据返回结果的result.truncated判断是否还有下一页数据,有则执行2,否则结束。
示例代码:
// 构建想要查询的query
var query = {
"metric": "cpu_idle1",
"filters": {
"start": "1 hour ago",
}
};
var fetchNext = nextMarker => {
query.marker = nextMarker; // 设置marker,以便获取后面的数据
client.getDatapoints([query,]) // 获取数据
.then(deealWithResponse) // 设置处理结果的callback
.catch(dealWithError); // 设置处理error的callback
};
var deealWithResponse = response => { // 处理结果
console.log(JSON.stringify(response.body)) // 打印结果
if (response.body.results[0].truncated) { // 后面还有数据
fetchNext(response.body.results[0].nextMarker); // 获取下一页
}
}
var dealWithError = error => console.error(error); // 处理error
client.getDatapoints([query,]) // 获取数据
.then(deealWithResponse) // 设置处理结果的callback
.catch(dealWithError); // 设置处理error的callback
SQL查询接口
NodeSDK在0.3.1版本中支持了SQL查询接口,支持标准的ANSI SQL语义。
基本流程
- 创建TsdbDataClient。
- 执行getRowsWithSql(sql)方法
如下代码可以使用SQL查询数据点:
var sql = 'select * from cpu_idle';
client.getRowsWithSql(sql)
.then(function (response) {
console.log(response.body);
});