ruby - ruby 代码Logstash中的功能

标签 ruby elasticsearch logstash

我有一个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/

相关文章:

ruby - 如何测试一个 block 是否为空?

json - 如何不通过logstash解析某些字段?

elasticsearch - Filebeat-如何覆盖Elasticsearch字段映射?

mysql - 使用 logstash 同步数据

ruby-on-rails - 如何检查一个对象是has_one还是has_many的结果?

mysql - 获取一张 table 售出的门票总数。 rails

ruby-on-rails - Net::HTTP::Proxy 请求...你是怎么做到的?

elasticsearch - 即使我的索引中没有太多数据,也超过了高磁盘水印

elasticsearch - 如何在 Filebeat/ELK 中为不同的日志定义单独的索引?

regex - 如何仅获取正则表达式 Grok 过滤器的第一个匹配项