OpenTSDB Code Reading: 4. Query Command

http-api: api/query
code: class net.opentsdb.tsd.QueryRpc
document: HTTP API, Query

查询DEMO

1
2
3
4
5
6
7
/api/query?start=2018/03/27-16:30:02&m=sum:proc.net.bytes

/api/query?start=2018/03/27-16:20:02&m=sum:proc.net.bytes{direction=in}

/api/query?start=2018/03/27-16:20:02&m=none:1m-avg-none:proc.net.bytes{direction=in}

/api/query?start=2018/03/27-16:30:02&tsuid=sum:00015D00000100000100000A00007F00000B000081,00015D00000100000100000A00007F00000B000080

解析请求

解析请求参数,构造、填充到 net.opentsdb.core.TSQuery 对象中。
其中Metric & TSUID参数的核心解析代码位于:

1
2
net.opentsdb.tsd.QueryRpc::parseMTypeSubQuery
net.opentsdb.tsd.QueryRpc::parseTsuidTypeSubQuery

涉及的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 对应额一次 http/telnet 请求
net.opentsdb.core.TSQuery

// 对应一次请求中的一个 query
net.opentsdb.core.TSSubQuery

// A query to retrieve data from the TSDB.
// interface
net.opentsdb.core.Query

// Non-synchronized implementation of interface Query.
// 与 TSSubQuery 一一对应
net.opentsdb.core.TsdbQuery

//
net.opentsdb.query.filter.TagVFilter

每个query真正执行入口位于:

1
net.opentsdb.core.TsdbQuery::runAsync()

OpenTSDB 通过 scanner 过滤 time-range, metric, tagKV 筛选符合要求的数据,然后在本地再进行 aggregate, downsampling。