如何解决LogQL中的SampleExtraction Error?查询分组后字段最大值
解决LogQL查询最大响应时间的SampleExtractionErr错误
我们已统计出响应时间大于3000ms的请求计数,示例如下:
| Request | Count |
|---|---|
| Req1 | 5 |
| Req2 | 3 |
现在需要找出这些请求中的最大响应时间,尝试了以下LogQL查询语句:
max_over_time({application="xxx",namespace="xxx"} | json | message_app="xxxxx" | message_env="xxx" | unwrap message_duration | message_duration > 3000ms [48h]) by (message_path)
但触发如下错误:
查询错误
管道错误:针对序列 '{error="SampleExtractionErr", application="xxx", level="xxx", message_app="xxx", message_duration="6.882514ms", message_env="xx", message_path="/xx/xx/xx/xx/xx/xx/test1.html?RN=24.0.0_b0017", namespace="xxx", origin="xxxx"}' 出现'SampleExtractionErr'。请使用标签过滤器主动跳过此类错误(例如 | error!="SampleExtractionErr")。若要跳过所有潜在错误,可匹配空错误(例如 error="")。标签过滤器也可在unwrap之后指定(例如 | unwrap latency | error="")
修复方案
错误原因是部分日志的message_duration字段无法被正确解析为数值样本,导致解析失败。只需在查询中添加错误过滤条件即可解决,同时建议调整过滤条件顺序以提升查询效率:
方案1:先过滤响应时间,再解析并跳过错误
max_over_time({application="xxx",namespace="xxx"} | json | message_app="xxxxx" | message_env="xxx" | message_duration > 3000ms | unwrap message_duration | error="" [48h]) by (message_path)
方案2:解析后跳过指定错误,再过滤响应时间
max_over_time({application="xxx",namespace="xxx"} | json | message_app="xxxxx" | message_env="xxx" | unwrap message_duration | error!="SampleExtractionErr" | message_duration > 3000ms [48h]) by (message_path)
说明
error="":跳过所有解析失败的日志条目error!="SampleExtractionErr":仅跳过触发SampleExtractionErr的条目- 将
message_duration > 3000ms放在unwrap前,可提前过滤掉不需要的日志,减少解析压力
内容的提问来源于stack exchange,提问作者ShraddhaJ
相关产品推荐
相关产品推荐

