"reason"=>"mapper [message] cannot be changed from type [date] to [text]"问题

NOWYOUSEEME
云计算领域优质创作者
博客专家认证
2022-08-05 15:09:37

使用的环境:

  • elasticsearch 8.3.3
  • kibana 8.3.3
  • logstash 8.3.3

问题描述

我用logstash结构化一组日志信息时,它显示

[2022-08-05T14:42:04,829][WARN ][logstash.outputs.elasticsearch][main][210b40b160d8f8127448631ee76ce559a4f4b1f8760100d30e898a1cedf45979] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"vmkernel_log", :routing=>nil}, {"目标"=>"vmhba2:C0:T5:L0", "函数指令"=>"nmpPathClaimEnd:1206:", "时间戳"=>"2022-06-17T12:42:59.628Z", "log"=>{"file"=>{"path"=>"/var/log/vmkernel.log"}}, "@version"=>"1", "event"=>{"original"=>"2022-06-17T12:42:59.628Z cpu19:2179328)WARNING: NMP: nmpPathClaimEnd:1206: Device, seen through path vmhba2:C0:T5:L0 is not registered (no active paths)"}, "类型"=>"Device,", "方法"=>"NMP:", "CPU进程"=>"cpu19:2179328)WARNING:", "@timestamp"=>2022-08-05T06:42:04.616139Z, "message"=>["2022-06-17T12:42:59.628Z", "cpu19:2179328)WARNING:", "NMP:", "nmpPathClaimEnd:1206:", "Device,", "seen", "through", "path", "vmhba2:C0:T5:L0", "is", "not", "registered", "(no", "active", "paths)"], "host"=>{"name"=>"k8s-08"}, "type"=>"vmkernel"}], :response=>{"index"=>{"_index"=>"vmkernel_log", "_id"=>"QNW9bIIBMit-ig-KWax8", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"mapper [message] cannot be changed from type [date] to [text]"}}}}

elasticsearch中虽然创建了对应文档,但文档中没有事件。

但如果用标准输入的话,每次输入一条日志,却可以正常解析。

错误日志最后给出了报错原因:mapper [message] cannot be changed from type [date] to [text]

请问该如何修改不会让它报错?

 

...全文
2620 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

感觉是你的有些文档的 date 字段不是可以辨识的 date 字段,从而被解析为 text 类型。你如果输入一条日志,这个日志的格式可能是正确的,就没有问题,但是你不能保证所有的文档的格式都是一样的。这个你可以通过错误日志来进行判断。

NOWYOUSEEME 2022-08-07
  • 举报
回复
@Elastic中国官方社区 要分析的日志中的date字段的格式类似于:【2022-06-17T04:57:59.745Z】,elasticsearch不支持这种date格式的识别吗?想问下,关于es中识别date的格式该在官方文档中怎么查询?
  • 举报
回复
@NOWYOUSEEME 你可以自己在 date 的属性里进行定义。你可以参考文章 https://elasticstack.blog.csdn.net/article/details/99621105 里的这个部分 "DOB": { "type": "date", "format": "yyyy-MM-dd||epoch_millis" }
  • 举报
回复
@Elastic中国官方社区 你可以查看这个链接 https://discuss.elastic.co/t/date-field-mapping-error-with-type-date-to-long/270766/8 通常 Elasticsearch 可以自动识别字段的类型,但是它仅限于第一个文档,一旦确定下来,后面的格式应该和之前的一样,或者至少是和之前的匹配。你可以定义一个 index template, 或者直接在 mapping 中定义该字段的数值类型。

10,431

社区成员

发帖
与我相关
我的任务
社区描述
Elastic 中国社区
其他 企业社区
社区管理员
  • Elastic 中国社区官方博客
  • 今天吃饭用大碗
  • Skipper_x
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧