2017-01-31 6 views
0

Iam пытается создать фильтр логстаста grok для журнала log4js.Фильтр Grok для log4js

код в моем nodejs приложение выглядит следующим образом:

var httpLogFormat = ':remote-addr - - [:date] ":method :url ' + 'HTTP/:http-version" :status :res[content-length] ' + '":referrer" ":user-agent" :response-time'; 
log4js.loadAppender('file'); 
log4js.addAppender(log4js.appenders.file('logs/access.log'), 'access'); 
var logger = log4js.getLogger('access'); 
app.use(log4js.connectLogger(logger, { level: 'auto', format: httpLogFormat })); 

Это приводит к следующему сообщению журнала:

[2017-01-31 08:54:32.491] [WARN] access - 192.1.1.10 - - [Tue, 31 Jan 2017 07:54:32 GMT] "GET /api/test HTTP/1.0" 304 undefined "https://localhost.com/test" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36" 111 

Мой текущий фильтр Grok выглядит следующим образом (ОБНОВЛЕНО):

grok { 
    match => { "message" => "\[%{HTTPDATE:timestamp}\] \[%{WORD:loglevel}\] %{WORD:logtype} - %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \"%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})\" %{NUMBER:response} - \"%{DATA:rawrequest}\" \"%{QS:agent}\""} 
    } 

Существует некоторая ошибка синтаксического анализа, и я подозреваю, что это связано с [], но я не уверен.

http://grokconstructor.appspot.com/ терпит неудачу с:

НЕ MATCHED. Самый длинный префикс регулярного выражения, соответствующий началу этой строки, выглядит следующим образом: префикс « перед матчем: [2017-01-31 08: 54: 32.491] [WARN] access - 192.1.1.10 - - [Tue, 31 Jan 2017 07 : 54: 32 GMT] после матча: GET/api/test HTTP/1.0 "304 undefined" https://test.localhost.com/test "" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/55.0.2883.75 Safari /537.36 "111

ответ

0

Я обновил grok для работы на вашем примере. Я думаю, что вы злоупотребляя несколько типов (QS, например, вам не нужно иметь «'S вокруг него):.

\[%{GREEDYDATA:timestamp}\]\ \[%{WORD:loglevel}\]\ %{WORD:logtype}\ -\ %{IPORHOST:clientip}\ %{USER:ident}\ %{USER:auth}\ \[%{GREEDYDATA}\]\ \"%{WORD:verb}\ %{NOTSPACE:request}(?: HTTP\/%{NUMBER:httpversion}|)\"\ %{NUMBER:response}\ %{WORD}\ \"%{DATA:rawrequest}\"\ %{QS:agent}\ %{INT:time_taken} 

Проверьте docs для других слов, которые вы можете использовать

Ваши проблемы с анализом, вероятно, дословного использования символов [и], поскольку они используются в регулярных выражениях, их нужно избегать, как в моем примере.

+0

Hi Rumbles, моя ошибка. Я дважды скопировал пример сообщения. обновили мой фильтр grok выше. – Tony

+0

Спасибо Rumbles, работает как шарм! – Tony