2017-08-29 1 views
0

Donc, voici un échantillon de mon journal:Motif personnalisé Grok pour les journaux

23:28:32.226 WARN [MsgParser:ListProc-Q0:I5] Parsing error 
Error mapping the fieldAdditional Information: 

    at com.authentic.mapper.parsing.LengthVar.readBytes(LengthVar.java:178) 
    at com.authentic.mapper.parsing.GrpLengthVar.read(GrpLengthVar.java:96) 
    at com.authentic.mapper.parsing.GrpLengthVar.read(GrpLengthVar.java:119) 
    at com.authentic.mapper.parsing.MsgParser.processReadEnumeration(MsgParser.java:339) 
    at com.authentic.mapper.parsing.MsgParser.parseIncomingMessageBody(MsgParser.java:295) 
    at com.authentic.mapper.MapperMgr.parseMsg(MapperMgr.java:1033) 
    at com.authentic.architecture.interchange.accesspoint.AbstractConnectionHandler.parseMessage(AbstractConnectionHandler.java:4408) 
    at com.authentic.architecture.interchange.accesspoint.AbstractConnectionHandler.plainMessageReceivedEvent(AbstractConnectionHandler.java:2031) 
    at com.authentic.architecture.interchange.accesspoint.AbstractConnectionHandler.messageReceivedEvent(AbstractConnectionHandler.java:1911) 
    at com.authentic.architecture.interchange.accesspoint.SocketConnectionHandler.messageReceivedEvent(SocketConnectionHandler.java:801) 
    at com.authentic.architecture.interchange.accesspoint.SocketConnectionHandler.messageReceivedEvent(SocketConnectionHandler.java:282) 
    at com.authentic.architecture.interchange.accesspoint.SocketConnectionHandler.messageReceivedEvent(SocketConnectionHandler.java:261) 
    at com.authentic.architecture.interchange.accesspoint.AbstractConnectionHandler.processEventQueue(AbstractConnectionHandler.java:4110) 
    at com.authentic.architecture.interchange.accesspoint.AbstractConnectionHandler.access$100(AbstractConnectionHandler.java:320) 
    at com.authentic.architecture.interchange.accesspoint.AbstractConnectionHandler$ConnectionHandlerRunner.execute(AbstractConnectionHandler.java:416) 
    at com.authentic.architecture.actions.ListProcessor.suspend(ListProcessor.java:1130) 
    at com.authentic.architecture.actions.ListProcessor.run(ListProcessor.java:775) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NumberFormatException: For input string: "^123" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at com.authentic.mapper.parsing.LengthVar.readBytes(LengthVar.java:170) 
    ... 17 more 

Je dois analyser ce dans les champs suivants se connecte: horodatage, log-niveau, enregistreur, msg, stacktrace.

i ai utilisé le filtre multiligne:

multiline { 
pattern => "%{TIME:timestamp}" 
negate => true 
what => “previous” 
} 

et le motif i utilisé dans le filtre de Grok:

match=>{"message"=>"%{TIME:timestamp} %{LOGLEVEL:loglevel} \s*\[%{DATA:logger}\]\s*%{GREEDYDATA:msg}\n*(?<stacktrace>(.|\r|\n)*)"} 

i ai vérifié avec http://grokconstructor.appspot.com/do/match. mais a obtenu cette erreur correspondante pour le champ stacktrace. enter image description here

veuillez suggérer quelques suggestions. merci d'avance.

Répondre

1

Vous aurez besoin d'un filtre multiligne si vous voulez faire correspondre l'ensemble de la pile. Ce filtre multiligne devrait fonctionner pour vous:

codec => multiline { 
     pattern => "^%{TIME} " 
     negate => true 
     what => previous 
    } 

Explication: Chaque ligne ne commençant pas par un horodatage (comme 23: 28: 32,226) seront regocnized dans le cadre de la ligne précédente. Voir aussi le docs traitant des multilignes.

Maintenant à votre modèle. À la suite de travaux pour moi:

%{TIME:timestamp} %{LOGLEVEL:loglevel} \[%{DATA:logger}\] %{GREEDYDATA:message}\n(?<stacktrace>(.|\r|\n)*) 

Jolie auto expliquer, je l'espère: accolades Échapper comme [et] avec \[ et \], \n pour correspondre à la nouvelle ligne. Notez également les espaces entre les entrées.

Pour la dernière partie (stacktrace), voyez également this question sur comment faire correspondre tout, y compris les nouvelles lignes.


Une configuration complète pourrait ressembler à ceci:

input { 
    file { 
    path => "/var/log/yourlog.log" 
    start_position => "beginning" 
    codec => multiline { 
     pattern => "^%{TIME} " 
     negate => true 
     what => previous 
    } 
    } 
} 
filter { 
    grok { 
    match => [ "message", "%{TIME:timestamp} %{LOGLEVEL:loglevel} \[%{DATA:logger}\] %{GREEDYDATA:message}\n(?<stacktrace>(.|\r|\n)*)" ] 
    } 
} 

Résultats sur http://grokconstructor.appspot.com: results

+0

salut @Phonolog s'il vous plaît examiner ma réponse –

+0

svp [modifier] (https: //meta.stackexchange.com/questions/21788/how-does-editing-work) votre question originale au lieu d'afficher une autre réponse. – Phonolog

+0

salut @ Phonolog j'ai édité le même, s'il vous plaît fournir une solution maintenant. –