2016-05-13 113 views
0

我有动力场,场格式看起来像logstash姓名字段动态

A-B-C::D_[randomNum] 

领域是动态的,因为randonNUM, 我想改变“ - ”到“_”和删除[ randomNUM] 和它的将是模样如下,

A_B_C::D 

是否有任何插件/策略来解决这个问题呢?

回答

0

你应该能够用mutate/gsub过滤器来实现这个

filter { 
    mutate { 
    gsub => [ 
     # replace random num suffix 
     "fieldname", "_\d+", "", 
     # replace all dashes with underscores 
     "fieldname", "-", "_" 
    ] 
    } 
} 

确保您的实际字段名称,以取代fieldname

UPDATE

考虑您的意见,事实证明它的字段名是动态的,而不是价值。出于这个原因,你不能使用上述解决办法,但下一个应该工作,用ruby filter即:

filter { 
    ruby { 
    code => " 
     newhash = {} 
     event.to_hash.each {|key, value| 
     if key =~ /^CISCO/ then 
      newkey = key.gsub(/_\d+/, '').gsub('-', '_') 
      newhash[newkey] = event[key] 
      event.remove(key) 
     end 
     } 
     newhash.each {|key,value| 
     event[key] = value 
     } 
    " 
    } 
} 

此过滤器运行后,您的活动将有场A_B_C::D代替原来的A-B-C::D_num

+0

喜瓦尔,谢谢你的回复!对不起,我在这个问题上没有更清楚。因为randomNum,我不怎么设置字段。我可以指定的只是字段名称的前缀。像“A-B-C :: D_ *” – stefansaye

+0

这就是你的字段名称,而不是你的字段值,对吗? – Val

+0

是的,字段名称不是字段值。对于我的例子,输出看起来像A-B-C :: D_ [randomNum] => field_value ...... – stefansaye