Splunk导入长JSON文件时末尾字段无法全部提取如何解决?
问题根因
你配置的TRUNCATE=0仅保证事件完整入库,Splunk默认对字段提取的扫描长度做了限制,是该问题的核心诱因:
- 搜索时自动JSON/KV字段提取的默认
MAX_EXTRACT_CHARS参数值为10240,仅扫描事件前10240个字符提取字段,超出范围的末尾字段不会被纳入自动提取列表 - 若你配置了索引时JSON提取(即
sourcetype配置了INDEXED_EXTRACTIONS=json),还会受到MAX_DOC_SIZE参数的默认值限制,默认值同样为10240,超出长度的JSON文档末尾字段不会在索引时完成提取
解决方案
根据你使用的提取模式选择对应配置即可,所有配置均需添加到对应sourcetype的props.conf中:
场景1:使用搜索时自动JSON提取(绝大多数用户的默认配置)
添加配置如下:
[你的sourcetype名称] # 设为0即取消字段提取的字符长度限制,也可根据单条事件最大长度设置足够大的数值 MAX_EXTRACT_CHARS = 0 # 可选:若JSON存在嵌套层级较深的场景,同步调整提取深度限制 MAX_DEPTH = 20
配置更新后重启Splunk服务,或在搜索页执行| extract reload=t可临时生效,后续搜索即可自动提取全量字段。
场景2:使用索引时JSON提取
添加配置如下:
[你的sourcetype名称] # 设为0即取消JSON文档索引提取的大小限制,也可设置为大于单条事件最大长度的数值 MAX_DOC_SIZE = 0 TRUNCATE = 0
注意该配置需要提前配置在索引节点/Heavy Forwarder节点,已经入库的历史数据不会重新提取字段,需重新导入数据后生效。
生效验证
执行搜索后检查Interesting Fields面板中对应末尾字段的匹配计数,若计数与事件总数一致则配置生效。
你之前选中事件字段添加到搜索可返回结果,是因为该操作是对事件原始文本做全文匹配,而非字段匹配,因此可以命中结果。
内容的提问来源于stack exchange,提问作者Rayne
相关产品推荐
相关产品推荐

