实现步骤:
- 添加ruby插件,捕获system字段值,赋值给app_type
- 如果app_type捕获为null,则手动赋值为空字符串,这里注意,null和空字符串不一样。如果不添加判断,logstash每次进入一个为null就会报错,可能会影响处理速率
- 使用length方法判断长度,字符串0和大于12的,手动赋值system
- 不满足12的补全到12位字符串,然后转换为objectid
脚本如下:
#!/usr/local/logstash-7.9.3/bin/ruby
def filter(event)
app_type = event.get('system')
if app_type.nil?
app_type=''
end
str_num = app_type.length
if str_num == 0
event.set('streams','000000000000000000000001')
event.set('system','elap')
elsif str_num > 12
event.set('streams','000000000000000000000001')
event.set('system','elap')
else
app_type = app_type.rjust(12, 'i')
str_v = app_type.unpack('H*')
event.set('streams', str_v)
end
return [event]
end
logstash配置如下
......
filter{
......
ruby {
path => "/data/streams.rb"
}
......
}