You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logstash无法处理NaN值:如何启用ALLOW_NON_NUMERIC_NUMBERS?

Logstash处理JSON中NaN值的配置方案

要解决Logstash无法解析含NaN值JSON的问题,核心是在JSON编解码器中启用ALLOW_NON_NUMERIC_NUMBERS特性,具体配置修改如下:

1. 修改Kafka输入的JSON编解码器配置

将原配置中简单的codec => json替换为带参数的编解码器块,显式开启非标准数值支持:

input {
  kafka {
    bootstrap_servers => "MY_SERVER"
    topics => [
        MY_SOURCE_1,
        MY_SOURCE_2
    ]
    codec => json {
      allow_non_numeric_numbers => true
    }
    decorate_events=> true
  }
}

2. 补充Elasticsearch写入兼容处理

注意:Elasticsearch默认不支持将NaN作为字段值存储,即使Logstash解析成功,写入ES时仍可能报错。建议在filter阶段将NaN替换为null或业务允许的默认值,示例如下:

方法一:使用mutate+gsub(针对字符串形式的NaN)

如果解析后NaN以字符串形式存在:

filter {
  mutate {
    gsub => [
      "field_with_nan", "NaN", "null"
    ]
  }
  mutate {
    convert => { "field_with_nan" => "float" }
  }
}

方法二:使用Ruby filter(针对数值类型的NaN)

如果解析后NaN是数值类型:

filter {
  ruby {
    code => "
      event.to_hash.each do |k, v|
        if v.is_a?(Float) && (v.nan? || v.infinite?)
          event.set(k, nil)
        end
      end
    "
  }
}

原配置其他部分保持不变

filter和output模块可保留原有配置,无需额外修改。

内容的提问来源于stack exchange,提问作者Bleach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:47:05