日志服务 使用定时 SQL 解决检索分析超时

1. 如果是由于查询时间范围过长,导致单次查询的数据量过大,推荐你使用定时 SQL 分析,将该查询拆分成多个小范围查询,然后再汇总结果。2. 如果你的查询结果都是数值类型,也可通过定时SQL分析,将 日志转为指标 Metric,再使用 PromQL 对指标计算分析,其查询性能比日志要高,可有效解决日志查询超时的问题。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

一、背景

检索分析日志时提示查询超时的处理方法:

这篇说说将查询拆分成多个小范围查询,然后再汇总结果的详细操作。

二、思路:拆分查询时间范围

通过定时 SQL,可将在日志主题 A 一个长时间范围查询拆成多个短时间范围的查询:例如查询1天的数据,可以拆成12个2小时的查询,并将查询结果保存至新的日志主题B,你可在日志主题 B 中查看查询结果,或者在日志主题 B 中继续做检索分析,该方案已经在生产中得到应用,可有效解决检索分析超时问题。

三、案例:

1. 假定用户在源日志主题:cls_service_log,查询数据范围2023-12-13 12:00:00 – 2023-12-13 12:15:00,查询超时,语句如下:

select sum(etl_input_line) as input_lines ,sum(etl_failure_line) as failed_lines , etl_task_id group by etl_task_id

2. 使用定时 SQL 分析预计算源日志数据,参考 新建定时 SQL 任务。

定时 SQL 分析的配置如下:

·源日志主题:配置为需要拆分查询的日志主题,示例中为 cls_service_log。

·写入目标:选择日志主题,示例中为 sql_result。

·调度范围:2023-12-13 12:05:00 – 2023-12-13 12:15:00(实际查询的是12:00:00 -12:15:00的数据,你可在调度详情中查看 SQL 时间窗口,SQL 时间窗口是查询的范围)

·调度周期:5分种

·SQL 时间窗口:@m-5m,@m

·SQL 语句(CQL):

*|select sum(etl_input_line) as input_lines ,sum(etl_failure_line) as failed_lines , etl_task_id group by etl_task_id

注意:说明:

注意:示例中的定时 SQL 分析使用的语句和检索分析的一样,但在某些业务场景下,例如有 Distinct、Avg 、TOP N 计算时,需要你根据业务诉求调整 SQL 语句。

可以在定时 SQL 分析的调度详情中看到,将原来的1个15分钟范围的查询,拆分成了3个5分钟范围的查询。三个查询的 SQL 时间窗口加起来刚好是原来的时间范围12:00-12:15。

3. 打开目标主题 sql_result 查看数据:

可以看到定时 SQL 分析处理的数据如下。由于 input_lines 和 failed_lines 在定时 SQL 中,分三次(每次计算5分钟的 sum 值)后写入。因此我们需要将结果数据再做一次 sum,就可以得到原始业务场景中15分钟的 input_lines 和 failed_lines 的 sum 值。

4. 在目标日志主题中检索

在目标日志主题 sql_result 中执行 SQL 语句:

select sum(input_lines) as input_lines, sum(failed_lines) as failed_lines,etl_task_id group by etl_task_id

得到如下的结果,和在源日志主题:cls_service_log 直接检索分析的结果一致(没有超时的情况下)。

四、结论

当你的查询超时,你可通过定时 SQL,对源日志数据预计算(拆分查询范围)之后,然后在目标日志主题中进行检索,或者配置仪表盘、告警,可有效提升对日志数据的计算分析能力。

赞 (0)
上一篇 5天前
下一篇 5天前