以下是使用示例数据集合的查询示例列表。我们将说明可能遇到的一些常见查询类型,以便了解查询系统的工作原理。示例集合中的每个时间序列都只存储一个数据点,并且UID已被截断为单个字节,以便于阅读。示例查询都是来自HTTP API的指标查询,并且仅显示m=组件。有关详细信息,请参阅/api/query。如果使用的是CLI工具,查询格式会略有不同,请阅读特定命令的文档。
时间序列 | 指标 | 标签 | TSUID |
---|---|---|---|
1 | sys.cpu.system | dc=dal host=web01 | 0102040101 |
2 | sys.cpu.system | dc=dal host=web02 | 0102040102 |
3 | sys.cpu.system | dc=dal host=web03 | 0102040103 |
4 | sys.cpu.system | host=web01 | 010101 |
5 | sys.cpu.system | host=web01 owner=jdoe | 0101010306 |
6 | sys.cpu.system | dc=lax host=web01 | 010102050101 |
7 | sys.cpu.system | dc=lax host=web02 | 010102050102 |
8 | sys.cpu.system | dc=dal host=web01 | 020202040101 |
9 | sys.cpu.system | dc=dal host=web02 | 020202040102 |
UIDS
Name | UID |
---|---|
Metrics | |
cpu.system | 01 |
cpu.user | 02 |
Tagks | |
host | 01 |
dc | 02 |
owner | 03 |
Tagvs | |
web01 | 01 |
web02 | 02 |
web03 | 03 |
dal | 04 |
lax | 05 |
jdoe | 06 |
警告:
这并不是设置指标和标签的最佳方式,而是为了说明查询系统的工作原理。特别是,TS#4和5,虽然是合法的时间序列,但可能会搞砸你的查询,除非你知道它们是如何工作的。一般来说,尽量为每个时间序列保留相同数量和类型的标签。
Under the hood
您可能想了解OpenTSDB如何在这里存储时间序列数据:存储。否则,请记住存储器中的每一行都有一个唯一的格式化的键:
<metricID> <normalized_timestamp> <tagkID1> <tagvID1> [... <tagkIDN> <tagvIDN>]
上面的数据表将被存储为
01 < TS > 0101
01 < TS > 01010306
01 < TS > 02040101
01 < TS > 02040102
01 < TS > 02040103
01 < TS > 02050101
01 < TS > 02050102
02 < TS > 02040101
02 < TS > 02040102
当你查询OpenTSDB时:
- 查询将被解析并进行验证,以确保格式正确,并且存在指标,标签名称和标签值。如果系统中不存在单个指标,标签名称或值,则会返回错误。
- 然后它为底层存储系统设置扫描程序。
- 如果查询没有任何标签或标签值,那么它将抓取任何匹配的数据行<metricID><timestamp>,因此如果您有特定度量标准的大量时间序列,则这可能是许多行。
- 如果查询确实定义了一个或多个标记,则它仍将扫描匹配的所有行<metricID><timestamp>,但也会执行正则表达式以仅返回包含所请求标记的行。
- 一旦所有数据都被返回,OpenTSDB将其组织成组,如果需要的话
- 如果要求下采样,则使用适当的聚合器将每个单独的时间序列下采样到更小的时间跨度中
- 然后使用特定的聚合函数聚合每组数据
- 如果rate检测到该标志,则会调整每个汇总以获得汇率。
- 结果返回给调用者
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/196403.html