Hello,
i had such log row ( for example ) 10.128.0.23 - - [16/May/2017:12:24:16 -0000] "GET /pp/api/personalprofile/update_status/na/Sweaty%20ASol HTTP/1.1" 101 361"
and I use such grok for parsing
%{IP:clientip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:action} /%{GREEDYDATA:message} %{WORD:protocol}/%{NUMBER:protocolNum}" %{NUMBER:status} %{NUMBER}
Whore filter
filter {
grok{
match=>{
"message" => "%{IP:clientip} \- \- \[%{NOTSPACE:date} \+%{INT}\] \"%{WORD:action} /%{WORD}/%{WORD}/%{NOTSPACE:verb} %{WORD:protocol}/%{NUMBER:protocolNum}\" %{NUMBER:status} %{NUMBER}"
}
add_field=>{
"eventName"=>"grok"
}
}
geoip {
source => "clientip"
}
}
I checked this grok with https://grokdebug.herokuapp.com/ and it works fine
However i getting such error on Logstash 5.4
[2017-05-16T17:11:29,774][ERROR][logstash.agent ] Cannot create pipeline {:reason=>"Expected one of #, {, } at line 4, column 63 (byte 87) after filter {\ngrok{\nmatch=>{\n\"log\" => \"%{IP:clientip} \\- \\- \\[%{NOTSPACE:date} \\+%{INT}\\] \""}
Please advice - what i 'm doing wrong ?
Thank you in advance.
Why not use the built-in COMMONAPACHELOG
grok pattern?
filter {
grok { match => { "message" => "%{COMMONAPACHELOG}" } }
date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] }
}
I put a simple configuration together and it works:
input { stdin {} }
filter {
grok { match => { "message" => "%{COMMONAPACHELOG}" } }
date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] }
}
output { stdout { codec => rubydebug } }
Here's what it looks like when I paste your sample from above:
[2017-05-16T11:36:23,922][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9601}
10.128.0.23 - - [16/May/2017:12:24:16 -0000] "GET /pp/api/personalprofile/update_status/na/Sweaty%20ASol HTTP/1.1" 101 361
{
"request" => "/pp/api/personalprofile/update_status/na/Sweaty%20ASol",
"auth" => "-",
"ident" => "-",
"verb" => "GET",
"message" => "10.128.0.23 - - [16/May/2017:12:24:16 -0000] \"GET /pp/api/personalprofile/update_status/na/Sweaty%20ASol HTTP/1.1\" 101 361",
"@timestamp" => 2017-05-16T12:24:16.000Z,
"response" => "101",
"bytes" => "361",
"clientip" => "10.128.0.23",
"@version" => "1",
"host" => "localhost.local",
"httpversion" => "1.1",
"timestamp" => "16/May/2017:12:24:16 -0000"
}
As an aside, this is how that pattern is built:
COMMONAPACHELOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
You can see how each of these meta-patterns are built in the github repository .
jovanmal
(Kontranavoj)
May 16, 2017, 5:55pm
4
Hi,
@Igor_Gerasimow
did you tried to use single quotes instead of double ons in message expression? So, instead of
should be
"message" => '%{IP:clientip} - - [%{NOTSPACE:date} +%{INT}] "%{WORD:action} /%{WORD}/%{WORD}/%{NOTSPACE:verb} %{WORD:protocol}/%{NUMBER:protocolNum}" %{NUMBER:status} %{NUMBER}'
Well - it is nginx web server log - is it will be work ?
BTW - not it is impossible to change log format.
nginx uses the same basic format.
Hi - no this not gonna work because in my log could be [16/May/2017:12:24:16 -0000]
and your example dill drop it, because of
"message" => '%{IP:clientip} - - [%{NOTSPACE:date} +%{INT}] \"
jovanmal
(Kontranavoj)
May 16, 2017, 9:32pm
8
Can you post output of command
/usr/share/logstash/bin/logstash --path.config /etc/logstash/your_logstash_config.conf --config.test_and_exit
Change path to one that corresponds to your config file, of course
jovanmal:
--config.test_and_exit
i did it.
/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
jovanmal
(Kontranavoj)
May 19, 2017, 6:05am
10
You didn't specified exact config file, you have to do it.
See results in Logstash log file and post it
Hi - you right
10.128.0.17 - - [19/May/2017:12:29:12 +0000] "GET /public/a245afb093cb3064f1909c02782cbc63.jpg HTTP/1.1" 200 175003 "https://site.domain.st/profile/euw/BornToDieftw" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" "-"
{
"request" => "/public/a245afb093cb3064f1909c02782cbc63.jpg",
"agent" => "\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\"",
"auth" => "-",
"ident" => "-",
"verb" => "GET",
"message" => "10.128.0.17 - - [19/May/2017:12:29:12 +0000] \"GET /public/a245afb093cb3064f1909c02782cbc63.jpg HTTP/1.1\" 200 175003 \"https://site.domain.st/profile/euw/BornToDieftw\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\" \"-\"",
"referrer" => "\"https://stats.mobalytics.gg/profile/euw/BornToDieftw\"",
"@timestamp" => 2017-05-19T12:29:12.000Z,
"response" => "200",
"bytes" => "175003",
"clientip" => "10.128.0.17",
"@version" => "1",
"host" => "elasticsearch-logs",
"httpversion" => "1.1",
"timestamp" => "19/May/2017:12:29:12 +0000"
}
but in kibana i still does not see parsing result
system
(system)
Closed
June 16, 2017, 1:38pm
12
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.