我有一个Logstash配置文件,其中使用了ruby代码。我正在编写的代码是重复的,我想提取其功能。是否可以在logstash配置文件中?
这是我的配置文件的一部分,我需要提取其中的一种方法
map_action => "update"
}
ruby
{
code => "event.set('storeNumber', @@map['storeNumber_task1'])
if @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] == nil and @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] == nil
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] = event.get('logTimestamp');
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] = event.get('logTimestamp');
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] = 1;
elsif @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] > event.get('logTimestamp')
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] = event.get('logTimestamp');
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] += 1;
elsif @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] < event.get('logTimestamp')
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] = event.get('logTimestamp');
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] += 1;
else
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] += 1;
end
if @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] == 5
@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'totalTime']= (Time.parse(@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime']).to_f - Time.parse(@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime']).to_f).round(4)
event.set('processingTime', @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'totalTime'])
end"
}
date
{
match => ["logTimestamp", "YYYY-MM-dd HH:mm:ss,SSS"]
target => "logTimestamp"
}
}
最佳答案
我猜想您想做的就是存储event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s
的值,这样就不会一遍又一遍地打印出来。答案是肯定的,应该像这样工作:
ruby
{
code => "foo = event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s
event.set('storeNumber', @@map['storeNumber_task1'])
if @@map[foo + 'startTime'] == nil and @@map[foo + 'endTime'] == nil
..."
关于ruby - ruby 代码Logstash中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47176629/