OpenSearch 2.1.0 Rollup Job因max指标计算失败问题求助
OpenSearch 2.1.0 Rollup Job失败:无法解析'-Infinity'为float类型
问题原因
你的Rollup Job计算Length字段的max指标时,某个分组(由Timestamp的1d窗口+Type字段共同确定)内没有有效的Length数值(比如该分组下所有文档的Length都是null),导致max计算结果为-Infinity。而目标索引中Length.max字段的映射类型是float,OpenSearch在尝试写入该值时触发解析错误——虽然IEEE 754标准的float支持无穷大值,但OpenSearch 2.1.0的Rollup插件在处理无有效数据的分组时,会将-Infinity以字符串形式输出,从而无法被float类型字段解析。
你之前的Rollup Job正常,是因为那些任务的所有分组中都存在有效数值,max计算不会返回-Infinity。
解决方案
方案1:为Rollup指标添加缺失值默认值
修改Rollup Job的metrics配置,为max和avg指标指定missing参数,当字段缺失时用合法的float值(比如0)替代,避免生成-Infinity。
修改后的Rollup Job配置如下:
{ "rollup": { "source_index": "source_index", "target_index": "rollup-index", "schedule": { "interval": { "period": 1, "unit": "Minutes" } }, "description": "Test Rollup job", "enabled": true, "page_size": 200, "delay": 0, "continuous": true, "dimensions": [ { "date_histogram": { "source_field": "Timestamp", "fixed_interval": "1d" } }, {"terms": {"source_field": "Type"}} ], "metrics": [ { "source_field": "Count", "metrics": [{"sum":{}}] }, { "source_field": "Length", "metrics": [ {"max": {"missing": 0}}, {"avg": {"missing": 0}} ] }, { "source_field": "Requests", "metrics": [ {"max": {"missing": 0}}, {"avg": {"missing": 0}} ] } ] } }
方案2:预处理源数据
检查源数据中对应分组的Length字段,确保每个分组内至少存在一个有效的数值。可以通过数据清洗补全缺失的Length值,或者过滤掉无有效Length的文档。
方案3:手动指定目标索引映射
如果需要保留无穷大值的场景,可以先手动创建目标索引的映射,确保Length.max字段支持无穷大的float值。不过此方法仍可能受限于Rollup插件的处理逻辑,优先推荐方案1。
手动创建目标索引映射示例:
PUT /rollup-index { "mappings": { "properties": { "Length.max": { "type": "float" }, "Length.avg": { "type": "float" }, "Timestamp": { "type": "date" }, "Type": { "type": "keyword" } } } }
验证步骤
- 禁用并删除原Rollup Job:
curl -X POST "http://your-opensearch-host:9200/_plugins/_rollup/job/rollup-test/_disable" curl -X DELETE "http://your-opensearch-host:9200/_plugins/_rollup/job/rollup-test"
- 使用修改后的配置重新创建并启用Job:
curl -X PUT "http://your-opensearch-host:9200/_plugins/_rollup/job/rollup-test" -H "Content-Type: application/json" -d @modified-rollup-config.json curl -X POST "http://your-opensearch-host:9200/_plugins/_rollup/job/rollup-test/_enable"
- 查看Job状态:
curl -X GET "http://your-opensearch-host:9200/_plugins/_rollup/job/rollup-test/_status"
内容的提问来源于stack exchange,提问作者Tiz
相关产品推荐
相关产品推荐

