Logstash translate过滤器被忽略?端口转应用名配置不生效
Logstash translate 过滤器失效问题排查与修复
具体原因
- 未开启
override参数导致目标字段被跳过写入
你先通过mutate的add_field创建了[source][application]字段并赋值,而Logstash translate过滤器的override参数默认值为false,即目标字段已存在时,过滤器会直接跳过所有写入逻辑,既不会执行字典映射结果的写入,也不会执行兜底值的赋值,表现就是translate完全被忽略,最终保留mutate写入的原始端口值。 - 端口字段类型不匹配的潜在隐患
如果[source][port]是输入源生成的数字类型(如Netflow、防火墙流量采集的端口默认是integer/long),而你字典中的key都是字符串格式,默认情况下translate会严格匹配值的类型,数字80和字符串"80"无法匹配,哪怕开启override也会全部走__NO_MATCH兜底。 - 前置mutate配置冗余
你添加的mutateadd_field属于多余操作,translate过滤器会自动创建destination指定的目标字段,无需提前赋值。
修正后可用配置
filter { # 推荐添加:统一端口字段为字符串类型,彻底规避类型不匹配问题 mutate { convert => { "[source][port]" => "string" } } translate { field => "[source][port]" destination => "[source][application]" dictionary => { "80" => "HTTP" "443" => "SSL" "5432" => "Postgresql" } fallback => "__NO_MATCH" override => true # 强制覆盖已有目标字段,解决默认跳过写入的问题 } }
补充说明
如果你的端口字段本身就是字符串类型,可以直接去掉上述配置里的mutate convert模块,仅给translate添加override => true即可解决核心失效问题。
内容的提问来源于stack exchange,提问作者EviSvil
相关产品推荐
相关产品推荐

