Logstash 5.2:mutate过滤器复制字段转小写失效求助
解决Logstash 5.2 Mutate过滤器复制字段转小写不生效的问题
看你的描述,应该是想复制指定字段并将其转为小写,但目前给出的配置片段里只做了字段重命名操作,完全没涉及到字段复制+小写转换的逻辑,这就是为什么数据导入Elasticsearch后,目标字段没变成小写的原因。我来给你梳理下解决方案:
问题核心
你的mutate过滤器里只有rename指令,没有对字段执行复制和小写转换的步骤,自然达不到预期效果。另外要注意:Logstash的mutate指令是按书写顺序依次执行的,顺序错了也会导致操作失效。
两种可行配置方案
方案1:保留原字段,复制后转小写再重命名
如果你需要保留原始字段的值,先复制到临时字段转小写,再重命名为最终字段名:
filter { mutate { # 1. 复制原字段到临时字段 copy => { "desc_ufe" => "state_temp" } # 2. 对临时字段执行小写转换 lowercase => [ "state_temp" ] # 3. 将临时字段重命名为最终字段名 rename => { "state_temp" => "state" } # 你的其他重命名操作 rename => {"desc_local" => "city" } rename => {"desc_bairro" => "neighborhood" } rename => {"desc_lograd" => "streetName" } rename => {"desc_cep" => "postalCode" } # 其他字段处理逻辑... } }
方案2:直接对重命名后的字段转小写
如果不需要保留原字段,可以先完成所有重命名,再对目标字段执行小写转换(注意lowercase要放在rename之后):
filter { mutate { # 1. 先完成所有字段重命名 rename => {"desc_ufe" => "state" } rename => {"desc_local" => "city" } rename => {"desc_bairro" => "neighborhood" } rename => {"desc_lograd" => "streetName" } rename => {"desc_cep" => "postalCode" } # 其他字段处理逻辑... # 2. 对需要转小写的字段执行转换(按需添加字段名) lowercase => [ "state", "city" ] } }
关键注意事项
- 一定要保证指令顺序正确:比如要操作重命名后的字段,
lowercase必须放在rename之后; - 字段名要完全匹配:
lowercase数组里的字段名要和重命名后的字段名完全一致(Logstash字段名区分大小写)。
你可以根据自己的需求选其中一种配置测试,应该就能解决字段未转小写的问题了。
内容的提问来源于stack exchange,提问作者Gabriel Pellegrini Maciel
相关产品推荐
相关产品推荐

