使用curl或Invoke-WebRequest向Elasticsearch导入文档失败
Elasticsearch批量导入数据报错:Error extracting routing: source didn't contain any routing fields
问题场景
向本地Elasticsearch集群导入sample-k8s-metrics.json文件数据,分别使用curl和PowerShell的Invoke-WebRequest执行批量导入操作,均返回相同错误。
使用的命令
curl命令
curl -s -H "Content-Type: application/json" \ -XPOST http://localhost:9200/sample-01/_bulk?pretty \ --data-binary @sample-k8s-metrics.json
PowerShell命令
Invoke-WebRequest -Uri "http://localhost:9200/sample-01/_bulk?pretty" -InFile "sample-k8s-metrics.json" -ContentType "application/json" -Method POST
错误响应详情
{ "create" : { "_index" : "sample-01", "_id" : null, "status" : 400, "error" : { "type" : "illegal_argument_exception", "reason" : "Error extracting routing: source didn't contain any routing fields" } } }
数据样例
{"create": {}} {"@timestamp":"2022-06-20T23:59:40Z","kubernetes":{"host":"gke-apps-0","node":"gke-apps-0-0","pod":"gke-apps-0-0-0","container":{"cpu":{"usage":{"nanocores":62251,"core":{"ns":12828317850},"node":{"pct":2.77905e-05},"limit":{"pct":2.77905e-05}}},"memory":{"available":{"bytes":335503688},"usage":{"bytes":61401416,"node":{"pct":0.01770037710617187},"limit":{"pct":9.923134671484496e-05}},"workingset":{"bytes":693043},"rss":{"bytes":129761},"pagefaults":411638,"majorpagefaults":0},"start_time":"2021-03-30T07:59:06Z","name":"container-name-44"},"namespace":"namespace26"}}
排查方向
检查索引路由配置:目标索引
sample-01可能设置了routing.required: true,强制所有文档必须携带路由字段。执行以下命令查看索引设置:curl -XGET http://localhost:9200/sample-01/_settings?pretty若确实开启强制路由,可选择:
- 修改索引设置,取消
routing.required限制; - 在批量操作的每条指令中添加路由参数,比如将
{"create": {}}改为{"create": {"_routing": "namespace26"}}(路由值可根据业务逻辑选取,如文档中的kubernetes.namespace字段)。
- 修改索引设置,取消
验证批量数据格式:Elasticsearch批量API要求严格的行分隔格式——每行一个操作指令、每行一个文档,不能存在空行或格式错误。确认
sample-k8s-metrics.json整个文件都符合该规范。核对版本兼容性:不同Elasticsearch版本对批量API的处理逻辑可能存在差异,确保使用的命令和数据格式与当前集群版本匹配。
尝试全局默认路由:若索引需要路由但无需为每条文档单独指定,可在创建索引时配置默认路由规则,或在批量请求URL中添加全局
routing参数(仅适用于所有文档共享同一路由的场景):curl -s -H "Content-Type: application/json" \ -XPOST "http://localhost:9200/sample-01/_bulk?pretty&routing=default-value" \ --data-binary @sample-k8s-metrics.json
内容的提问来源于stack exchange,提问作者Mightiev
相关产品推荐
相关产品推荐

