2017-03-02 1 views
1

J'essaie de générer un message, mais son échec avec _grokparsefailure dans le journal, mais ne dit pas réellement ce qu'il échoue. La requête grok travaille sur https://grokdebug.herokuapp.com/Logstash grok échoue

input { 
    file { 
    type => "apache-access" 
    path => "C:/prdLogs/sent/*" 
} 
    filter { 
    grok { 
    match => ['message', '%{IP:clientip} - - \[%{GREEDYDATA:raw_timestamp} \] "%{WORD:httpmethod} %{NOTSPACE:referrer} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} "-" "%{NOTSPACE:request}" %{QS:UserAgent} %{WORD:httpmethodO} - - HTTP/%{NUMBER:httpversion2} "%{WORD:session}:%{WORD:httpmed}" "-" %{NUMBER:duration}' ] 
} 
    date { 
    match => [ "raw_timestamp" , 'dd/MMM/yyyy:HH:mm:ss Z' ] 
    target => '@timestamp' 
    } 
    } 

    output { 
elasticsearch { hosts => ["111.44.44.44:9200"] } 
    } 

Les données ressemble à:

199.77.22.22 - - [26/Feb/2017:10:18:45 +0800] "GET /myapp/app/i18n/key/parent.selector.label.select.item/?locale=en_GB&dojo.preventCache=1488075524942 HTTP/1.1" 200 "-" "https://mywebsite.here.com:31000/myApp/home.do" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)" GET - - HTTP/1.1 "0000bKOk4n4SSBHuyJJKed085D6:1ap8u8p8j" "-" 3203 
199.77.22.22 - - [26/Feb/2017:10:18:45 +0800] "GET /myapp/app/i18n/key/parent.selector.label.no.recently.used/?locale=en_GB&dojo.preventCache=1488075525483 HTTP/1.1" 200 "-" "https://mywebsite.here.com:31000/myApp/home.do" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)" GET - - HTTP/1.1 "0000bKOk4n4SSBHuyJJKed085D6:1ap8u8p8j" "-" 3159 
199.77.22.22 - - [26/Feb/2017:10:18:46 +0800] "GET /myapp/app/i18n/key/selector.label.selected/?locale=en_GB&dojo.preventCache=1488075525843 HTTP/1.1" 200 "-" "https://mywebsite.here.com:31000/myApp/home.do" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)" GET - - HTTP/1.1 "0000bKOk4n4SSBHuyJJKed085D6:1ap8u8p8j" "-" 3600 
199.77.22.22 - - [26/Feb/2017:10:18:46 +0800] "GET /myapp/app/i18n/key/actor.selector.label.remove.all/?locale=en_GB&dojo.preventCache=1488075526305 HTTP/1.1" 200 "-" "https://mywebsite.here.com:31000/myApp/home.do" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)" GET - - HTTP/1.1 "0000bKOk4n4SSBHuyJJKed085D6:1ap8u8p8j" "-" 3224 
199.77.22.22 - - [26/Feb/2017:10:18:46 +0800] "GET /myapp/app/i18n/key/com.label.filter.objects/?locale=en_GB&dojo.preventCache=1488075526711 HTTP/1.1" 200 "-" "https://mywebsite.here.com:31000/myApp/home.do" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)" GET - - HTTP/1.1 "0000bKOk4n4SSBHuyJJKed085D6:1ap8u8p8j" "-" 3299 

Ceci est en fait un journal d'accès apache, mais je ne pouvais pas utiliser COMBINEDAPACHELOG ou COMMONAPACHELOG. Même erreur en fait !!

Toutes les entrées de elasticsearch sont marquées "_grokparsefailure". J'ai lancé logstash en mode débogage avec log.level au débogage mais je ne vois aucune erreur dans le journal. Utilisez la dernière version de logstash.

Veuillez nous aviser. .

R2 D2 Merci, j'ai essayé cela, mais pas de joie :(

J'ai créé un fichier de motifs et votre modèle collé Je viens de modifier la charge utile juste « 130.39.22.22 - - [23/février/2015: 10:18:45 0800] » et ce qui suit est mon filtre:

filter { 

grok { 
     patterns_dir => ["c:/logstashconfig/patterns"] 
     match => ['message', '%{IP:clientip} - - /[%{DATE_CUSTOM:timestamp}/]'] 
    } 
date { 
    match => [ "timestamp" , 'dd/MMM/yyyy:HH:mm:ss Z' ] 
    target => '@timestamp' 
    } 
} 

le journal de débogage dans logstash:

{ 
     "path" => "C:/prdLogs/sent/test", 
"@timestamp" => 2017-03-03T00:06:15.269Z, 
     "@version" => "1", 
     "host" => "hkw20012125", 
    "message" => "130.39.22.22 - -  [23/Feb/2015:10:18:45 +0800]\r", 
     "type" => "apache-access", 
     "tags" => [ 
    [0]  "_grokparsefailure" 
] 
} 

Toutes les idées est-ce la fin 0800 des données ? Merci s.

+0

Oui c'est le +0800, parce que le motif devait attraper seulement '26/Feb/2017: 10: 18: 45'. Donc, certainement, il va lancer une erreur d'analyse grok. Enlevez '+ 0800' et voyez – Kulasangar

+0

Merci! J'ai bien compris que vous avez fait une faute de frappe avec "\ [% {DATE_CUSTOM: timestamp}]". Je pensais que ce serait \ [% {DATE_CUSTOM: timestamp} \] "comme je le pensais depuis l'horodatage de la charge utile, j'ai besoin d'échapper à la fois mais ce n'était pas le cas! – Kalim

+0

Bravo, ça a aidé. :) – Kulasangar

Répondre

0

Je pense que une fois que vous avez GREEDYDATA dans votre modèle, cela signifie considérer reste de votre ligne à partir du journal:

modèle de GREEDYDATA ressemble:

GREEDYDATA .* <-- means to capture the entire line 

Et votre grok match de devrait ressembler à quelque chose comme ceci si je ne me trompe pas:

grok { 
    match => ['message', '%{IPV4:clientip} - - %{GREEDYDATA:data}'] 
} 

sauf si vous avez besoin des valeurs pour être extrait séparément, le ci-dessus devrait faire l'affaire pour vous. Et je pense que la façon dont vous faites correspondre le timestamp est erronée.Pour gérer votre timestamp vous devez avoir les modèles ci-dessous dans votre fichier modèles:

MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]) 
MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b 
YEAR (?>\d\d){1,2} 
TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]) 
DATE_CUSTOM %{MONTHDAY}[/]%{MONTH }[/]%{YEAR}:%{TIME} 

Et vous pouvez simplement utiliser au sein de votre grok match:

grok { 
    match => ['message', '%{IPV4:clientip} - - \[%{DATE_CUSTOM:timestamp} %{GREEDYDATA:data}'] 
} 

Maintenant, vous allez être en mesure de faire correspondre le timestamp comme:

date { 
    match => [ "timestamp" , 'dd/MMM/yyyy:HH:mm:ss Z' ] 
    target => '@timestamp' 
} 

Espérons que cela aide!

+0

Merci, je pense certainement que vous êtes sur quelque chose ici !! J'ai testé les données raccourcies/config et il doesn ' J'ai l'impression de travailler après l'horodatage, je ne peux pas sembler avoir le temps d'utiliser greedydata, donc des idées sur comment extraire [26/Feb/2017: 10: 18: 45 +0800] cela? J'ai utilisé l'exemple d'ici goo.gl/oePmZS Je veux essentiellement extraire les données du message, puis ajouter des champs tels que client_ip, request_url, etc, ainsi que la mise à jour de l'horodateur – Kalim

+0

I ai mis à jour la réponse, je l'ai testé et ça marche f ou votre horodatage! Faites-moi savoir si cela fonctionne pour vous :) – Kulasangar

+0

@Kalim Notez que, j'ai extrait seulement la partie '26/Feb/2017: 10: 18: 45' de la ligne de journal pour' timestamp'. Vous pouvez l'extraire comme vous le souhaitez! – Kulasangar

0

Lorsque vous devez créer vos propres motifs, commencez par le côté gauche, allez lentement et utilisez le debugger.

Si vous testez ce modèle:

%{IP:clientip} - - \[ 

cela fonctionne, mais celui-ci:

%{IP:clientip} - - \[%{GREEDYDATA:raw_timestamp} \] 

ne fonctionne pas. La comparaison de votre motif à l'entrée montre qu'il n'y a pas d'espaces entre l'horodatage et le crochet de fermeture.

La modification de cette partie du motif à:

%{IP:clientip} - - \[%{GREEDYDATA:raw_timestamp}\] 

œuvres.

+0

Merci Désolé, mon mal, en quelque sorte je mets des espaces dans le code d'édition sur le formulaire ici mais c'est sans espaces dans la config – Kalim