Skip to content

时序数据转时序数据介绍

背景

对象存储OSS是阿里云提供的云存储服务,能够以低成本为用户提供高可靠性的海量数据存储服务。作为基础服务,用户需要时刻关注OSS的使用状况,检测异常状态,从而及时作出响应。 阿里云日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。

用户在访问对象存储 OSS 的过程中,会产生大量的访问日志。SLS允许一键接入OSS 访问日志,方便用户完成操作审计、访问统计、异常事件回溯和问题定位等工作。

以 bucket、method 分组计算小时级流量特征为例:

* | select (__time__ - __time__ % 3600) as dt, bucket, http_method, sum(request_length)/1024.0/1024.0 as request_MB, sum(response_body_length)/1024.0/1024.0 as response_MB, avg(response_time) as avg_latency group by dt, bucket, http_method order by dt asc limit 10000

随着查询时间范围增加,计算引擎需要扫描更多的数据量做计算,增加了资源开销与分析延时。

数据查询范围扫描日志条数计算耗时
24 hours5,153,4261,767ms
30 days35,754,3844,636ms

问题与解决方法

问题一 : 随着oss访问日志存储在sls 中时间越来越长,访问日志逐渐从温数据编程冷数据,这带来一笔不小的存储开销 . 以 1000 QPS 的请求量计算,每条日志 1500 Bytes,一个月累计后达到 3.8 TB . 问题二 : 随着时间推移,如果每次对全量数据进行及时分析,计算成本是巨大的 ,计算延时对增加也影响体验 . 为了达到降低存储成本, 加快数据分析的体验可以通过将数据聚合后存储到新的日志库,减少日志总量 . 因为对于历史数据而言, 聚合分析后的数据量更少,而且有更高的分析价值 .

目标

源时序库log2metric中有多个metric 指标列 , 包括http_status,request_count, request_size, response_size以及response_time,从源时序库中筛选出 bucket 的值等于 ‘bucket00788’ 的响应时间 metric 数据,并导入到 metric2metric 时序库中

原始日志

源时序库

目标日志

目标时序库

SQL

筛选出 bucket 的值等于 ‘bucket00788’ 的响应时间 metric 数据

sql

* | select promql_query_range('response_time{bucket="bucket00788"}') from metrics limit 1000

计算配置

定时SQL任务链接 点击修改配置进入配置页面

image-60.png

配置项描述
写入模式当源为日志库时,可以选择日志库导入日志库以及日志库导入时序库,这里选择时序库
SQL 代码筛选出 bucket 的值等于 ‘bucket00788’ 的响应时间 metric 数据
sql

* | select promql_query_range('response_time{bucket="bucket00788"}') from metrics limit 1000

结果指标名

时序库导入时序库时,结果指标名建议单指标是填写,多指标会将全部重命名

哈希列

如果时序库中同一label的数据写入到固定的shard中,可以增强局部性,提升查询效率。因此可以选择常用的过滤标签,作为哈希列,这里哈希列选择bucket。

调度配置

picture 1

配置项描述
调度间隔固定间隔 5 分钟执行一次 SQL
调度时间范围从指定时间开始的数据会被执行 SQL
SQL 时间窗口整点 5 分钟,表示只分析这 5 分钟内的数据 (@m-5m ~ @m)
SQL 超时最长时间 600 秒或最大次数 20 次

注意:

  1. 设置延迟执行参数,上游 Logstore 的数据到来可能延迟,建议设置大一些的值做等待来保证计算数据的完整性。
  2. SQL 运行超过指定次数或指定时间后,这一次的 SQL 实例会失败并继续下一个实例的调度

更多关于创建定时SQL任务时计算配置和调度配置的信息, 请参考官方文档

使用sdk 创建定时SQL任务

如果您需要使用SDK创建定时SQL任务,可以参考官方文档: java sdk 创建定时SQL任务

任务管理

任务管理界面 在SLS控制台可以查看之前创建的ScheduledSQL作业。 image-51.png 在作业管理页面内,可以查看到每一次执行的实例列表。 image-61.png 每个实例信息中有 SQL 查询区间,如果任务失败(权限、SQL 语法等原因)或 SQL 处理行数指标为 0(数据迟到或确实没有数据),可以对指定实例做重试运行

效果

查询bucket的平均响应时间

avg(response_time) by (bucket)

image-59.png