Graylog: 处理 "failed to parse field [XXXX] of type [YYYY]" 错误
本文件是入门指南指南的一部分。您可以在这里查看完整指南:如何开始使用 Graylog。
👋 欢迎阅读 Stackhero 文档!
Stackhero 提供现成的 Graylog 云 解决方案,具有众多优势,包括:
- 包含无限制和专用的 SMTP 电子邮件服务器。
- 只需点击即可轻松完成更新。
- 使用 HTTPS 保护的可定制域名(例如,https://logs.your-company.com)。
- 由专用私有 VM提供的最佳性能和强大安全性。
节省时间并简化您的生活:只需 5 分钟即可试用 Stackhero 的 Graylog 云托管 解决方案!
您可能会遇到如下错误:
org.opensearch.index.mapper.MapperParsingException: failed to parse field [time] of type [long] in document with id 'xxxx'
您可以在 Stackhero 控制台提供的日志中,或在 Graylog 管理后台 System > Overview > Indexer failures 查看此错误。
该错误表明某条日志的 time 字段值与预期类型不符(此处应为 "long" 类型的数值)。Graylog 利用 OpenSearch 的动态映射功能。当首次收到日志时,OpenSearch 会尝试自动推断字段类型。例如,如果日志中的 time 字段为数值 1234,OpenSearch 会将其定义为数值类型。如果后续日志的 time 字段为字符串 "abcd",OpenSearch 会因类型不符而拒绝该日志。
请注意,time 字段名仅为示例,实际可为任意字段名和类型。
要解决此问题,您需要重新定义 OpenSearch 期望的字段类型。更多信息请参考 Graylog 官方文档。
更新 OpenSearch 映射(mapping)
在操作前,请先在 Stackhero 控制台启用 OpenSearch 访问权限。进入您的 Graylog 服务,点击“Configure”按钮以激活 OpenSearch 访问。
请谨慎操作,错误的配置可能导致 OpenSearch 集群不可用,甚至造成数据丢失。如有疑问,请勿继续。
-
定义新的映射。本例中,我们将
time字段重新定义为 string 类型。可用类型请参考 OpenSearch 字段类型文档。 -
将以下内容保存为
graylog-custom-mapping.json文件:{ "template": "graylog_*", "mappings": { "message": { "properties": { "time": { "type": "string", "index": "not_analyzed" } } } } } -
使用以下 curl 命令提交该文件(请将
<XXXXXX>.stackhero-network.com替换为您的实例域名):curl -u 'admin' -X PUT -d @'graylog-custom-mapping.json' -H 'Content-Type: application/json' 'https://<XXXXXX>.stackhero-network.com/opensearch/_template/graylog-custom-mapping?pretty'您应收到如下响应:
{ "acknowledged": true } -
最后,通过以下命令验证映射是否已更新(如有需要请替换域名):
curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'