Winlogbeat decode_json_fields无法将winlog字段迁移至根字段
Winlogbeat winlog字段上移根节点失效排查
失效根本原因
decode_json_fields处理器的设计用途是解析值为JSON格式字符串的字段,将其转换为结构化对象,但Winlogbeat采集生成的winlog字段本身就是原生结构化对象,并非JSON编码的字符串,因此无论将该处理器配置在全局级别还是模块内部,都无法识别处理目标,自然不会产生任何效果。
正确实现方案
要将winlog下的所有子字段迁移到事件根节点,需要使用script处理器直接操作事件对象完成字段迁移,配置时注意避免覆盖Winlogbeat自动生成的ECS标准字段,配置示例如下:
processors: - script: lang: painless source: | if (ctx.containsKey('winlog')) { // 遍历winlog字段下的所有键值对 for (def item : ctx.winlog.entrySet()) { def fieldName = item.getKey(); // 根节点无同名字段时才写入,避免覆盖默认生成的ECS合规字段 if (!ctx.containsKey(fieldName)) { ctx[fieldName] = item.getValue(); } } // 迁移完成后删除原嵌套winlog字段,如需保留原字段可删除下行 ctx.remove('winlog'); } winlogbeat.event_logs: - name: Security
配置校验说明
- 配置写入完成后,可执行
winlogbeat test config -c winlogbeat.yml命令校验配置合法性,返回Config OK即可正常启动服务 - 该配置生效后,原
winlog下的channel、record_id、provider_guid、event_data、computer_name等字段会直接出现在事件根节点,无需额外从嵌套字段提取,输出结构与预期示例一致 - 若需要调整字段覆盖逻辑,可修改脚本中判断同名字段的判断规则,按需覆盖或保留原有字段即可
内容的提问来源于stack exchange,提问作者IsaacK
相关产品推荐
相关产品推荐

