2017-11-08 3 views
0

ruby ​​코드를 사용하는 logstash 구성 파일이 있습니다. 필자가 작성한 코드는 반복적이어서 코드의 기능을 추출하려고합니다. logstash 구성 파일에서 가능합니까? 여기 루비 코드의 함수 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" 
} 

하는 방법}

답변

0

을 추출 할 필요가있는 내 구성 파일의 일부 것은 너무 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 
      ..." 
+0

이것은 내가 원하는 것이 아닙니다. 메서드에 모든 루비 코드를 넣고 다른 else 절로 호출하고 싶습니다. 현재 다른 코드에서 같은 코드를 반복하고 있습니다. 내 코드의 메소드를 작성하여 if 절에서 호출 할 수 있는지 알고 싶습니다. –

+0

이와 비슷한 것 https://discuss.elastic.co/t/methods-in-logstash-ruby/102144/3 –