0

Je suis novice à ELK et j'écris un fichier de configuration qui utilise multiligne et nous avons besoin d'écrire un modèle pour les données d'entréeExpression régulière multiligne d'ELK?

110000|read|<soapenv:Envelope> 
<head>hello<head> 
<body></body> 
</soapenv:Envelope>|<soapenv:Envelope> 
<body></body> 
</soapenv:Envelope> 
210000|read|<soapenv:Envelope> 
<head>hello<head> 
<body></body> 
</soapenv:Envelope>|<soapenv:Envelope> 
<body></body> 
</soapenv:Envelope> 
370000|read|<soapenv:Envelope> 
<head>hello<head> 
<body></body> 
</soapenv:Envelope>|<soapenv:Envelope> 
<body></body> 
</soapenv:Envelope> 

et fichiers de configuration utilisés est:

input { 
    file { 
    path => "/opt/test5/practice_new/xml_input.dat" 
    start_position => "beginning" 
     codec => multiline 
    { 
    pattern => "^%{INT}\|%{WORD}\|<soapenv:Envelope*>\|<soapenv" 
    negate => true 
    what => "previous" 
    } 
    } 
} 
filter { 
    grok { 
    match => [ "message", "%{DATA:method_id}\|%{WORD:method_type}\|%{GREEDYDATA:request}\|%{GREEDYDATA:response}" ] 
    } 
} 

output { 
    elasticsearch { 
    hosts => "http://localhost:9200" 
    index => "xml" 
    } 
stdout {} 
} 

Mais la Le motif utilisé ne correspond pas à mes besoins.

veuillez me suggérer le motif correct.

Résultats attendus:

pour le 1er journal

method_id- 110000 

method type- 

request- 

response- 

Pour 2 log

method id- 210000 

    method type- 

    request- 

    response- 

de même pour le reste.

+1

Essayez [celui-ci] (https://regex101.com/r/lP5xef/1) (copier le regex du champ d'expression régulière pour essayer). –

+0

@Wiktor Stribizew pouvez-vous m'aider avec l'expression régulière du journal suivant – Ritwik

+0

Si la réponse ci-dessous ne fonctionne pas avec mon expression régulière, vous ne devriez pas l'accepter. –

Répondre

0

d'abord vous devrez fixer votre modèle multiligne:

codec => multiline { 
      pattern => "^%{NUMBER:method_id}\|%{DATA:method_type}\|<soapenv:Envelope>" 
      negate => true 
      what => previous 
     } 

Ensuite, vous pouvez utiliser le modèle Wiktor suggère dans les commentaires:

(?m)^(?<method_id>\d+)\|(?<method_type>\w+)\|(?<request><soapenv:Envelope>.*?</soapenv:Envelope>)\|(?<response><soapenv:Envelope>.*?</soapenv:Envelope>) 

Les résultats suivants pour les trois lignes de journal en votre message sur http://grokconstructor.appspot.com: results


Votre config ensemble pourrait ressembler à ceci:

input { 
    file { 
    path => "/opt/test5/practice_new/xml_input.dat" 
    start_position => "beginning" 
    codec => multiline { 
      pattern => "^%{NUMBER:method_id}\|%{DATA:method_type}\|<soapenv:Envelope>" 
      negate => true 
      what => previous 
     } 
    } 
} 
filter { 
    grok { 
    match => [ "message", "(?m)^(?<method_id>\d+)\|(?<method_type>\w+)\|(?<request><soapenv:Envelope>.*?</soapenv:Envelope>)\|(?<response><soapenv:Envelope>.*?</soapenv:Envelope>)" ] 
    } 
} 

output { 
    elasticsearch { 
    hosts => "http://localhost:9200" 
    index => "xml" 
    } 
stdout {} 
} 
+0

Où dois-je utiliser le modèle suggéré par Wiktor, car je reçois une erreur lors de l'utilisation de Grok. Ou devrais-je l'utiliser dans un modèle multiligne.? – Ritwik

+0

Je reçois une erreur en utilisant le pattern (donné par wiktor) dans grok. Où dois-je utiliser le modèle ..? – Ritwik

+0

Voir ma modification. Je ne peux pas le tester moi-même, car je n'ai pas de configuration ici, donc je dois compter sur les résultats de grokconstructor ... – Phonolog