使用Logstash解析Cisco F7 NetFlow时ES缺失OUT_BYTES字段求助
解决Logstash解析Cisco F7 NetFlow数据缺失OUT_BYTES字段的问题
我来帮你梳理下这个问题的根源和解决办法:
问题根源
首先要明确:NetFlow Version 5的标准字段定义里,根本没有out_bytes这个字段,它只包含in_bytes(记录流量进入采样接口的字节数)。你看到其他用户提到的out_bytes,基本都是使用了支持扩展字段的NetFlow版本——比如NetFlow Version 9或者IPFIX,这两个版本采用模板化结构,支持自定义/扩展流量字段,才能输出out_bytes(出接口的字节数)。
具体解决步骤
1. 修改Cisco F7的NetFlow配置,升级到v9版本
登录你的Cisco F7设备,调整NetFlow输出版本为v9(这是最根本的解决办法):
# 进入全局配置模式 configure terminal # 定位到配置了NetFlow采样的接口(根据你的实际接口调整) interface GigabitEthernetX/X # 将NetFlow输出版本改为v9 ip flow-export version 9 # 确保流量导出的目标地址和端口与Logstash监听一致 ip flow-export destination 120.127.XXX.XX 5556 # 保存配置 write memory
2. 调整Logstash的NetFlow Codec配置
Logstash的netflow codec默认支持v5和v9,但为了确保正确解析扩展字段,可以明确配置版本并开启自定义字段解析:
input{ udp{ host => "120.127.XXX.XX" port => 5556 codec => netflow { versions => [5, 9] # 同时兼容v5和v9,方便过渡 include_custom_fields => true # 开启自定义扩展字段解析 } } } output{ elasticsearch { hosts => ["120.127.XXX.XX:9200"] index => "netflow-%{year}-%{month}-%{day}" } stdout{codec=> rubydebug} }
3. 验证结果
重启Logstash服务后,查看stdout的rubydebug输出,确认netflow.out_bytes字段是否出现。如果设备配置正确,NetFlow v9会自动携带出接口字节数的字段,Logstash解析后就能同步到Elasticsearch中。
补充说明
如果因特殊原因无法升级NetFlow版本,只能通过input_snmp和output_snmp字段判断流量方向,但无法直接获取out_bytes的准确值——毕竟v5本身不支持这个字段,所以升级到v9是最优解。
内容的提问来源于stack exchange,提问作者張皓翔
相关产品推荐
相关产品推荐

