Logz.io子聚合查询触发INVALID_QUERY错误求助
解决Logz.io按应用版本层级聚合错误日志的问题
问题背景
需要在Logz.io中按应用版本聚合错误日志,并在每个版本下进一步聚合错误信息,使用子聚合查询时收到INVALID_QUERY错误,但同级聚合可以正常返回结果。
核心原因
报错的关键原因是error_message字段类型问题:
- 如果
error_message是text类型,该字段会被分词处理,无法直接用于terms聚合(terms聚合需要精确匹配的字段值)。 - Logz.io默认会给
text类型字段生成对应的keyword子字段(格式为字段名.keyword),这类字段存储原始的精确值,适合做聚合操作。
修正后的查询
将子聚合中的error_message替换为error_message.keyword,修改后的curl命令如下:
curl -X POST https://api.logz.io/v1/search \ -H 'Content-Type: application/json' \ -H 'X-API-TOKEN: xxxxxxxxxx' \ -d '{ "query": { "bool": { "must": [ { "range": {"@timestamp": { "gte": "now-2w", "lte": "now"}} } ], "filter": [{"terms": {"log_level": ["ERROR","CRITICAL","FATAL"]}}] } }, "size": 0, "aggs": { "app_version_agg": { "terms": { "field": "app_version", "size": 1000 }, "aggs": { "error_message_agg": { "terms": { "field": "error_message.keyword", "size": 1000 } } } } } }'
额外检查项
如果修改后仍报错,可排查以下内容:
- 确认
app_version字段的类型:如果是text类型,同样需要替换为app_version.keyword - 检查API Token的权限是否足够执行聚合查询
- 确认
size参数未超过Logz.io的限制(当前设置的1000通常在允许范围内)
内容的提问来源于stack exchange,提问作者dina
相关产品推荐
相关产品推荐

