LogQL 确认
{app="x"} | json | level="error" 与 {app="x"} |= "error" | json | level="error" 哪个更快?为什么?
- 前者——先解析才能保证准确性
- 一样快——优化器会自动调整顺序
- 后者——先用低成本的字符串匹配缩小范围,减少需要解析的日志行
- 前者——没有正则表达式,因此不需要过滤
把 status 提升为 Loki 标签会怎样?
- 按该值过滤的查询一定会变快
- 流的数量会随取值数成倍增加,查询可能变慢
- 相同取值会集中存放,从而减少存储空间
- 与将它留在日志正文中基本没有区别
解析生成的字段(| json 之后的字段)有什么特点?
- 与标签一样会建立索引
- 不会建立索引,需要扫描已读取的日志行
- 查询结束后会作为标签保存
- 会随数据块一起持久保存
哪种方式比 |~ "error|warn" 成本更低?
| regexp| pattern- 拆分查询,使用
|= "error"等子字符串过滤 - 无论采用哪种方式,成本都相同
查询很慢时,最有效的措施是什么?
- 缩短时间范围,或增加一个标签条件来缩小查询范围
- 增加查询器数量以提高并行度
- 进一步优化正则表达式
- 关闭数据块压缩,省去解压成本