基本概念

数据模型

时间序列术语

术语描述
Namespace命名空间:对指标名进行分类
Metric Name指标名:类似关系型数据库中的表名
Tag标签(Key/Value):每个指标名下面可以加多个标签
Time Series时间线:由 Metric Name + Tags 组合成对应一条时间线
Field字段:一个指标下面可以有多个字段
Timestamp时间点:数据生成的时间点
Data Point数据点:一条时间线在某个时间点的数据点

时间序列标识

时间序列的特性可以简单用如图表述:

time series characteristic

每一个时间序列都由指标名标签的键值对以及字段来唯一标识。

  • 指标名:记录了时序对象的具体意义(例如:cpu.load,即监控对象为 CPU 的负载情况);
  • 标签:对时序对象的补充说明,应该使用可枚举的字符串进行标示(例如:host=1.1.1.1,idc=sh,即该机器的 ip 地址为 1.1.1.1,所在机房在 sh)。可以对这些标签来做过滤和聚合操作,比如查找单条 ip 地址的机器、查找多条 ip 地址的机器、前缀搜索 50 条 ip 地址的机器、搜索 sh 上产区的所有机器等;

如图所示:sh 机房中 IP 地址为 1.1.1.1 在 2019-01-01 10:00:00 时 CPU 的负载为 10.0,即某个对象在某个时刻发生了什么。

尽量不要使用不可枚举的字符串作为指标名或者标签,如 UUID、用户 ID 等。

字段类型

和别的时序数据库不同的是 LinDB 在提供多字段支持的同时,支持字段类型,以更好的处理时序场景下的分析计算以及自动的 Rollup 等。

LinDB 目前提供多种标准类型,这些类型可以通过 SDK 上报到后台服务中,所有原始数据在落盘时便会根据相应的字段类型进行聚合,具体类型如下:

数据聚合指某个时间窗口,如 5/10 秒、1 分钟内的值,如 1 分钟内的总和可以用 Sum。

Sum

Sum 是一个自动累计的字段,多个值在存储或查询时会根据时间区间进行自动汇总求和。

可以用 Sum 来记录某时间内的订单的个数、服务的错误数、流量等数据。

Min

Min 是一个自动求最小值的字段,多个值在存储时会根据时间区间写入最小的一个值,在降采样查询时也会如此。

可以用 Min 来记录某个设备某个时间内的最低温度。

Max

Max 是一个自动求最大值的字段,功能与 Min 类似。

可以用 Max 来记录某个设备某个时间内的最高温度。

Last

Last 是某个时间内最后一个值,一般表示最新值。

可以用 Last 来记录当前的内存用量、CPU使用率等。

First

First 是某个时间内第一个值。

Histogram

Histogram 是组成直方图数据的复合字段,在 SDK 上报时,对应的数据会被拆解为多个字段,记录到不同的 Bucket 中,以支持计算99线、95线等,同时 Histogram 也可以附加记录 Min/Max/Sum 等统计值。

可以用 Histogram 来记录某个服务在某个时间内处理请求的延时。

Histogram 作为复杂类型运行广泛,同时也内置了 Min/Max/Sum 等统计值,意味着存储计算 Histogram 需要更多的服务器资源。