简介
对数十亿时序的预测和异常检测 计算密集型。大多数现有系统都会运行预测和异常值 批处理作业(例如风险流水线、流量预测、 需求规划等)。这会严重限制您可以在线执行的分析类型,例如根据一组事件维度突然增加或减少的情况决定是否发出提醒。
Timeseries Insights API 的主要目标如下:
- 可扩展到数十亿个时间序列,这些时间序列是根据查询参数从原始事件及其属性动态构建的。
- 提供实时预测和异常值检测结果。也就是说, 检测所有时序的趋势和季节性变化 并判断切片是出现激增还是意外减少。
API 功能
- 管理数据集
- 将一个数据集编入索引并加载该数据集,该数据集由存储在 Cloud Storage允许以流式传输方式附加新事件。
- 卸载不再需要的数据集。
- 询问数据集的处理状态。
- 查询数据集
- 检索与给定属性值匹配的时间序列。时序 在指定时间范围内的预测。系统还会评估时间序列是否存在异常。
- 自动检测属性值组合中的异常值。
- 更新数据集
- 提取最近发生的新事件,并将其近乎实时(延迟几秒到几分钟)纳入索引。
灾难恢复
Timeseries Insights API 不用作 Cloud Storage 或返回原始流式更新。客户 负责分别存储和备份数据。
发生地区性中断后,服务会尽最大努力恢复。 元数据(有关数据集和运行状态的信息)和流式传输的用户 在服务中断开始 24 小时内更新的数据可能不会 文件。
在恢复期间,对数据集进行查询和流式更新可能不会 可用。
输入数据
通常,系统会在一段时间内收集数值和分类数据。对于 下图显示了应用的 CPU 使用率、内存用量和状态, 一段时间内每分钟在数据中心运行一个作业。 CPU 用量和内存用量是数值,状态是分类值。
事件
Timeseries Insights API 使用事件作为基本数据条目。每个事件都有一个 时间戳和维度集合,即键值对,其中键 是维度名称。这种简单的表示法使我们能够处理规模达到万亿级的数据。例如,系统会包含数据中心、用户、作业名称和任务编号,以便全面表示单个事件。上图显示 为单个作业记录一系列事件,以展示维度的子集。
{"name":"user","stringVal":"user_64194"},
{"name":"job","stringVal":"job_45835"},
{"name":"data_center","stringVal":"data_center_30389"},
{"name":"task_num","longVal":19},
{"name":"cpu","doubleVal":3840787.5207877564},
{"name":"ram","doubleVal":1067.01},
{"name":"state","stringVal":"idle"}
DataSet
DataSet 一系列事件查询是在同一数据集中执行。每个项目可以有多个数据集。
数据集是基于批量数据和流式数据构建的。批量数据构建读取 多个 Cloud Storage URI 作为数据源。批量构建完成后 可以使用流式数据更新数据集。针对历史数据使用批量构建 数据,系统可以避免冷启动问题。
数据集需要先构建或编入索引,然后才能查询或更新。创建数据集后,系统会开始编制索引,通常需要几分钟 所需时间,具体取决于数据量。更具体地说, 在初始索引编制期间会对数据源执行一次扫描。如果 Cloud Storage URI 在初始索引编制完成后会发生变化, 。使用流式更新来获取更多数据。流式传输更新 持续不断地编入索引。
时间序列和异常检测
对于 Timeseries Insights API,切片 是具有特定维度值组合的事件集合。周三 想要衡量一段时间内归入这些切片的事件。
对于给定的切片,事件会按每 用户指定的时间间隔(要检测的时序) 数据异常。上图显示了生成的不同切片选择 “user”“job”和“data_center”的不同组合维度。
如果指定某一切片的数值
与过去的值明显不同。通过
上图显示的是基于全球范围内测量的温度的时序
十年。假设我们想知道上个月
2015 年可谓一次异常。向系统发出的查询指定感兴趣的时间 detectionTime
为“2015/12/01”,granularity
为“1 个月”。通过
detectionTime
之前检索到的时序之前
训练期,然后是留出期。系统使用
训练期来训练模型,并使用留出期来验证
模型可以可靠地预测后续值。在本示例中,留出的
期限为 1 年。此图片显示了模型的实际数据和预测值,以及上下限。2015/12 的温度已标记为
异常值,因为实际值超出了预测范围。