2017-10-13 8 views
1

J'utilise un script ruby ​​dans logstash pour extraire des informations des logs.Script Ruby dans Logstash

if [status] == "Txn posted on POS" 
{ 
ruby{ 
     init => "@@map = {}" 
     code => "@@map['transactionStartTime'] = event.get('logTimestamp'),@@map['startTxnNumber'] = event.get('txnNumber'),@@map['startTillNumber'] = event.get('tillNumber')" 
    } 


} 
else if [status] == "Txn persisted in MREP" 
{ 
    ruby{ 
     code => "if @@map['startTxnNumber'] == event.get('txnNumber') 
        event.set('startedTime', @@map['startTxnNumber']) 
       end" 
     } 

}

pour une raison quelconque, il ne vient pas dans la clause if. Je ne peux pas sembler comprendre le problème, il n'y a aucune erreur de syntaxe je suis sûr

+0

Pouvez-vous afficher un exemple de ligne de journal censé déclencher la clause if? – Val

+0

Eh bien, il serait plus difficile de comprendre si je vous montre le journal, mais vous pouvez y aller: –

+0

Aussi pouvez-vous ajouter 'stdout {codec => rubydebug}' à votre section de sortie et montrer comment l'événement de fin ressemble à – Val

Répondre

1

J'ai trouvé le problème et l'ai fixé. Le problème est à cause de non-concordance de type de données, la condition

if @@map['startTxnNumber'] == event.get('txnNumber') 

txnNumber était une chaîne et startTxnNumber était un int, donc il ne comparait pas ces valeurs.