时序数据转时序数据介绍
背景
对象存储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 hours | 5,153,426 | 1,767ms |
30 days | 35,754,384 | 4,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 数据
* | select promql_query_range('response_time{bucket="bucket00788"}') from metrics limit 1000
计算配置
定时SQL任务链接 点击修改配置进入配置页面
配置项 | 描述 |
---|---|
写入模式 | 当源为日志库时,可以选择日志库导入日志库以及日志库导入时序库,这里选择时序库 |
SQL 代码 | 筛选出 bucket 的值等于 ‘bucket00788’ 的响应时间 metric 数据 |
* | select promql_query_range('response_time{bucket="bucket00788"}') from metrics limit 1000
结果指标名
时序库导入时序库时,结果指标名建议单指标是填写,多指标会将全部重命名
哈希列
如果时序库中同一label的数据写入到固定的shard中,可以增强局部性,提升查询效率。因此可以选择常用的过滤标签,作为哈希列,这里哈希列选择bucket。
调度配置
配置项 | 描述 |
---|---|
调度间隔 | 固定间隔 5 分钟执行一次 SQL |
调度时间范围 | 从指定时间开始的数据会被执行 SQL |
SQL 时间窗口 | 整点 5 分钟,表示只分析这 5 分钟内的数据 (@m-5m ~ @m) |
SQL 超时 | 最长时间 600 秒或最大次数 20 次 |
注意:
- 设置延迟执行参数,上游 Logstore 的数据到来可能延迟,建议设置大一些的值做等待来保证计算数据的完整性。
- SQL 运行超过指定次数或指定时间后,这一次的 SQL 实例会失败并继续下一个实例的调度
更多关于创建定时SQL任务时计算配置和调度配置的信息, 请参考官方文档
使用sdk 创建定时SQL任务
如果您需要使用SDK创建定时SQL任务,可以参考官方文档: java sdk 创建定时SQL任务
任务管理
任务管理界面 在SLS控制台可以查看之前创建的ScheduledSQL作业。 在作业管理页面内,可以查看到每一次执行的实例列表。 每个实例信息中有 SQL 查询区间,如果任务失败(权限、SQL 语法等原因)或 SQL 处理行数指标为 0(数据迟到或确实没有数据),可以对指定实例做重试运行
效果
查询bucket的平均响应时间
avg(response_time) by (bucket)