VictoriaMetrics 存储数据的数据结构主要由以下几个方面组成:
Metric 标识符(Metric Identifier):Metric 标识符是一个唯一标识符,用于标识不同的指标。它由一个或多个标签(labels)组合而成。标签可以表示指标的名称、数据源、位置或其他与指标相关的属性。Metric 标识符的组成方式可以根据实际需求进行定义。
时间序列数据(Time Series Data):VictoriaMetrics 存储时间序列数据,其中每个时间序列由 Metric 标识符和与之关联的时间戳(timestamp)- 值(value)对组成。时间序列数据可以是按时间顺序排列的,也可以是无序的。
数据索引(Indexing):为了提高查询速度,VictoriaMetrics 使用数据索引来跟踪存储在磁盘上的时间序列数据。索引包括 Metric 标识符和相应时间序列数据的位置信息。索引可以根据标识符的哈希值来组织,以便快速查找特定标识符对应的数据。
数据块(Data Blocks):为了对数据进行管理和优化存储,VictoriaMetrics 将时间序列数据划分为多个数据块。每个数据块通常包含一组具有相同标识符的时间序列数据。数据块可以根据时间范围进行划分,比如每个数据块表示一个小时、一天或其他时间段的数据。这种划分方式有助于快速定位和检索特定时间范围内的数据。
数据压缩(Data Compression):为了减少存储空间占用和提高读写性能,VictoriaMetrics 使用数据压缩算法对时间序列数据进行压缩。压缩算法可以通过丢弃冗余数据或使用特定的编码方式来降低数据存储量。数据在压缩和解压缩过程中仍然保持其原始精度。
使用victoriametrics的API查询一段时间内的数据并按指定的列进行排序:
curl http://<victoriametrics_host>:<victoriametrics_port>/api/v1/query?query=<query>&sort=<sort_column>&start=<start_time>&end=<end_time>
其中,
要查询 foo_metric 指标在过去一小时内的数据,并按照 value 列进行降序排序
要按照某个列进行排序,该列必须在查询结果中出现,并且需要在排序字段后加上 asc(升序)或 desc(降序)关键字
curl http://<victoriametrics_host>:<victoriametrics_port>/api/v1/query?query=foo_metric&sort=value desc&start=1h&end=now
使用VictoriaMetrics API查询所有指标:
curl http://vm-qa.lotuscars.com.cn/metrics
查询所有指标
curl http://vm-qa.lotuscars.com.cn/select/0/prometheus/api/v1//label/__name__/values
查询特定标签的值
curl http://vm-qa.lotuscars.com.cn//select/0/prometheus/api/v1/label/job/values
查询指标中的所有标签
curl http://vm-qa.lotuscars.com.cn/select/0/prometheus/api/v1/series?match[]=system_cpu
查询指标中的实际数据值
curl http://vm-qa.lotuscars.com.cn//select/0/prometheus/api/v1/query -d 'query=system_cpu'
查询所有标签名称
curl http://vm-qa.lotuscars.com.cn//select/0/prometheus/api/v1/labels
查询特定指标的特定标签的所有值
curl http://vm-qa.lotuscars.com.cn/select/0/prometheus/api/v1/query -d 'query=system_cpu{job="LOTUS-660_admc"}'
查询范围
curl http://vm-qa.lotuscars.com.cn/select/0/prometheus/api/v1/query_range -d 'query=sum(increase(system_cpu{job="LOTUS-854_admc"}[5m]))' -d 'start=-1d' -d 'step=1h'
查询95分位值
curl http://vm-qa.lotuscars.com.cn/select/0/prometheus/api/v1/query_range -d 'query=quantile(0.95, system_cpu{job="LOTUS-660_admc", index="10"})' -d 'start=-1d' -d 'step=1h'