本文介绍提高日志检索分析速度的方法。
增加 Shard 数量可以增强日志服务的读写能力,但只对新写入的数据生效。Shard 表示计算资源,Shard 越多,计算越快。您可以通过分裂 Shard 的方式,适当增加 Shard 数量。具体操作,请参考分裂分区。
说明
增加 Shard 数量会产生更多费用,请按需增加。关于 Shard 的计费说明,请参考计费项。
当检索结果不精确时,可以尝试重复执行多次检索操作。每次检索时,日志服务底层加速机制会基于现有结果进行检索,因此多次重复检索可以提升检索结果的精确性。更多信息,请参考提示“查询结果不精确”,如何解决?。
检索时间较长的语句具备如下特点。
您可以通过如下方法优化检索分析语句。
去除不必要的检索条件
例如使用多条件检索时,如果满足条件 A 的日志一定满足条件 B,则条件 B 这个检索条件可以去掉。示例如下:
检索语句(速度快)
log_msg: "INFO| write logs sucessful"
检索语句(速度慢)
log_msg: "INFO| write logs sucessful" AND log_level:INFO
合并相同 Key 范围检索条件。
使用范围检索时,如果需要限制检索的起止范围,使用双范围操作符替换单范围操作符。示例如下:
检索语句(速度快)
log_status: [1000 TO 2000}
检索语句(速度慢)
log_status: >= 1000 AND log_status: < 2000
将命中率高的筛选条件放到 SQL 语句中。
在检索和分析结合使用的场景,可将命中率高的条件置于 SQL 部分,以此提升检索速率。例如下述示例中,满足 log_level:INFO
的日志数与总日志数的比例值超过 50%,则将此条件放到 SQL 语句进行筛选,速度更快。
检索分析语句(速度快)
* | select count(*) as cnt where log_level = 'INFO'
检索分析语句(速度慢)
log_level:INFO | select count(*) as cnt
在 SQL 分析语句中指定需要获取的列,避免全列读取。
如果需要获取所有列,请使用检索语法。示例如下:
检索分析语句(速度快)
* | select a, b, c
检索分析语句(速度慢)
* | select *