Graylog: 问题原因

本文档属于数据映射问题指南的一部分。您可以在此处查看完整指南:如何解决 Graylog 索引数据映射问题

👋 欢迎查阅 Stackhero 文档

Stackhero 提供全托管的 Graylog cloud 解决方案,专为高效与简便而设计。您可以:

  • 依赖于服务内置的无限制、专用 SMTP 邮件服务器
  • 只需一键即可轻松完成更新,无需手动操作。
  • 使用由HTTPS保护的自定义域名(例如 https://logs.your-company.com),为您的团队提供安全、直接的访问。
  • 专属私有基础设施上体验卓越的性能安全性,无共享资源,无干扰邻居。

专注于您的数据,而非工具本身:只需几分钟,即可开始使用 Stackhero 的 Graylog cloud hosting 解决方案。

该问题源于 OpenSearch 的动态映射(dynamic mapping)功能。动态映射会根据写入索引的第一个文档自动确定每个字段的数据类型。一旦数据类型被设定,就会被“锁定”,后续文档如果该字段的数据类型不一致,将被拒绝写入,进而触发 mapper parsing exception。

当新索引创建时,第一个文档会定义索引的映射。例如,如果文档中的 "level" 字段值为 3(数值类型),OpenSearch 会将 "level" 字段的数据类型设为 "long"(数值类型)。如果后续发送到 Graylog 的文档中,"level" 字段的值为 "error"(字符串类型),由于数据类型与最初设定的不符,该文档会被拒绝写入,并触发 mapper_parsing_exception,错误原因为 failed to parse field [level] of type [long] in document with id 'xxx'.

如果同一字段在不同文档中数据类型不一致,任何字段都可能出现此问题。